')
+ .append(degree)
+ .append($('
').text(fm.i18n('degree')))
+ )
+ .append($(uibuttonset).append(uideg270).append($(uiseparator)).append(uideg90))
+ )
+ .append(uidegslider)
+ );
+
+
+ dialog.append(uitype);
+
+ control.append($(row))
+ .append(uiresize)
+ .append(uicrop.hide())
+ .append(uirotate.hide())
+ .find('input,select').attr('disabled', 'disabled');
+
+ rhandle.append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
');
+
+ preview.append(spinner).append(rhandle.hide()).append(img.hide());
+
+ rhandlec.css('position', 'absolute')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
')
+ .append('
');
+
+ preview.append(basec.css('position', 'absolute').hide().append(imgc).append(rhandlec.append(coverc)));
+
+ preview.append(imgr.hide());
+
+ preview.css('overflow', 'hidden');
+
+ dialog.append(preview).append(control);
+
+ buttons[fm.i18n('btnApply')] = save;
+ buttons[fm.i18n('btnCancel')] = function() { dialog.elfinderdialog('close'); };
+
+ fm.dialog(dialog, {
+ title : file.name,
+ width : 650,
+ resizable : false,
+ destroyOnClose : true,
+ buttons : buttons,
+ open : function() { preview.zIndex(1+$(this).parent().zIndex()); }
+ }).attr('id', id);
+
+ // for IE < 9 dialog mising at open second+ time.
+ if (fm.UA.ltIE8) {
+ $('.elfinder-dialog').css('filter', '');
+ }
+
+ reset.css('left', width.position().left + width.width() + 12);
+
+ coverc.css({ 'opacity': 0.2, 'background-color': '#fff', 'position': 'absolute'}),
+ rhandlec.css('cursor', 'move');
+ rhandlec.find('.elfinder-resize-handle-point').css({
+ 'background-color' : '#fff',
+ 'opacity': 0.5,
+ 'border-color':'#000'
+ });
+
+ imgr.css('cursor', 'pointer');
+
+ uitype.buttonset();
+
+ pwidth = preview.width() - (rhandle.outerWidth() - rhandle.width());
+ pheight = preview.height() - (rhandle.outerHeight() - rhandle.height());
+
+ img.attr('src', src + (src.indexOf('?') === -1 ? '?' : '&')+'_='+Math.random());
+ imgc.attr('src', img.attr('src'));
+ imgr.attr('src', img.attr('src'));
+
+ },
+
+ id, dialog
+ ;
+
+
+ if (!files.length || files[0].mime.indexOf('image/') === -1) {
+ return dfrd.reject();
+ }
+
+ id = 'resize-'+fm.namespace+'-'+files[0].hash;
+ dialog = fm.getUI().find('#'+id);
+
+ if (dialog.length) {
+ dialog.elfinderdialog('toTop');
+ return dfrd.resolve();
+ }
+
+ open(files[0], id);
+
+ return dfrd;
+ };
+
+};
+
+(function ($) {
+
+ var findProperty = function (styleObject, styleArgs) {
+ var i = 0 ;
+ for( i in styleArgs) {
+ if (typeof styleObject[styleArgs[i]] != 'undefined')
+ return styleArgs[i];
+ }
+ styleObject[styleArgs[i]] = '';
+ return styleArgs[i];
+ };
+
+ $.cssHooks.rotate = {
+ get: function(elem, computed, extra) {
+ return $(elem).rotate();
+ },
+ set: function(elem, value) {
+ $(elem).rotate(value);
+ return value;
+ }
+ };
+ $.cssHooks.transform = {
+ get: function(elem, computed, extra) {
+ var name = findProperty( elem.style ,
+ ['WebkitTransform', 'MozTransform', 'OTransform' , 'msTransform' , 'transform'] );
+ return elem.style[name];
+ },
+ set: function(elem, value) {
+ var name = findProperty( elem.style ,
+ ['WebkitTransform', 'MozTransform', 'OTransform' , 'msTransform' , 'transform'] );
+ elem.style[name] = value;
+ return value;
+ }
+ };
+
+ $.fn.rotate = function(val) {
+ if (typeof val == 'undefined') {
+ if (!!window.opera) {
+ var r = this.css('transform').match(/rotate\((.*?)\)/);
+ return ( r && r[1])?
+ Math.round(parseFloat(r[1]) * 180 / Math.PI) : 0;
+ } else {
+ var r = this.css('transform').match(/rotate\((.*?)\)/);
+ return ( r && r[1])? parseInt(r[1]) : 0;
+ }
+ }
+ this.css('transform',
+ this.css('transform').replace(/none|rotate\(.*?\)/, '') + 'rotate(' + parseInt(val) + 'deg)');
+ return this;
+ };
+
+ $.fx.step.rotate = function(fx) {
+ if ( fx.state == 0 ) {
+ fx.start = $(fx.elem).rotate();
+ fx.now = fx.start;
+ }
+ $(fx.elem).rotate(fx.now);
+ };
+
+ if (typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined") { // IE & IE<9
+ var GetAbsoluteXY = function(element) {
+ var pnode = element;
+ var x = pnode.offsetLeft;
+ var y = pnode.offsetTop;
+
+ while ( pnode.offsetParent ) {
+ pnode = pnode.offsetParent;
+ if (pnode != document.body && pnode.currentStyle['position'] != 'static') {
+ break;
+ }
+ if (pnode != document.body && pnode != document.documentElement) {
+ x -= pnode.scrollLeft;
+ y -= pnode.scrollTop;
+ }
+ x += pnode.offsetLeft;
+ y += pnode.offsetTop;
+ }
+
+ return { x: x, y: y };
+ };
+
+ var StaticToAbsolute = function (element) {
+ if ( element.currentStyle['position'] != 'static') {
+ return ;
+ }
+
+ var xy = GetAbsoluteXY(element);
+ element.style.position = 'absolute' ;
+ element.style.left = xy.x + 'px';
+ element.style.top = xy.y + 'px';
+ };
+
+ var IETransform = function(element,transform){
+
+ var r;
+ var m11 = 1;
+ var m12 = 1;
+ var m21 = 1;
+ var m22 = 1;
+
+ if (typeof element.style['msTransform'] != 'undefined'){
+ return true;
+ }
+
+ StaticToAbsolute(element);
+
+ r = transform.match(/rotate\((.*?)\)/);
+ var rotate = ( r && r[1]) ? parseInt(r[1]) : 0;
+
+ rotate = rotate % 360;
+ if (rotate < 0) rotate = 360 + rotate;
+
+ var radian= rotate * Math.PI / 180;
+ var cosX =Math.cos(radian);
+ var sinY =Math.sin(radian);
+
+ m11 *= cosX;
+ m12 *= -sinY;
+ m21 *= sinY;
+ m22 *= cosX;
+
+ element.style.filter = (element.style.filter || '').replace(/progid:DXImageTransform\.Microsoft\.Matrix\([^)]*\)/, "" ) +
+ ("progid:DXImageTransform.Microsoft.Matrix(" +
+ "M11=" + m11 +
+ ",M12=" + m12 +
+ ",M21=" + m21 +
+ ",M22=" + m22 +
+ ",FilterType='bilinear',sizingMethod='auto expand')")
+ ;
+
+ var ow = parseInt(element.style.width || element.width || 0 );
+ var oh = parseInt(element.style.height || element.height || 0 );
+
+ var radian = rotate * Math.PI / 180;
+ var absCosX =Math.abs(Math.cos(radian));
+ var absSinY =Math.abs(Math.sin(radian));
+
+ var dx = (ow - (ow * absCosX + oh * absSinY)) / 2;
+ var dy = (oh - (ow * absSinY + oh * absCosX)) / 2;
+
+ element.style.marginLeft = Math.floor(dx) + "px";
+ element.style.marginTop = Math.floor(dy) + "px";
+
+ return(true);
+ };
+
+ var transform_set = $.cssHooks.transform.set;
+ $.cssHooks.transform.set = function(elem, value) {
+ transform_set.apply(this, [elem, value] );
+ IETransform(elem,value);
+ return value;
+ };
+ }
+
+})(jQuery);
+
+
+/*
+ * File: /home/osc/elFinder-build/elFinder/js/commands/rm.js
+ */
+
+/**
+ * @class elFinder command "rm"
+ * Delete files
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.rm = function() {
+
+ this.shortcuts = [{
+ pattern : 'delete ctrl+backspace'
+ }];
+
+ this.getstate = function(sel) {
+ var fm = this.fm;
+ sel = sel || fm.selected();
+ return !this._disabled && sel.length && $.map(sel, function(h) { var f = fm.file(h); return f && f.phash && !f.locked ? h : null }).length == sel.length
+ ? 0 : -1;
+ }
+
+ this.exec = function(hashes) {
+ var self = this,
+ fm = this.fm,
+ dfrd = $.Deferred()
+ .fail(function(error) {
+ error && fm.error(error);
+ }),
+ files = this.files(hashes),
+ cnt = files.length,
+ cwd = fm.cwd().hash,
+ goroot = false;
+
+ if (!cnt || this._disabled) {
+ return dfrd.reject();
+ }
+
+ $.each(files, function(i, file) {
+ if (!file.phash) {
+ return !dfrd.reject(['errRm', file.name, 'errPerm']);
+ }
+ if (file.locked) {
+ return !dfrd.reject(['errLocked', file.name]);
+ }
+ if (file.hash == cwd) {
+ goroot = fm.root(file.hash);
+ }
+ });
+
+ if (dfrd.state() == 'pending') {
+ files = this.hashes(hashes);
+
+ fm.confirm({
+ title : self.title,
+ text : 'confirmRm',
+ accept : {
+ label : 'btnRm',
+ callback : function() {
+ fm.lockfiles({files : files});
+ fm.request({
+ data : {cmd : 'rm', targets : files},
+ notify : {type : 'rm', cnt : cnt},
+ preventFail : true
+ })
+ .fail(function(error) {
+ dfrd.reject(error);
+ })
+ .done(function(data) {
+ dfrd.done(data);
+ goroot && fm.exec('open', goroot)
+ }
+ ).always(function() {
+ fm.unlockfiles({files : files});
+ });
+ }
+ },
+ cancel : {
+ label : 'btnCancel',
+ callback : function() { dfrd.reject(); }
+ }
+ });
+ }
+
+ return dfrd;
+ }
+
+}
+
+/*
+ * File: /home/osc/elFinder-build/elFinder/js/commands/search.js
+ */
+
+/**
+ * @class elFinder command "search"
+ * Find files
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.search = function() {
+ this.title = 'Find files';
+ this.options = {ui : 'searchbutton'}
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+
+ /**
+ * Return command status.
+ * Search does not support old api.
+ *
+ * @return Number
+ **/
+ this.getstate = function() {
+ return 0;
+ }
+
+ /**
+ * Send search request to backend.
+ *
+ * @param String search string
+ * @return $.Deferred
+ **/
+ this.exec = function(q) {
+ var fm = this.fm;
+
+ if (typeof(q) == 'string' && q) {
+ fm.trigger('searchstart', {query : q});
+
+ return fm.request({
+ data : {cmd : 'search', q : q},
+ notify : {type : 'search', cnt : 1, hideCnt : true}
+ });
+ }
+ fm.getUI('toolbar').find('.'+fm.res('class', 'searchbtn')+' :text').focus();
+ return $.Deferred().reject();
+ }
+
+}
+
+/*
+ * File: /home/osc/elFinder-build/elFinder/js/commands/sort.js
+ */
+
+/**
+ * @class elFinder command "sort"
+ * Change sort files rule
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.sort = function() {
+ /**
+ * Command options
+ *
+ * @type Object
+ */
+ this.options = {ui : 'sortbutton'};
+
+ this.getstate = function() {
+ return 0;
+ }
+
+ this.exec = function(hashes, sort) {
+ var fm = this.fm,
+ sort = $.extend({
+ type : fm.sortType,
+ order : fm.sortOrder,
+ stick : fm.sortStickFolders
+ }, sort);
+
+ this.fm.setSort(sort.type, sort.order, sort.stick);
+ return $.Deferred().resolve();
+ }
+
+}
+
+/*
+ * File: /home/osc/elFinder-build/elFinder/js/commands/up.js
+ */
+
+/**
+ * @class elFinder command "up"
+ * Go into parent directory
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.up = function() {
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+
+ this.shortcuts = [{
+ pattern : 'ctrl+up'
+ }];
+
+ this.getstate = function() {
+ return this.fm.cwd().phash ? 0 : -1;
+ }
+
+ this.exec = function() {
+ return this.fm.cwd().phash ? this.fm.exec('open', this.fm.cwd().phash) : $.Deferred().reject();
+ }
+
+}
+
+/*
+ * File: /home/osc/elFinder-build/elFinder/js/commands/upload.js
+ */
+
+/**
+ * @class elFinder command "upload"
+ * Upload files using iframe or XMLHttpRequest & FormData.
+ * Dialog allow to send files using drag and drop
+ *
+ * @type elFinder.command
+ * @author Dmitry (dio) Levashov
+ */
+elFinder.prototype.commands.upload = function() {
+ var hover = this.fm.res('class', 'hover');
+
+ this.disableOnSearch = true;
+ this.updateOnSelect = false;
+
+ // Shortcut opens dialog
+ this.shortcuts = [{
+ pattern : 'ctrl+u'
+ }];
+
+ /**
+ * Return command state
+ *
+ * @return Number
+ **/
+ this.getstate = function() {
+ return !this._disabled && this.fm.cwd().write ? 0 : -1;
+ };
+
+
+ this.exec = function(data) {
+ var fm = this.fm,
+ upload = function(data) {
+ dialog.elfinderdialog('close');
+ fm.upload(data)
+ .fail(function(error) {
+ dfrd.reject(error);
+ })
+ .done(function(data) {
+ dfrd.resolve(data);
+ });
+ },
+ dfrd, dialog, input, button, dropbox, pastebox, dropUpload, paste;
+
+ if (this.disabled()) {
+ return $.Deferred().reject();
+ }
+
+ dropUpload = function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ var file = false;
+ var type = '';
+ var data = null;
+ try{
+ data = e.dataTransfer.getData('text/html');
+ } catch(e) {}
+ if (data) {
+ file = [ data ];
+ type = 'html';
+ } else if (data = e.dataTransfer.getData('text')) {
+ file = [ data ];
+ type = 'text';
+ } else if (e.dataTransfer && e.dataTransfer.items && e.dataTransfer.items.length) {
+ file = e.dataTransfer;
+ type = 'data';
+ } else if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length) {
+ file = e.dataTransfer.files;
+ type = 'files';
+ }
+ return file? fm.upload({files : file, type : type}) : false;
+ };
+
+ if (data) {
+ if (data.input || data.files) {
+ data.type = 'files';
+ return fm.upload(data);
+ } else if (data.dropEvt) {
+ return dropUpload(data.dropEvt);
+ }
+ }
+
+ dfrd = $.Deferred();
+
+ paste = function(e) {
+ var e = e.originalEvent || e;
+ var files = [];
+ var file;
+ if (e.clipboardData && e.clipboardData.items && e.clipboardData.items.length){
+ for (var i=0; i < e.clipboardData.items.length; i++) {
+ if (e.clipboardData.items[i].kind == 'file') {
+ file = e.clipboardData.items[i].getAsFile();
+ files.push(file);
+ }
+ }
+ if (files.length) {
+ upload({files : files, type : 'files'});
+ return;
+ }
+ }
+ var my = e.target || e.srcElement;
+ setTimeout(function () {
+ if (my.innerHTML) {
+ var src = my.innerHTML.replace(/
]*>/gi, ' ');
+ var type = src.match(/<[^>]+>/)? 'html' : 'text';
+ my.innerHTML = '';
+ upload({files : [ src ], type : type});
+ }
+ }, 1);
+ };
+
+ input = $('
')
+ .change(function() {
+ upload({input : input[0]});
+ });
+
+ button = $('
'+fm.i18n('selectForUpload')+'
')
+ .append($('
').append(input))
+ .hover(function() {
+ button.toggleClass(hover)
+ });
+
+ dialog = $('
')
+ .append(button);
+
+ pastebox = $('
'+fm.i18n('dropFilesBrowser')+'
')
+ .on('paste drop', function(e){
+ paste(e);
+ })
+ .on('mousedown click', function(){
+ $(this).focus();
+ })
+ .on('focus', function(e){
+ e = e.originalEvent || e;
+ (e.target || e.srcElement).innerHTML = '';
+ })
+ .on('blur', function(e){
+ e = e.originalEvent || e;
+ (e.target || e.srcElement).innerHTML = fm.i18n('dropFilesBrowser');
+ })
+ .on('dragenter mouseover', function(){
+ pastebox.addClass(hover);
+ })
+ .on('dragleave mouseout', function(){
+ pastebox.removeClass(hover);
+ });
+
+ if (fm.dragUpload) {
+ dropbox = $('
'+fm.i18n('dropPasteFiles')+'
')
+ .on('paste', function(e){
+ paste(e);
+ })
+ .on('mousedown click', function(){
+ $(this).focus();
+ })
+ .on('focus', function(e){
+ (e.originalEvent || e).target.innerHTML = '';
+ })
+ .on('blur', function(e){
+ (e.originalEvent || e).target.innerHTML = fm.i18n('dropPasteFiles');
+ })
+ .on('mouseover', function(){
+ $(this).addClass(hover);
+ })
+ .on('mouseout', function(){
+ $(this).removeClass(hover);
+ })
+ .prependTo(dialog)
+ .after('
'+fm.i18n('or')+'
')[0];
+
+ dropbox.addEventListener('dragenter', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ $(dropbox).addClass(hover);
+ }, false);
+
+ dropbox.addEventListener('dragleave', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ $(dropbox).removeClass(hover);
+ }, false);
+
+ dropbox.addEventListener('dragover', function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ $(dropbox).addClass(hover);
+ }, false);
+
+ dropbox.addEventListener('drop', function(e) {
+ dialog.elfinderdialog('close');
+ dropUpload(e);
+ }, false);
+
+ } else {
+ pastebox
+ .prependTo(dialog)
+ .after('
'+fm.i18n('or')+'
')[0];
+
+ }
+
+ fm.dialog(dialog, {
+ title : this.title,
+ modal : true,
+ resizable : false,
+ destroyOnClose : true
+ });
+
+ return dfrd;
+ };
+
+};
+
+/*
+ * File: /home/osc/elFinder-build/elFinder/js/commands/view.js
+ */
+
+/**
+ * @class elFinder command "view"
+ * Change current directory view (icons/list)
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+elFinder.prototype.commands.view = function() {
+ this.value = this.fm.viewType;
+ this.alwaysEnabled = true;
+ this.updateOnSelect = false;
+
+ this.options = { ui : 'viewbutton'};
+
+ this.getstate = function() {
+ return 0;
+ }
+
+ this.exec = function() {
+ var value = this.fm.storage('view', this.value == 'list' ? 'icons' : 'list');
+ this.fm.viewchange();
+ this.update(void(0), value);
+ }
+
+}
+})(jQuery);
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/elfinder.min.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/elfinder.min.js
new file mode 100644
index 00000000..50568256
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/elfinder.min.js
@@ -0,0 +1,14 @@
+/*!
+ * elFinder - file manager for web
+ * Version 2.1 (Nightly: 595cc96) (2014-04-24)
+ * http://elfinder.org
+ *
+ * Copyright 2009-2013, Studio 42
+ * Licensed under a 3 clauses BSD license
+ */
+!function(e){window.elFinder=function(t,n){this.time("load");var i,r,a,o=this,t=e(t),s=e("
").append(t.contents()),l=t.attr("style"),d=t.attr("id")||"",c="elfinder-"+(d||Math.random().toString().substr(2,7)),u="mousedown."+c,p="keydown."+c,h="keypress."+c,f=!0,m=!0,g="",v={path:"",url:"",tmbUrl:"",disabled:[],separator:"/",archives:[],extract:[],copyOverwrite:!0,uploadMaxSize:0,tmb:!1},b={},y=[],w={},x={},k=[],C=[],F=[],T=new o.command(o),z="auto",I=400,P=e(document.createElement("audio")).hide().appendTo("body")[0],M=function(t){if(t.init)b={};else for(var n in b)b.hasOwnProperty(n)&&"directory"!=b[n].mime&&b[n].phash==g&&-1===e.inArray(n,C)&&delete b[n];g=t.cwd.hash,D(t.files),b[g]||D([t.cwd]),o.lastDir(g)},D=function(e){for(var t,n=e.length;n--;)if(t=e[n],t.name&&t.hash&&t.mime){if(!t.phash){var i="volume_"+t.name,r=o.i18n(i);i!=r&&(t.i18=r)}b[t.hash]=t}},A=function(t){var n=t.keyCode,i=!(!t.ctrlKey&&!t.metaKey);f&&(e.each(x,function(e,r){r.type==t.type&&r.keyCode==n&&r.shiftKey==t.shiftKey&&r.ctrlKey==i&&r.altKey==t.altKey&&(t.preventDefault(),t.stopPropagation(),r.callback(t,o),o.debug("shortcut-exec",e+" : "+r.description))}),9!=n||e(t.target).is(":input")||t.preventDefault())},O=new Date;return this.api=null,this.newAPI=!1,this.oldAPI=!1,this.OS=-1!==navigator.userAgent.indexOf("Mac")?"mac":-1!==navigator.userAgent.indexOf("Win")?"win":"other",this.UA=function(){var e=!document.uniqueID&&!window.opera&&!window.sidebar&&window.localStorage&&"undefined"==typeof window.orientation;return{ltIE6:"undefined"==typeof window.addEventListener&&"undefined"==typeof document.documentElement.style.maxHeight,ltIE7:"undefined"==typeof window.addEventListener&&"undefined"==typeof document.querySelectorAll,ltIE8:"undefined"==typeof window.addEventListener&&"undefined"==typeof document.getElementsByClassName,IE:document.uniqueID,Firefox:window.sidebar,Opera:window.opera,Webkit:e,Chrome:e&&window.chrome,Safari:e&&!window.chrome,Mobile:"undefined"!=typeof window.orientation,Touch:"undefined"!=typeof window.ontouchstart}}(),this.options=e.extend(!0,{},this._options,n||{}),n.ui&&(this.options.ui=n.ui),n.commands&&(this.options.commands=n.commands),n.uiOptions&&n.uiOptions.toolbar&&(this.options.uiOptions.toolbar=n.uiOptions.toolbar),e.extend(this.options.contextmenu,n.contextmenu),this.requestType=/^(get|post)$/i.test(this.options.requestType)?this.options.requestType.toLowerCase():"get",this.customData=e.isPlainObject(this.options.customData)?this.options.customData:{},this.customHeaders=e.isPlainObject(this.options.customHeaders)?this.options.customHeaders:{},this.xhrFields=e.isPlainObject(this.options.xhrFields)?this.options.xhrFields:{},this.id=d,this.uploadURL=n.urlUpload||n.url,this.namespace=c,this.lang=this.i18[this.options.lang]&&this.i18[this.options.lang].messages?this.options.lang:"en",a="en"==this.lang?this.i18.en:e.extend(!0,{},this.i18.en,this.i18[this.lang]),this.direction=a.direction,this.messages=a.messages,this.dateFormat=this.options.dateFormat||a.dateFormat,this.fancyFormat=this.options.fancyDateFormat||a.fancyDateFormat,this.today=new Date(O.getFullYear(),O.getMonth(),O.getDate()).getTime()/1e3,this.yesterday=this.today-86400,r=this.options.UTCDate?"UTC":"",this.getHours="get"+r+"Hours",this.getMinutes="get"+r+"Minutes",this.getSeconds="get"+r+"Seconds",this.getDate="get"+r+"Date",this.getDay="get"+r+"Day",this.getMonth="get"+r+"Month",this.getFullYear="get"+r+"FullYear",this.cssClass="ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-"+("rtl"==this.direction?"rtl":"ltr")+" "+this.options.cssClass,this.storage=function(){try{return"localStorage"in window&&null!==window.localStorage?o.localStorage:o.cookie}catch(e){return o.cookie}}(),this.viewType=this.storage("view")||this.options.defaultView||"icons",this.sortType=this.storage("sortType")||this.options.sortType||"name",this.sortOrder=this.storage("sortOrder")||this.options.sortOrder||"asc",this.sortStickFolders=this.storage("sortStickFolders"),this.sortStickFolders=null===this.sortStickFolders?!!this.options.sortStickFolders:!!this.sortStickFolders,this.sortRules=e.extend(!0,{},this._sortRules,this.options.sortsRules),e.each(this.sortRules,function(e,t){"function"!=typeof t&&delete o.sortRules[e]}),this.compare=e.proxy(this.compare,this),this.notifyDelay=this.options.notifyDelay>0?parseInt(this.options.notifyDelay):500,this.draggable={appendTo:"body",addClasses:!0,delay:30,distance:8,revert:!0,refreshPositions:!0,cursor:"move",cursorAt:{left:50,top:47},drag:function(e,t){t.helper.data("locked")||t.helper.toggleClass("elfinder-drag-helper-plus",e.shiftKey||e.ctrlKey||e.metaKey)},start:function(t,n){var i,r,a=e.map(n.helper.data("files")||[],function(e){return e||null});for(i=a.length;i--;)if(r=a[i],b[r].locked){n.helper.addClass("elfinder-drag-helper-plus").data("locked",!0);break}},stop:function(){o.trigger("focus").trigger("dragstop")},helper:function(t){var n,i,r=this.id?e(this):e(this).parents("[id]:first"),a=e('
'),s=function(e){return'
'};return o.trigger("dragstart",{target:r[0],originalEvent:t}),n=r.is("."+o.res("class","cwdfile"))?o.selected():[o.navId2Hash(r.attr("id"))],a.append(s(b[n[0]].mime)).data("files",n).data("locked",!1),(i=n.length)>1&&a.append(s(b[n[i-1]].mime)+'
'+i+" "),a}},this.droppable={tolerance:"pointer",accept:".elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file",hoverClass:this.res("class","adroppable"),drop:function(t,n){var i,r,a,s=e(this),l=e.map(n.helper.data("files")||[],function(e){return e||null}),d=[],c="class";for(s.is("."+o.res(c,"cwd"))?r=g:s.is("."+o.res(c,"cwdfile"))?r=s.attr("id"):s.is("."+o.res(c,"navdir"))&&(r=o.navId2Hash(s.attr("id"))),i=l.length;i--;)a=l[i],a!=r&&b[a].phash!=r&&d.push(a);d.length&&(n.helper.hide(),o.clipboard(d,!(t.ctrlKey||t.shiftKey||t.metaKey||n.helper.data("locked"))),o.exec("paste",r),o.trigger("drop",{files:l}))}},this.enabled=function(){return t.is(":visible")&&f},this.visible=function(){return t.is(":visible")},this.root=function(e){for(var t,n=b[e||g];n&&n.phash;)n=b[n.phash];if(n)return n.hash;for(;t in b&&b.hasOwnProperty(t);)if(n=b[t],!n.phash&&"directory"==!n.mime&&n.read)return n.hash;return""},this.cwd=function(){return b[g]||{}},this.option=function(e){return v[e]||""},this.file=function(e){return b[e]},this.files=function(){return e.extend(!0,{},b)},this.parents=function(e){for(var t,n=[];t=this.file(e);)n.unshift(t.hash),e=t.phash;return n},this.path2array=function(e,t){for(var n,i=[];e&&(n=b[e])&&n.hash;)i.unshift(t&&n.i18?n.i18:n.name),e=n.phash;return i},this.path=function(e,t){return b[e]&&b[e].path?b[e].path:this.path2array(e,t).join(v.separator)},this.url=function(t){var n=b[t];if(!n||!n.read)return"";if("1"==n.url&&this.request({data:{cmd:"url",target:t},preventFail:!0,options:{async:!1}}).done(function(e){n.url=e.url||""}).fail(function(){n.url=""}),n.url)return n.url;if(v.url)return v.url+e.map(this.path2array(t),function(e){return encodeURIComponent(e)}).slice(1).join("/");var i=e.extend({},this.customData,{cmd:"file",target:n.hash});return this.oldAPI&&(i.cmd="open",i.current=n.phash),this.options.url+(-1===this.options.url.indexOf("?")?"?":"&")+e.param(i,!0)},this.tmb=function(e){var t=b[e],n=t&&t.tmb&&1!=t.tmb?v.tmbUrl+t.tmb:"";return n&&(this.UA.Opera||this.UA.IE)&&(n+="?_="+(new Date).getTime()),n},this.selected=function(){return y.slice(0)},this.selectedFiles=function(){return e.map(y,function(t){return b[t]?e.extend({},b[t]):null})},this.fileByName=function(e,t){var n;for(n in b)if(b.hasOwnProperty(n)&&b[n].phash==t&&b[n].name==e)return b[n]},this.validResponse=function(e,t){return t.error||this.rules[this.rules[e]?e:"defaults"](t)},this.returnBytes=function(e){if("-1"==e&&(e=0),e){e=e.replace(/b$/i,"");var t=e.charAt(e.length-1).toLowerCase();e=e.replace(/[gmk]$/i,""),"g"==t?e=1024*1024*1024*e:"m"==t?e=1024*1024*e:"k"==t&&(e=1024*e)}return e},this.request=function(t){var n,i,r,a=this,o=this.options,s=e.Deferred(),l=e.extend({},o.customData,{mimes:o.onlyMimes},t.data||t),d=l.cmd,c=!(t.preventDefault||t.preventFail),u=!(t.preventDefault||t.preventDone),p=e.extend({},t.notify),h=!!t.raw,f=t.syncOnFail,t=e.extend({url:o.url,async:!0,type:this.requestType,dataType:"json",cache:!1,data:l,headers:this.customHeaders,xhrFields:this.xhrFields},t.options||{}),m=function(t){t.warning&&a.error(t.warning),"open"==d&&M(e.extend(!0,{},t)),t.removed&&t.removed.length&&a.remove(t),t.added&&t.added.length&&a.add(t),t.changed&&t.changed.length&&a.change(t),a.trigger(d,t),t.sync&&a.sync()},g=function(e,t){var n;switch(t){case"abort":n=e.quiet?"":["errConnect","errAbort"];break;case"timeout":n=["errConnect","errTimeout"];break;case"parsererror":n=["errResponse","errDataNotJSON"];break;default:n=403==e.status?["errConnect","errAccess"]:404==e.status?["errConnect","errNotFound"]:"errConnect"}s.reject(n,e,t)},b=function(t){return h?s.resolve(t):t?e.isPlainObject(t)?t.error?s.reject(t.error,i):a.validResponse(d,t)?(t=a.normalize(t),a.api||(a.api=t.api||1,a.newAPI=a.api>=2,a.oldAPI=!a.newAPI),t.options&&(v=e.extend({},v,t.options)),t.netDrivers&&(a.netDrivers=t.netDrivers),"open"==d&&l.init&&(a.uplMaxSize=a.returnBytes(t.uplMaxSize),a.uplMaxFile=t.uplMaxFile?parseInt(t.uplMaxFile):20),s.resolve(t),t.debug&&a.debug("backend-debug",t.debug),void 0):s.reject("errResponse",i):s.reject(["errResponse","errDataNotJSON"],i):s.reject(["errResponse","errDataEmpty"],i)};if(u&&s.done(m),s.fail(function(e){e&&(c?a.error(e):a.debug("error",a.i18n(e)))}),!d)return s.reject("errCmdReq");if(f&&s.fail(function(e){e&&a.sync()}),p.type&&p.cnt&&(n=setTimeout(function(){a.notify(p),s.always(function(){p.cnt=-(parseInt(p.cnt)||0),a.notify(p)})},a.notifyDelay),s.always(function(){clearTimeout(n)})),"open"==d)for(;r=F.pop();)"pending"==r.state()&&(r.quiet=!0,r.abort());return delete t.preventFail,i=this.transport.send(t).fail(g).done(b),"open"==d&&(F.unshift(i),s.always(function(){var t=e.inArray(i,F);-1!==t&&F.splice(t,1)})),s},this.diff=function(t){var n={},i=[],r=[],a=[],o=function(e){for(var t=a.length;t--;)if(a[t].hash==e)return!0};return e.each(t,function(e,t){n[t.hash]=t}),e.each(b,function(e){!n[e]&&r.push(e)}),e.each(n,function(t,n){var r=b[t];r?e.each(n,function(e){return n[e]!=r[e]?(a.push(n),!1):void 0}):i.push(n)}),e.each(r,function(t,i){var s=b[i],l=s.phash;l&&"directory"==s.mime&&-1===e.inArray(l,r)&&n[l]&&!o(l)&&a.push(n[l])}),{added:i,removed:r,changed:a}},this.sync=function(){var t=this,n=e.Deferred().done(function(){t.trigger("sync")}),i={data:{cmd:"open",init:1,target:g,tree:this.ui.tree?1:0},preventDefault:!0},r={data:{cmd:"tree",target:g==this.root()?g:this.file(g).phash},preventDefault:!0};return e.when(this.request(i),this.request(r)).fail(function(e){n.reject(e),e&&t.request({data:{cmd:"open",target:t.lastDir(""),tree:1,init:1},notify:{type:"open",cnt:1,hideCnt:!0},preventDefault:!0})}).done(function(e,i){var r=t.diff(e.files.concat(i&&i.tree?i.tree:[]));return r.added.push(e.cwd),r.removed.length&&t.remove(r),r.added.length&&t.add(r),r.changed.length&&t.change(r),n.resolve(r)}),n},this.upload=function(e){return this.transport.upload(e,this)},this.bind=function(e,t){var n;if("function"==typeof t)for(e=(""+e).toLowerCase().split(/\s+/),n=0;n
-1&&n.splice(i,1),t=null,this},this.trigger=function(t,n){var i,t=t.toLowerCase(),r=w[t]||[];if(this.debug("event-"+t,n),r.length)for(t=e.Event(t),i=0;i0?r:r.charCodeAt(0):e.ui.keyCode[r],r&&!x[i]&&(x[i]={keyCode:r,altKey:-1!=e.inArray("ALT",o),ctrlKey:-1!=e.inArray("CTRL",o),shiftKey:-1!=e.inArray("SHIFT",o),type:t.type||"keydown",callback:t.callback,description:t.description,pattern:i});return this},this.shortcuts=function(){var t=[];return e.each(x,function(e,n){t.push([n.pattern,o.i18n(n.description)])}),t},this.clipboard=function(t,n){var i=function(){return e.map(k,function(e){return e.hash})};return void 0!==t&&(k.length&&this.trigger("unlockfiles",{files:i()}),C=[],k=e.map(t||[],function(e){var t=b[e];return t?(C.push(e),{hash:e,phash:t.phash,name:t.name,mime:t.mime,read:t.read,locked:t.locked,cut:!!n}):null}),this.trigger("changeclipboard",{clipboard:k.slice(0,k.length)}),n&&this.trigger("lockfiles",{files:i()})),k.slice(0,k.length)},this.isCommandEnabled=function(t){return this._commands[t]?-1===e.inArray(t,v.disabled):!1},this.exec=function(t,n,i){return this._commands[t]&&this.isCommandEnabled(t)?this._commands[t].exec(n,i):e.Deferred().reject("No such command")},this.dialog=function(n,i){return e("
").append(n).appendTo(t).elfinderdialog(i)},this.getUI=function(e){return this.ui[e]||t},this.command=function(e){return void 0===e?this._commands:this._commands[e]},this.resize=function(e,n){t.css("width",e).height(n).trigger("resize"),this.trigger("resize",{width:t.width(),height:t.height()})},this.restoreSize=function(){this.resize(z,I)},this.show=function(){t.show(),this.enable().trigger("show")},this.hide=function(){this.disable().trigger("hide"),t.hide()},this.destroy=function(){t&&t[0].elfinder&&(this.trigger("destroy").disable(),w={},x={},e(document).add(t).unbind("."+this.namespace),o.trigger=function(){},t.children().remove(),t.append(s.contents()).removeClass(this.cssClass).attr("style",l),t[0].elfinder=null,i&&clearInterval(i))},e.fn.selectable&&e.fn.draggable&&e.fn.droppable?t.length?this.options.url?(e.extend(e.ui.keyCode,{F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120}),this.dragUpload=!1,this.xhrUpload=("undefined"!=typeof XMLHttpRequestUpload||"undefined"!=typeof XMLHttpRequestEventTarget)&&"undefined"!=typeof File&&"undefined"!=typeof FormData,this.transport={},"object"==typeof this.options.transport&&(this.transport=this.options.transport,"function"==typeof this.transport.init&&this.transport.init(this)),"function"!=typeof this.transport.send&&(this.transport.send=function(t){return e.ajax(t)}),"iframe"==this.transport.upload?this.transport.upload=e.proxy(this.uploads.iframe,this):"function"==typeof this.transport.upload?this.dragUpload=!!this.options.dragUploadAllow:this.xhrUpload&&this.options.dragUploadAllow?(this.transport.upload=e.proxy(this.uploads.xhr,this),this.dragUpload=!0):this.transport.upload=e.proxy(this.uploads.iframe,this),this.error=function(){var e=arguments[0];return 1==arguments.length&&"function"==typeof e?o.bind("error",e):o.trigger("error",{error:e})},e.each(["enable","disable","load","open","reload","select","add","remove","change","dblclick","getfile","lockfiles","unlockfiles","dragstart","dragstop","search","searchend","viewchange"],function(t,n){o[n]=function(){var t=arguments[0];return 1==arguments.length&&"function"==typeof t?o.bind(n,t):o.trigger(n,e.isPlainObject(t)?t:{})}}),this.enable(function(){!f&&o.visible()&&o.ui.overlay.is(":hidden")&&(f=!0,e("texarea:focus,input:focus,button").blur(),t.removeClass("elfinder-disabled"))}).disable(function(){m=f,f=!1,t.addClass("elfinder-disabled")}).open(function(){y=[]}).select(function(t){y=e.map(t.data.selected||t.data.value||[],function(e){return b[e]?e:null})}).error(function(t){var n={cssClass:"elfinder-dialog-error",title:o.i18n(o.i18n("error")),resizable:!1,destroyOnClose:!0,buttons:{}};n.buttons[o.i18n(o.i18n("btnClose"))]=function(){e(this).elfinderdialog("close")},o.dialog(' '+o.i18n(t.data.error),n)}).bind("tree parents",function(e){D(e.data.tree||[])}).bind("tmb",function(t){e.each(t.data.images||[],function(e,t){b[e]&&(b[e].tmb=t)})}).add(function(e){D(e.data.added||[])}).change(function(t){e.each(t.data.changed||[],function(t,n){var i=n.hash;(b[i].width&&!n.width||b[i].height&&!n.height)&&(b[i].width=void 0,b[i].height=void 0),b[i]=b[i]?e.extend(b[i],n):n})}).remove(function(t){for(var n=t.data.removed||[],i=n.length,r=function(t){var n=b[t];n&&("directory"==n.mime&&n.dirs&&e.each(b,function(e,n){n.phash==t&&r(e)}),delete b[t])};i--;)r(n[i])}).bind("search",function(e){D(e.data.files)}).bind("rm",function(){var t=P.canPlayType&&P.canPlayType('audio/wav; codecs="1"');t&&""!=t&&"no"!=t&&e(P).html('')[0].play()}),e.each(this.options.handlers,function(e,t){o.bind(e,t)}),this.history=new this.history(this),"function"==typeof this.options.getFileCallback&&this.commands.getfile&&(this.bind("dblclick",function(e){e.preventDefault(),o.exec("getfile").fail(function(){o.exec("open")})}),this.shortcut({pattern:"enter",description:this.i18n("cmdgetfile"),callback:function(){o.exec("getfile").fail(function(){o.exec("mac"==o.OS?"rename":"open")})}}).shortcut({pattern:"ctrl+enter",description:this.i18n("mac"==this.OS?"cmdrename":"cmdopen"),callback:function(){o.exec("mac"==o.OS?"rename":"open")}})),this._commands={},e.isArray(this.options.commands)||(this.options.commands=[]),e.each(["open","reload","back","forward","up","home","info","quicklook","getfile","help"],function(t,n){-1===e.inArray(n,o.options.commands)&&o.options.commands.push(n)}),e.each(this.options.commands,function(t,n){var i=o.commands[n];e.isFunction(i)&&!o._commands[n]&&(i.prototype=T,o._commands[n]=new i,o._commands[n].setup(n,o.options.commandsOptions[n]||{}))}),t.addClass(this.cssClass).bind(u,function(){!f&&o.enable()}),this.ui={workzone:e("
").appendTo(t).elfinderworkzone(this),navbar:e("
").appendTo(t).elfindernavbar(this,this.options.uiOptions.navbar||{}),contextmenu:e("
").appendTo(t).elfindercontextmenu(this),overlay:e("
").appendTo(t).elfinderoverlay({show:function(){o.disable()},hide:function(){m&&o.enable()}}),cwd:e("
").appendTo(t).elfindercwd(this,this.options.uiOptions.cwd||{}),notify:this.dialog("",{cssClass:"elfinder-dialog-notify",position:{top:"12px",right:"12px"},resizable:!1,autoOpen:!1,title:" ",width:280}),statusbar:e('').hide().appendTo(t)},e.each(this.options.ui||[],function(n,i){var r="elfinder"+i,a=o.options.uiOptions[i]||{};!o.ui[i]&&e.fn[r]&&(o.ui[i]=e("<"+(a.tag||"div")+"/>").appendTo(t)[r](o,a))}),t[0].elfinder=this,this.options.resizable&&!this.UA.Touch&&e.fn.resizable&&t.resizable({handles:"se",minWidth:300,minHeight:200}),this.options.width&&(z=this.options.width),this.options.height&&(I=parseInt(this.options.height)),o.resize(z,I),e(document).bind("click."+this.namespace,function(n){f&&!e(n.target).closest(t).length&&o.disable()}).bind(p+" "+h,A),o.options.useBrowserHistory&&e(window).on("popstate",function(t){var n=t.originalEvent.state&&t.originalEvent.state.thash;n&&!e.isEmptyObject(o.files())&&o.request({data:{cmd:"open",target:n,onhistory:1},notify:{type:"open",cnt:1,hideCnt:!0},syncOnFail:!0})}),this.trigger("init").request({data:{cmd:"open",target:o.startDir(),init:1,tree:this.ui.tree?1:0},preventDone:!0,notify:{type:"open",cnt:1,hideCnt:!0},freeze:!0}).fail(function(){o.trigger("fail").disable().lastDir(""),w={},x={},e(document).add(t).unbind("."+this.namespace),o.trigger=function(){}}).done(function(t){o.load().debug("api",o.api),t=e.extend(!0,{},t),M(t),o.trigger("open",t)}),this.one("load",function(){t.trigger("resize"),o.options.sync>1e3&&(i=setInterval(function(){o.sync()},o.options.sync))}),void 0):alert(this.i18n("errURL")):alert(this.i18n("errNode")):alert(this.i18n("errJqui"))},elFinder.prototype={res:function(e,t){return this.resources[e]&&this.resources[e][t]},i18:{en:{translator:"",language:"English",direction:"ltr",dateFormat:"d.m.Y H:i",fancyDateFormat:"$1 H:i",messages:{}},months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},kinds:{unknown:"Unknown",directory:"Folder",symlink:"Alias","symlink-broken":"AliasBroken","application/x-empty":"TextPlain","application/postscript":"Postscript","application/vnd.ms-office":"MsOffice","application/vnd.ms-word":"MsWord","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"MsWord","application/vnd.ms-word.document.macroEnabled.12":"MsWord","application/vnd.openxmlformats-officedocument.wordprocessingml.template":"MsWord","application/vnd.ms-word.template.macroEnabled.12":"MsWord","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"MsWord","application/vnd.ms-excel":"MsExcel","application/vnd.ms-excel.sheet.macroEnabled.12":"MsExcel","application/vnd.openxmlformats-officedocument.spreadsheetml.template":"MsExcel","application/vnd.ms-excel.template.macroEnabled.12":"MsExcel","application/vnd.ms-excel.sheet.binary.macroEnabled.12":"MsExcel","application/vnd.ms-excel.addin.macroEnabled.12":"MsExcel","application/vnd.ms-powerpoint":"MsPP","application/vnd.openxmlformats-officedocument.presentationml.presentation":"MsPP","application/vnd.ms-powerpoint.presentation.macroEnabled.12":"MsPP","application/vnd.openxmlformats-officedocument.presentationml.slideshow":"MsPP","application/vnd.ms-powerpoint.slideshow.macroEnabled.12":"MsPP","application/vnd.openxmlformats-officedocument.presentationml.template":"MsPP","application/vnd.ms-powerpoint.template.macroEnabled.12":"MsPP","application/vnd.ms-powerpoint.addin.macroEnabled.12":"MsPP","application/vnd.openxmlformats-officedocument.presentationml.slide":"MsPP","application/vnd.ms-powerpoint.slide.macroEnabled.12":"MsPP","application/pdf":"PDF","application/xml":"XML","application/vnd.oasis.opendocument.text":"OO","application/vnd.oasis.opendocument.text-template":"OO","application/vnd.oasis.opendocument.text-web":"OO","application/vnd.oasis.opendocument.text-master":"OO","application/vnd.oasis.opendocument.graphics":"OO","application/vnd.oasis.opendocument.graphics-template":"OO","application/vnd.oasis.opendocument.presentation":"OO","application/vnd.oasis.opendocument.presentation-template":"OO","application/vnd.oasis.opendocument.spreadsheet":"OO","application/vnd.oasis.opendocument.spreadsheet-template":"OO","application/vnd.oasis.opendocument.chart":"OO","application/vnd.oasis.opendocument.formula":"OO","application/vnd.oasis.opendocument.database":"OO","application/vnd.oasis.opendocument.image":"OO","application/vnd.openofficeorg.extension":"OO","application/x-shockwave-flash":"AppFlash","application/flash-video":"Flash video","application/x-bittorrent":"Torrent","application/javascript":"JS","application/rtf":"RTF","application/rtfd":"RTF","application/x-font-ttf":"TTF","application/x-font-otf":"OTF","application/x-rpm":"RPM","application/x-web-config":"TextPlain","application/xhtml+xml":"HTML","application/docbook+xml":"DOCBOOK","application/x-awk":"AWK","application/x-gzip":"GZIP","application/x-bzip2":"BZIP","application/zip":"ZIP","application/x-zip":"ZIP","application/x-rar":"RAR","application/x-tar":"TAR","application/x-7z-compressed":"7z","application/x-jar":"JAR","text/plain":"TextPlain","text/x-php":"PHP","text/html":"HTML","text/javascript":"JS","text/css":"CSS","text/rtf":"RTF","text/rtfd":"RTF","text/x-c":"C","text/x-csrc":"C","text/x-chdr":"CHeader","text/x-c++":"CPP","text/x-c++src":"CPP","text/x-c++hdr":"CPPHeader","text/x-shellscript":"Shell","application/x-csh":"Shell","text/x-python":"Python","text/x-java":"Java","text/x-java-source":"Java","text/x-ruby":"Ruby","text/x-perl":"Perl","text/x-sql":"SQL","text/xml":"XML","text/x-comma-separated-values":"CSV","image/x-ms-bmp":"BMP","image/jpeg":"JPEG","image/gif":"GIF","image/png":"PNG","image/tiff":"TIFF","image/x-targa":"TGA","image/vnd.adobe.photoshop":"PSD","image/xbm":"XBITMAP","image/pxm":"PXM","audio/mpeg":"AudioMPEG","audio/midi":"AudioMIDI","audio/ogg":"AudioOGG","audio/mp4":"AudioMPEG4","audio/x-m4a":"AudioMPEG4","audio/wav":"AudioWAV","audio/x-mp3-playlist":"AudioPlaylist","video/x-dv":"VideoDV","video/mp4":"VideoMPEG4","video/mpeg":"VideoMPEG","video/x-msvideo":"VideoAVI","video/quicktime":"VideoMOV","video/x-ms-wmv":"VideoWM","video/x-flv":"VideoFlash","video/x-matroska":"VideoMKV","video/ogg":"VideoOGG"},rules:{defaults:function(t){return!t||t.added&&!e.isArray(t.added)||t.removed&&!e.isArray(t.removed)||t.changed&&!e.isArray(t.changed)?!1:!0},open:function(t){return t&&t.cwd&&t.files&&e.isPlainObject(t.cwd)&&e.isArray(t.files)},tree:function(t){return t&&t.tree&&e.isArray(t.tree)},parents:function(t){return t&&t.tree&&e.isArray(t.tree)},tmb:function(t){return t&&t.images&&(e.isPlainObject(t.images)||e.isArray(t.images))},upload:function(t){return t&&(e.isPlainObject(t.added)||e.isArray(t.added))},search:function(t){return t&&t.files&&e.isArray(t.files)}},commands:{},parseUploadData:function(t){var n;if(!e.trim(t))return{error:["errResponse","errDataEmpty"]};try{n=e.parseJSON(t)}catch(i){return{error:["errResponse","errDataNotJSON"]}}return this.validResponse("upload",n)?(n=this.normalize(n),n.removed=e.merge(n.removed||[],e.map(n.added||[],function(e){return e.hash})),n):{error:["errResponse"]}},iframeCnt:0,uploads:{checkFile:function(t,n){if(t.checked||"files"==t.type)return t.files;if("data"==t.type){var i=e.Deferred(),r=[],a=[],o=[],s=[],l=0,d=function(t){var i=function(e){return Array.prototype.slice.call(e||[])},c=function(t){var n=e.Deferred();return"undefined"==typeof t?n.reject("empty"):t.isFile?t.file(function(e){n.resolve(e)},function(){n.reject()}):n.reject("dirctory"),n.promise()};t.readEntries(function(e){if(e.length)s=s.concat(i(e)),d(t);else{var u=s.length-1,p=function(e){c(s[e]).done(function(t){"win"==n.OS&&t.name.match(/^(?:desktop\.ini|thumbs\.db)$/i)||"mac"==n.OS&&t.name.match(/^\.ds_store$/i)||(a.push(s[e].fullPath),r.push(t))}).fail(function(t){"dirctory"==t&&o.push(s[e])}).always(function(){l--,u>e&&(l++,p(++e))})};l++,p(0),l--}})},c=function(e,n){var i,c;s=[];for(var u=e.length,p=0;u>p;p++)c=n?e[p]:e[p].getAsEntry?e[p].getAsEntry():e[p].webkitGetAsEntry(),c&&(c.isFile?(a.push(""),r.push(t.files.items[p].getAsFile())):c.isDirectory&&(l>0?o.push(c):(l=0,i=c.createReader(),l++,d(i))))};return c(t.files.items),setTimeout(function v(){l>0?setTimeout(v,10):o.length>0?(c([o.shift()],!0),setTimeout(v,10)):i.resolve([r,a])},10),i.promise()}var u=[],p=t.files[0];if("html"==t.type){var h=e(" ").append(e.parseHTML(p));e("img[src]",h).each(function(){var t=e(this).attr("src");t&&-1==e.inArray(t,u)&&u.push(t)}),e("a[href]",h).each(function(){var t,n=function(e){var t=document.createElement("a");return t.href=e,t};e(this).text()&&(t=n(e(this).attr("href")),t.href&&!t.pathname.match(/(?:\.html?|\/[^\/.]*)$/i)&&-1==e.inArray(t.href,u)&&u.push(t.href))})}else{var f,m,g;for(f=/(http[^<>"{}|\\^\[\]`\s]+)/gi;m=f.exec(p);)g=m[1].replace(/&/g,"&"),-1==e.inArray(g,u)&&u.push(g)}return u},iframe:function(t,n){var i,r,a,o,s=n?n:this,l=t.input?t.input:!1,d=l?!1:s.uploads.checkFile(t,s),c=e.Deferred().fail(function(e){e&&s.error(e)}).done(function(e){e.warning&&s.error(e.warning),e.removed&&s.remove(e),e.added&&s.add(e),e.changed&&s.change(e),s.trigger("upload",e),e.sync&&s.sync()}),u="iframe-"+s.namespace+ ++s.iframeCnt,p=e(''),h=this.UA.IE,f=function(){o&&clearTimeout(o),a&&clearTimeout(a),r&&s.notify({type:"upload",cnt:-i}),setTimeout(function(){h&&e('').appendTo(p),p.remove(),m.remove()},100)},m=e('').bind("load",function(){m.unbind("load").bind("load",function(){var e=s.parseUploadData(m.contents().text());f(),e.error?c.reject(e.error):c.resolve(e)}),a=setTimeout(function(){r=!0,s.notify({type:"upload",cnt:i})},s.options.notifyDelay),s.options.iframeTimeout>0&&(o=setTimeout(function(){f(),c.reject([errors.connect,errors.timeout])},s.options.iframeTimeout)),p.submit()});if(d&&d.length)e.each(d,function(e,t){p.append(' ')}),i=1;else{if(!(l&&e(l).is(":file")&&e(l).val()))return c.reject();p.append(l),i=l.files?l.files.length:1}return p.append(' ').append(' ').append(e(l).attr("name","upload[]")),e.each(s.options.onlyMimes||[],function(e,t){p.append(' ')}),e.each(s.options.customData,function(e,t){p.append(' ')}),p.appendTo("body"),m.appendTo("body"),c},xhr:function(t,n){var i,r=n?n:this,a=new XMLHttpRequest,o=null,s=null,l=t.checked,d=t.isDataType||"data"==t.type,c=0,u=e.Deferred().fail(function(e){e&&r.error(e)}).done(function(e){a=null,h=null,e.warning&&r.error(e.warning),e.removed&&r.remove(e),e.added&&r.add(e),e.changed&&r.change(e),r.trigger("upload",e),e.sync&&r.sync()}).always(function(){o&&clearTimeout(o),l&&!t.multiupload&&b()&&r.notify({type:"upload",cnt:-f,progress:0,size:0}),s&&clearTimeout(s),x&&r.ui.notify.children(".elfinder-notify-chunkmerge").length&&r.notify({type:"chunkmerge",cnt:-1})}),p=new FormData,h=t.input?t.input.files:r.uploads.checkFile(t,r),f=t.checked?d?h[0].length:h.length:h.length,m=0,g=0,v=!1,b=function(){return v=v||r.ui.notify.children(".elfinder-notify-upload").length},y=function(e){return e||(e=g),setTimeout(function(){v=!0,r.notify({type:"upload",cnt:f,progress:m-i,size:e}),i=m},r.options.notifyDelay)},w=t.target||r.cwd().hash,x=!1;if(!x&&(i=m),!d&&!f)return u.reject(["errUploadNoFiles"]);a.addEventListener("error",function(){u.reject("errConnect")},!1),a.addEventListener("abort",function(){u.reject(["errConnect","errAbort"])},!1),a.addEventListener("load",function(){var e,n=a.status,o=0,l="";if(200!=n?l=n>500?"errResponse":"errConnect":(4!=a.readyState&&(l=["errConnect","errTimeout"]),a.responseText||(l=["errResponse","errDataEmpty"])),l){if(x||c++>3){var f=d?h[0][0]:h[0];return f._cid?(p=new FormData,h=[{_chunkfail:!0}],p.append("chunk",f._chunk),p.append("cid",f._cid),d=!1,k(h),void 0):u.reject(l)}return g=0,a.open("POST",r.uploadURL,!0),a.send(p),void 0}if(m=g,b()&&(o=m-i)&&r.notify({type:"upload",cnt:0,progress:o,size:0}),e=r.parseUploadData(a.responseText),e._chunkmerged){p=new FormData;var v=[{_chunkmerged:e._chunkmerged,_name:e._name}];return x=!0,s=setTimeout(function(){r.notify({type:"chunkmerge",cnt:1})},r.options.notifyDelay),d?k(v,h[1]):k(v),void 0}e._multiupload=t.multiupload?!0:!1,e.error?u.reject(e.error):u.resolve(e)},!1),a.upload.addEventListener("loadstart",function(e){!x&&e.lengthComputable&&(m=e.loaded,c&&(m=0),g=e.total,m||(m=parseInt(.05*g)),b()&&(r.notify({type:"upload",cnt:0,progress:m-i,size:t.multiupload?0:g}),i=m))},!1),a.upload.addEventListener("progress",function(e){var n;e.lengthComputable&&!x&&(m=e.loaded,!t.checked&&m>0&&!o&&(o=y()),g||(c&&(m=0),g=e.total,m||(m=parseInt(.05*g))),n=m-i,b()&&n/e.total>=.05&&(r.notify({type:"upload",cnt:0,progress:n,size:0}),i=m))},!1);var k=function(i,s){var c,h=0,m=1,g=[],v=0,x=f,k=0,C=[],F=+new Date,T=n.uplMaxSize-8190;if(!l&&(d||"files"==t.type)){c=n.option("uploadMaxSize")?n.option("uploadMaxSize"):0;for(var z=0;z=c)r.error(r.i18n("errUploadFile",i[z].name)+" "+r.i18n("errUploadFileSize")),f--,x--;
+else if(n.uplMaxSize&&i[z].size>=n.uplMaxSize){var I=i[z].size,P=0,M=T,D=-1,A=i[z],x=Math.floor(I/T);for(k+=I,C[F]=0;I>P;){var O;if("slice"in A)O=A.slice(P,M);else if("mozSlice"in A)O=A.mozSlice(P,M);else{if(!("webkitSlice"in A)){O=null;break}O=A.webkitSlice(P,M)}O._chunk=A.name+"."+ ++D+"_"+x+".part",O._cid=F,C[F]++,h&&v++,"undefined"==typeof g[v]&&(g[v]=[],d&&(g[v][0]=[],g[v][1]=[])),h=n.uplMaxSize,m=1,d?(g[v][0].push(O),g[v][1].push(s[z])):g[v].push(O),P=M,M=P+T}null==O?(r.error(r.i18n("errUploadFile",i[z].name)+" "+r.i18n("errUploadFileSize")),f--,x--):x+=D}else(n.uplMaxSize&&h+i[z].size>=n.uplMaxSize||m>n.uplMaxFile)&&(h=0,m=1,v++),"undefined"==typeof g[v]&&(g[v]=[],d&&(g[v][0]=[],g[v][1]=[])),d?(g[v][0].push(i[z]),g[v][1].push(s[z])):g[v].push(i[z]),h+=i[z].size,k+=i[z].size,m++;if(0==g.length)return t.checked=!0,!1;if(g.length>1){o=y(k);var S=[],E=0,U=g.length,j=[],R=function(i,a){for(var s=[];i.length&&s.length "),escape:function(e){return this._node.text(e).html()},normalize:function(t){var n=function(e){return e&&e.hash&&e.name&&e.mime?("application/x-empty"==e.mime&&(e.mime="text/plain"),e):null};return t.files&&(t.files=e.map(t.files,n)),t.tree&&(t.tree=e.map(t.tree,n)),t.added&&(t.added=e.map(t.added,n)),t.changed&&(t.changed=e.map(t.changed,n)),t.api&&(t.init=!0),t},setSort:function(e,t,n){this.storage("sortType",this.sortType=this.sortRules[e]?e:"name"),this.storage("sortOrder",this.sortOrder=/asc|desc/.test(t)?t:"asc"),this.storage("sortStickFolders",(this.sortStickFolders=!!n)?1:""),this.trigger("sortchange")},_sortRules:{name:function(e,t){return e.name.toLowerCase().localeCompare(t.name.toLowerCase())},size:function(e,t){var n=parseInt(e.size)||0,i=parseInt(t.size)||0;return n==i?0:n>i?1:-1},kind:function(e,t){return e.mime.localeCompare(t.mime)},date:function(e,t){var n=e.ts||e.date,i=t.ts||t.date;return n==i?0:n>i?1:-1}},compare:function(e,t){var n,i=this,r=i.sortType,a="asc"==i.sortOrder,o=i.sortStickFolders,s=i.sortRules,l=s[r],d="directory"==e.mime,c="directory"==t.mime;if(o){if(d&&!c)return-1;if(!d&&c)return 1}return n=a?l(e,t):l(t,e),"name"!=r&&0==n?n=a?s.name(e,t):s.name(t,e):n},sortFiles:function(e){return e.sort(this.compare)},notify:function(t){var n,i,r,a=t.type,o=this.messages["ntf"+a]?this.i18n("ntf"+a):this.i18n("ntfsmth"),s=this.ui.notify,l=s.children(".elfinder-notify-"+a),d='',c=t.cnt,u="undefined"!=typeof t.size?parseInt(t.size):null,p="undefined"!=typeof t.progress&&t.progress>=0?t.progress:null;return a?(l.length||(l=e(d.replace(/\{type\}/g,a).replace(/\{msg\}/g,o)).appendTo(s).data("cnt",0),null!=p&&l.data({progress:0,total:0})),n=c+parseInt(l.data("cnt")),n>0?(!t.hideCnt&&l.children(".elfinder-notify-cnt").text("("+n+")"),s.is(":hidden")&&s.elfinderdialog("open"),l.data("cnt",n),null!=p&&(i=l.data("total"))>=0&&(r=l.data("progress"))>=0&&(i+=null!=u?u:c,r+=p,null==u&&0>c&&(r+=100*c),l.data({progress:r,total:i}),null!=u&&(r*=100,i=Math.max(1,i)),p=parseInt(r/i),l.find(".elfinder-notify-progress").animate({width:(100>p?p:100)+"%"},20))):(l.remove(),!s.children().length&&s.elfinderdialog("close")),this):this},confirm:function(t){var n,i=!1,r={cssClass:"elfinder-dialog-confirm",modal:!0,resizable:!1,title:this.i18n(t.title||"confirmReq"),buttons:{},close:function(){!i&&t.cancel.callback(),e(this).elfinderdialog("destroy")}},a=this.i18n("apllyAll");return t.reject&&(r.buttons[this.i18n(t.reject.label)]=function(){t.reject.callback(!(!n||!n.prop("checked"))),i=!0,e(this).elfinderdialog("close")}),r.buttons[this.i18n(t.accept.label)]=function(){t.accept.callback(!(!n||!n.prop("checked"))),i=!0,e(this).elfinderdialog("close")},r.buttons[this.i18n(t.cancel.label)]=function(){e(this).elfinderdialog("close")},t.all&&(t.reject&&(r.width=370),r.create=function(){n=e(' '),e(this).next().children().before(e(""+a+" ").prepend(n))},r.open=function(){var t=e(this).next(),n=parseInt(t.children(":first").outerWidth()+t.children(":last").outerWidth());n>parseInt(t.width())&&e(this).closest(".elfinder-dialog").width(n+30)}),this.dialog(' '+this.i18n(t.text),r)},uniqueName:function(e,t){var n,i,r=0,a="";if(e=this.i18n(e),t=t||this.cwd().hash,-1!=(n=e.indexOf(".txt"))&&(a=".txt",e=e.substr(0,n)),i=e+a,!this.fileByName(i,t))return i;for(;1e4>r;)if(i=e+" "+ ++r+a,!this.fileByName(i,t))return i;return e+Math.random()+a},i18n:function(){var t,n,i,r=this,a=this.messages,o=[],s=[],l=function(e){var t;return 0===e.indexOf("#")&&(t=r.file(e.substr(1)))?t.name:e};for(t=0;t0&&o[n]&&s.push(n),o[n]||""}),o[t]=i);return e.map(o,function(t,n){return-1===e.inArray(n,s)?t:null}).join(" ")},mime2class:function(e){var t="elfinder-cwd-icon-";return e=e.split("/"),t+e[0]+("image"!=e[0]&&e[1]?" "+t+e[1].replace(/(\.|\+)/g,"-"):"")},mime2kind:function(e){var t,n="object"==typeof e?e.mime:e;return t=e.alias?"Alias":this.kinds[n]?this.kinds[n]:0===n.indexOf("text")?"Text":0===n.indexOf("image")?"Image":0===n.indexOf("audio")?"Audio":0===n.indexOf("video")?"Video":0===n.indexOf("application")?"App":n,this.messages["kind"+t]?this.i18n("kind"+t):n;var n,t},formatDate:function(e,t){var n,i,r,a,o,s,l,d,c,u,p,h=this,t=t||e.ts,f=h.i18;return h.options.clientFormatDate&&t>0?(n=new Date(1e3*t),d=n[h.getHours](),c=d>12?d-12:d,u=n[h.getMinutes](),p=n[h.getSeconds](),a=n[h.getDate](),o=n[h.getDay](),s=n[h.getMonth]()+1,l=n[h.getFullYear](),i=t>=this.yesterday?this.fancyFormat:this.dateFormat,r=i.replace(/[a-z]/gi,function(e){switch(e){case"d":return a>9?a:"0"+a;case"j":return a;case"D":return h.i18n(f.daysShort[o]);case"l":return h.i18n(f.days[o]);case"m":return s>9?s:"0"+s;case"n":return s;case"M":return h.i18n(f.monthsShort[s-1]);case"F":return h.i18n(f.months[s-1]);case"Y":return l;case"y":return(""+l).substr(2);case"H":return d>9?d:"0"+d;case"G":return d;case"g":return c;case"h":return c>9?c:"0"+c;case"a":return d>12?"pm":"am";case"A":return d>12?"PM":"AM";case"i":return u>9?u:"0"+u;case"s":return p>9?p:"0"+p}return e}),t>=this.yesterday?r.replace("$1",this.i18n(t>=this.today?"Today":"Yesterday")):r):e.date?e.date.replace(/([a-z]+)\s/i,function(e,t){return h.i18n(t)+" "}):h.i18n("dateUnknown")},perms2class:function(e){var t="";return e.read||e.write?e.read?e.write||(t="elfinder-ro"):t="elfinder-wo":t="elfinder-na",t},formatPermissions:function(e){var t=[];return e.read&&t.push(this.i18n("read")),e.write&&t.push(this.i18n("write")),t.length?t.join(" "+this.i18n("and")+" "):this.i18n("noaccess")},formatSize:function(e){var t=1,n="b";return"unknown"==e?this.i18n("unknown"):(e>1073741824?(t=1073741824,n="GB"):e>1048576?(t=1048576,n="MB"):e>1024&&(t=1024,n="KB"),e/=t,(e>0?t>=1048576?e.toFixed(2):Math.round(e):0)+" "+n)},navHash2Id:function(e){return"nav-"+e},navId2Hash:function(e){return"string"==typeof e?e.substr(4):!1},log:function(e){return window.console&&window.console.log&&window.console.log(e),this},debug:function(t,n){var i=this.options.debug;return("all"==i||i===!0||e.isArray(i)&&-1!=e.inArray(t,i))&&window.console&&window.console.log&&window.console.log("elfinder debug: ["+t+"] ["+this.id+"]",n),this},time:function(e){window.console&&window.console.time&&window.console.time(e)},timeEnd:function(e){window.console&&window.console.timeEnd&&window.console.timeEnd(e)}},elFinder.prototype.version="2.1 (Nightly: 595cc96)",e.fn.elfinder=function(e){return"instance"==e?this.getElFinder():this.each(function(){var t="string"==typeof e?e:"";switch(this.elfinder||new elFinder(this,"object"==typeof e?e:{}),t){case"close":case"hide":this.elfinder.hide();break;case"open":case"show":this.elfinder.show();break;case"destroy":this.elfinder.destroy()}})},e.fn.getElFinder=function(){var e;return this.each(function(){return this.elfinder?(e=this.elfinder,!1):void 0}),e},elFinder.prototype._options={url:"",requestType:"get",transport:{},urlUpload:"",dragUploadAllow:"auto",iframeTimeout:0,customData:{},handlers:{},customHeaders:{},xhrFields:{},lang:"en",cssClass:"",commands:["open","reload","home","up","back","forward","getfile","quicklook","download","rm","duplicate","rename","mkdir","mkfile","upload","copy","cut","paste","edit","extract","archive","search","info","view","help","resize","sort","netmount","netunmount"],commandsOptions:{getfile:{onlyURL:!1,multiple:!1,folders:!1,oncomplete:""},upload:{ui:"uploadbutton"},quicklook:{autoplay:!0,jplayer:"extensions/jplayer"},edit:{mimes:[],editors:[]},info:{nullUrlDirLinkSelf:!0},netmount:{ftp:{inputs:{host:e(' '),port:e(' '),path:e(' '),user:e(' '),pass:e(' ')}},dropbox:{inputs:{host:e(' '),path:e(' '),user:e(' '),pass:e(' ')},select:function(e){var t=this;t.inputs.host.find("span").length&&e.request({data:{cmd:"netmount",protocol:"dropbox",host:"dropbox.com",user:"init",pass:"init",options:{url:e.uploadURL,id:e.id}},preventDefault:!0}).done(function(n){t.inputs.host.find("span").removeClass("elfinder-info-spinner"),t.inputs.host.find("span").html(n.body.replace(/\{msg:([^}]+)\}/g,function(t,n){return e.i18n(n,"Dropbox.com")}))}).fail(function(){})},done:function(t,n){var i=this;"makebtn"==n.mode?(i.inputs.host.find("span").removeClass("elfinder-info-spinner"),i.inputs.host.find("input").hover(function(){e(this).toggleClass("ui-state-hover")}),i.inputs.host[1].value=""):(i.inputs.host.find("span").removeClass("elfinder-info-spinner"),i.inputs.host.find("span").html("Dropbox.com"),i.inputs.host[1].value="dropbox",i.inputs.user.val("done"),i.inputs.pass.val("done"))}}},help:{view:["about","shortcuts","help"]}},getFileCallback:null,defaultView:"icons",ui:["toolbar","tree","path","stat"],uiOptions:{toolbar:[["back","forward"],["netmount"],["mkdir","mkfile","upload"],["open","download","getfile"],["info"],["quicklook"],["copy","cut","paste"],["rm"],["duplicate","rename","edit","resize"],["extract","archive"],["search"],["view","sort"],["help"]],tree:{openRootOnLoad:!0,syncTree:!0},navbar:{minWidth:150,maxWidth:500},cwd:{oldSchool:!1}},onlyMimes:[],sortRules:{},sortType:"name",sortOrder:"asc",sortStickFolders:!0,clientFormatDate:!0,UTCDate:!1,dateFormat:"",fancyDateFormat:"",width:"auto",height:400,resizable:!0,notifyDelay:500,allowShortcuts:!0,rememberLastDir:!0,useBrowserHistory:!0,showFiles:30,showThreshold:50,validName:!1,sync:0,loadTmbs:5,cookie:{expires:30,domain:"",path:"/",secure:!1},contextmenu:{navbar:["open","|","copy","cut","paste","duplicate","|","rm","|","info","netunmount"],cwd:["reload","back","|","upload","mkdir","mkfile","paste","|","sort","|","info"],files:["getfile","|","open","quicklook","|","download","|","copy","cut","paste","duplicate","|","rm","|","edit","rename","resize","|","archive","extract","|","info"]},debug:["error","warning","event-destroy"]},elFinder.prototype.history=function(t){var n,i=this,r=!0,a=[],o=function(){a=[t.cwd().hash],n=0,r=!0},s=t.options.useBrowserHistory&&window.history&&window.history.pushState?window.history:null,l=function(s){return s&&i.canForward()||!s&&i.canBack()?(r=!1,t.exec("open",a[s?++n:--n]).fail(o)):e.Deferred().reject()};this.canBack=function(){return n>0},this.canForward=function(){return n=0&&e>n+1&&a.splice(n+1),a[a.length-1]!=i&&a.push(i),n=a.length-1),r=!0,s&&(s.state?s.state.thash!=i&&s.pushState({thash:i},null,location.pathname+location.search+"#elf_"+i):s.replaceState({thash:i},null,location.pathname+location.search+"#elf_"+i))}).reload(o)},elFinder.prototype.command=function(t){this.fm=t,this.name="",this.title="",this.state=-1,this.alwaysEnabled=!1,this._disabled=!1,this.disableOnSearch=!1,this.updateOnSelect=!0,this._handlers={enable:function(){this.update(void 0,this.value)},disable:function(){this.update(-1,this.value)},"open reload load":function(){this._disabled=!(this.alwaysEnabled||this.fm.isCommandEnabled(this.name)),this.update(void 0,this.value),this.change()}},this.handlers={},this.shortcuts=[],this.options={ui:"button"},this.setup=function(t,n){var i,r,a=this,o=this.fm;for(this.name=t,this.title=o.messages["cmd"+t]?o.i18n("cmd"+t):t,this.options=e.extend({},this.options,n),this.listeners=[],this.updateOnSelect&&(this._handlers.select=function(){this.update(void 0,this.value)}),e.each(e.extend({},a._handlers,a.handlers),function(t,n){o.bind(t,e.proxy(n,a))}),i=0;i-1},this.active=function(){return this.state>0},this.getstate=function(){return-1},this.update=function(e,t){var n=this.state,i=this.value;this.state=this._disabled?-1:void 0!==e?e:this.getstate(),this.value=t,(n!=this.state||i!=this.value)&&this.change()},this.change=function(e){var t,n;if("function"==typeof e)this.listeners.push(e);else for(n=0;n ',lock:' ',symlink:' ',navicon:' ',navspinner:' ',navdir:' {symlink}{permissions}{name}
'},mimes:{text:["application/x-empty","application/javascript","application/xhtml+xml","audio/x-mp3-playlist","application/x-web-config","application/docbook+xml","application/x-php","application/x-perl","application/x-awk","application/x-config","application/x-csh","application/xml"]},mixin:{make:function(){var t=this.fm,n=this.name,i=t.getUI("cwd"),r=e.Deferred().fail(function(e){i.trigger("unselectall"),e&&t.error(e)}).always(function(){c.remove(),d.remove(),t.enable()}),a="tmp_"+parseInt(1e5*Math.random()),o=t.cwd().hash,s=new Date,l={hash:a,name:t.uniqueName(this.prefix),mime:this.mime,read:!0,write:!0,date:"Today "+s.getHours()+":"+s.getMinutes()},d=i.trigger("create."+t.namespace,l).find("#"+a),c=e(' ').keydown(function(t){t.stopImmediatePropagation(),t.keyCode==e.ui.keyCode.ESCAPE?r.reject():t.keyCode==e.ui.keyCode.ENTER&&c.blur()}).mousedown(function(e){e.stopPropagation()}).blur(function(){var i=e.trim(c.val()),s=c.parent();if(s.length){if(!i)return r.reject("errInvName");if(t.fileByName(i,o))return r.reject(["errExists",i]);s.html(t.escape(i)),t.lockfiles({files:[a]}),t.request({data:{cmd:n,name:i,target:o},notify:{type:n,cnt:1},preventFail:!0,syncOnFail:!0}).fail(function(e){r.reject(e)}).done(function(e){r.resolve(e)})}});return this.disabled()||!d.length?r.reject():(t.disable(),d.find(".elfinder-cwd-filename").empty("").append(c.val(l.name)),c.select().focus(),c[0].setSelectionRange&&c[0].setSelectionRange(0,l.name.replace(/\..+$/,"").length),r)}}},e.fn.dialogelfinder=function(t){var n="elfinderPosition",i="elfinderDestroyOnClose";if(this.not(".elfinder").each(function(){var r=(e(document),e('")),a=(e(' ').appendTo(r).click(function(e){e.preventDefault(),a.dialogelfinder("close")}),e(this).addClass("dialogelfinder").css("position","absolute").hide().appendTo("body").draggable({handle:".dialogelfinder-drag",containment:"window"}).elfinder(t).prepend(r));a.elfinder("instance"),a.width(parseInt(a.width())||840).data(i,!!t.destroyOnClose).find(".elfinder-toolbar").removeClass("ui-corner-top"),t.position&&a.data(n,t.position),t.autoOpen!==!1&&e(this).dialogelfinder("open")}),"open"==t){var r=e(this),a=r.data(n)||{top:parseInt(e(document).scrollTop()+(e(window).height()o&&(o=t+1)}),r.zIndex(o).css(a).show().trigger("resize"),setTimeout(function(){r.trigger("resize").mousedown()},200))}else if("close"==t){var r=e(this);r.is(":visible")&&(r.data(i)?r.elfinder("destroy").remove():r.elfinder("close"))}else if("instance"==t)return e(this).getElFinder();return this},elFinder&&elFinder.prototype&&"object"==typeof elFinder.prototype.i18&&(elFinder.prototype.i18.en={translator:"Troex Nevelin <troex@fury.scancode.ru>",language:"English",direction:"ltr",dateFormat:"M d, Y h:i A",fancyDateFormat:"$1 h:i A",messages:{error:"Error",errUnknown:"Unknown error.",errUnknownCmd:"Unknown command.",errJqui:"Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.",errNode:"elFinder requires DOM Element to be created.",errURL:"Invalid elFinder configuration! URL option is not set.",errAccess:"Access denied.",errConnect:"Unable to connect to backend.",errAbort:"Connection aborted.",errTimeout:"Connection timeout.",errNotFound:"Backend not found.",errResponse:"Invalid backend response.",errConf:"Invalid backend configuration.",errJSON:"PHP JSON module not installed.",errNoVolumes:"Readable volumes not available.",errCmdParams:'Invalid parameters for command "$1".',errDataNotJSON:"Data is not JSON.",errDataEmpty:"Data is empty.",errCmdReq:"Backend request requires command name.",errOpen:'Unable to open "$1".',errNotFolder:"Object is not a folder.",errNotFile:"Object is not a file.",errRead:'Unable to read "$1".',errWrite:'Unable to write into "$1".',errPerm:"Permission denied.",errLocked:'"$1" is locked and can not be renamed, moved or removed.',errExists:'File named "$1" already exists.',errInvName:"Invalid file name.",errFolderNotFound:"Folder not found.",errFileNotFound:"File not found.",errTrgFolderNotFound:'Target folder "$1" not found.',errPopup:"Browser prevented opening popup window. To open file enable it in browser options.",errMkdir:'Unable to create folder "$1".',errMkfile:'Unable to create file "$1".',errRename:'Unable to rename "$1".',errCopyFrom:'Copying files from volume "$1" not allowed.',errCopyTo:'Copying files to volume "$1" not allowed.',errUpload:"Upload error.",errUploadFile:'Unable to upload "$1".',errUploadNoFiles:"No files found for upload.",errUploadTotalSize:"Data exceeds the maximum allowed size.",errUploadFileSize:"File exceeds maximum allowed size.",errUploadMime:"File type not allowed.",errUploadTransfer:'"$1" transfer error.',errNotReplace:'Object "$1" already exists at this location and can not be replaced by object with another type.',errReplace:'Unable to replace "$1".',errSave:'Unable to save "$1".',errCopy:'Unable to copy "$1".',errMove:'Unable to move "$1".',errCopyInItself:'Unable to copy "$1" into itself.',errRm:'Unable to remove "$1".',errRmSrc:"Unable remove source file(s).",errExtract:'Unable to extract files from "$1".',errArchive:"Unable to create archive.",errArcType:"Unsupported archive type.",errNoArchive:"File is not archive or has unsupported archive type.",errCmdNoSupport:"Backend does not support this command.",errReplByChild:"The folder “$1” can’t be replaced by an item it contains.",errArcSymlinks:"For security reason denied to unpack archives contains symlinks or files with not allowed names.",errArcMaxSize:"Archive files exceeds maximum allowed size.",errResize:'Unable to resize "$1".',errResizeDegree:"Invalid rotate degree.",errResizeRotate:"Image dose not rotated.",errResizeSize:"Invalid image size.",errResizeNoChange:"Image size not changed.",errUsupportType:"Unsupported file type.",errNotUTF8Content:'File "$1" is not in UTF-8 and cannot be edited.',errNetMount:'Unable to mount "$1".',errNetMountNoDriver:"Unsupported protocol.",errNetMountFailed:"Mount failed.",errNetMountHostReq:"Host required.",errSessionExpires:"Your session has expired due to inactivity.",errCreatingTempDir:'Unable to create temporary directory: "$1"',errFtpDownloadFile:'Unable to download file from FTP: "$1"',errFtpUploadFile:'Unable to upload file to FTP: "$1"',errFtpMkdir:'Unable to create remote directory on FTP: "$1"',errArchiveExec:'Error while archiving files: "$1"',errExtractExec:'Error while extracting files: "$1"',errNetUnMount:"Unable to unmount",errConvUTF8:"Not convertible to UTF-8",cmdarchive:"Create archive",cmdback:"Back",cmdcopy:"Copy",cmdcut:"Cut",cmddownload:"Download",cmdduplicate:"Duplicate",cmdedit:"Edit file",cmdextract:"Extract files from archive",cmdforward:"Forward",cmdgetfile:"Select files",cmdhelp:"About this software",cmdhome:"Home",cmdinfo:"Get info",cmdmkdir:"New folder",cmdmkfile:"New text file",cmdopen:"Open",cmdpaste:"Paste",cmdquicklook:"Preview",cmdreload:"Reload",cmdrename:"Rename",cmdrm:"Delete",cmdsearch:"Find files",cmdup:"Go to parent directory",cmdupload:"Upload files",cmdview:"View",cmdresize:"Resize & Rotate",cmdsort:"Sort",cmdnetmount:"Mount network volume",cmdnetunmount:"Unmount",btnClose:"Close",btnSave:"Save",btnRm:"Remove",btnApply:"Apply",btnCancel:"Cancel",btnNo:"No",btnYes:"Yes",btnMount:"Mount",btnApprove:"Goto $1 & approve",btnUnmount:"Unmount",btnConv:"Convert",ntfopen:"Open folder",ntffile:"Open file",ntfreload:"Reload folder content",ntfmkdir:"Creating directory",ntfmkfile:"Creating files",ntfrm:"Delete files",ntfcopy:"Copy files",ntfmove:"Move files",ntfprepare:"Prepare to copy files",ntfrename:"Rename files",ntfupload:"Uploading files",ntfdownload:"Downloading files",ntfsave:"Save files",ntfarchive:"Creating archive",ntfextract:"Extracting files from archive",ntfsearch:"Searching files",ntfresize:"Resizing images",ntfsmth:"Doing something",ntfloadimg:"Loading image",ntfnetmount:"Mounting network volume",ntfnetunmount:"Unmounting network volume",ntfdim:"Acquiring image dimension",ntfreaddir:"Reading folder infomation",ntfurl:"Getting URL of link",dateUnknown:"unknown",Today:"Today",Yesterday:"Yesterday",Jan:"Jan",Feb:"Feb",Mar:"Mar",Apr:"Apr",May:"May",Jun:"Jun",Jul:"Jul",Aug:"Aug",Sep:"Sep",Oct:"Oct",Nov:"Nov",Dec:"Dec",sortname:"by name",sortkind:"by kind",sortsize:"by size",sortdate:"by date",sortFoldersFirst:"Folders first",confirmReq:"Confirmation required",confirmRm:"Are you sure you want to remove files? This cannot be undone!",confirmRepl:"Replace old file with new one?",confirmConvUTF8:"Not in UTF-8 Convert to UTF-8? Contents become UTF-8 by saving after conversion.",apllyAll:"Apply to all",name:"Name",size:"Size",perms:"Permissions",modify:"Modified",kind:"Kind",read:"read",write:"write",noaccess:"no access",and:"and",unknown:"unknown",selectall:"Select all files",selectfiles:"Select file(s)",selectffile:"Select first file",selectlfile:"Select last file",viewlist:"List view",viewicons:"Icons view",places:"Places",calc:"Calculate",path:"Path",aliasfor:"Alias for",locked:"Locked",dim:"Dimensions",files:"Files",folders:"Folders",items:"Items",yes:"yes",no:"no",link:"Link",searcresult:"Search results",selected:"selected items",about:"About",shortcuts:"Shortcuts",help:"Help",webfm:"Web file manager",ver:"Version",protocolver:"protocol version",homepage:"Project home",docs:"Documentation",github:"Fork us on Github",twitter:"Follow us on twitter",facebook:"Join us on facebook",team:"Team",chiefdev:"chief developer",developer:"developer",contributor:"contributor",maintainer:"maintainer",translator:"translator",icons:"Icons",dontforget:"and don't forget to take your towel",shortcutsof:"Shortcuts disabled",dropFiles:"Drop files here",or:"or",selectForUpload:"Select files to upload",moveFiles:"Move files",copyFiles:"Copy files",rmFromPlaces:"Remove from places",aspectRatio:"Aspect ratio",scale:"Scale",width:"Width",height:"Height",resize:"Resize",crop:"Crop",rotate:"Rotate","rotate-cw":"Rotate 90 degrees CW","rotate-ccw":"Rotate 90 degrees CCW",degree:"°",netMountDialogTitle:"Mount network volume",protocol:"Protocol",host:"Host",port:"Port",user:"User",pass:"Password",confirmUnmount:"Are you unmount $1?",dropFilesBrowser:"Drop or Paste files from browser",dropPasteFiles:"Drop or Paste files here",kindUnknown:"Unknown",kindFolder:"Folder",kindAlias:"Alias",kindAliasBroken:"Broken alias",kindApp:"Application",kindPostscript:"Postscript document",kindMsOffice:"Microsoft Office document",kindMsWord:"Microsoft Word document",kindMsExcel:"Microsoft Excel document",kindMsPP:"Microsoft Powerpoint presentation",kindOO:"Open Office document",kindAppFlash:"Flash application",kindPDF:"Portable Document Format (PDF)",kindTorrent:"Bittorrent file",kind7z:"7z archive",kindTAR:"TAR archive",kindGZIP:"GZIP archive",kindBZIP:"BZIP archive",kindZIP:"ZIP archive",kindRAR:"RAR archive",kindJAR:"Java JAR file",kindTTF:"True Type font",kindOTF:"Open Type font",kindRPM:"RPM package",kindText:"Text document",kindTextPlain:"Plain text",kindPHP:"PHP source",kindCSS:"Cascading style sheet",kindHTML:"HTML document",kindJS:"Javascript source",kindRTF:"Rich Text Format",kindC:"C source",kindCHeader:"C header source",kindCPP:"C++ source",kindCPPHeader:"C++ header source",kindShell:"Unix shell script",kindPython:"Python source",kindJava:"Java source",kindRuby:"Ruby source",kindPerl:"Perl script",kindSQL:"SQL source",kindXML:"XML document",kindAWK:"AWK source",kindCSV:"Comma separated values",kindDOCBOOK:"Docbook XML document",kindImage:"Image",kindBMP:"BMP image",kindJPEG:"JPEG image",kindGIF:"GIF Image",kindPNG:"PNG Image",kindTIFF:"TIFF image",kindTGA:"TGA image",kindPSD:"Adobe Photoshop image",kindXBITMAP:"X bitmap image",kindPXM:"Pixelmator image",kindAudio:"Audio media",kindAudioMPEG:"MPEG audio",kindAudioMPEG4:"MPEG-4 audio",kindAudioMIDI:"MIDI audio",kindAudioOGG:"Ogg Vorbis audio",kindAudioWAV:"WAV audio",AudioPlaylist:"MP3 playlist",kindVideo:"Video media",kindVideoDV:"DV movie",kindVideoMPEG:"MPEG movie",kindVideoMPEG4:"MPEG-4 movie",kindVideoAVI:"AVI movie",kindVideoMOV:"Quick Time movie",kindVideoWM:"Windows Media movie",kindVideoFlash:"Flash movie",kindVideoMKV:"Matroska movie",kindVideoOGG:"Ogg movie"}}),e.fn.elfinderbutton=function(t){return this.each(function(){var n,i="class",r=t.fm,a=r.res(i,"disabled"),o=r.res(i,"active"),s=r.res(i,"hover"),l="elfinder-button-menu-item",d="elfinder-button-menu-item-selected",c=e(this).addClass("ui-state-default elfinder-button").attr("title",t.title).append(' ').hover(function(e){!c.is("."+a)&&c["mouseleave"==e.type?"removeClass":"addClass"](s)}).click(function(e){c.is("."+a)||(n&&t.variants.length>1?(n.is(":hidden")&&t.fm.getUI().click(),e.stopPropagation(),n.slideToggle(100)):t.exec())}),u=function(){n.hide()};e.isArray(t.variants)&&(c.addClass("elfinder-menubutton"),n=e('').hide().appendTo(c).zIndex(12+c.zIndex()).delegate("."+l,"mouseenter mouseleave",function(){e(this).toggleClass(s)}).delegate("."+l,"click",function(n){n.preventDefault(),n.stopPropagation(),c.removeClass(s),t.exec(t.fm.selected(),e(this).data("value"))}),t.fm.bind("disable select",u).getUI().click(u),t.change(function(){n.html(""),e.each(t.variants,function(i,r){n.append(e(''+r[1]+"
").data("value",r[0]).addClass(r[0]==t.value?d:""))
+})})),t.change(function(){t.disabled()?c.removeClass(o+" "+s).addClass(a):(c.removeClass(a),c[t.active()?"addClass":"removeClass"](o))}).change()})},e.fn.elfindercontextmenu=function(t){return this.each(function(){var n=e(this).addClass("ui-helper-reset ui-widget ui-state-default ui-corner-all elfinder-contextmenu elfinder-contextmenu-"+t.direction).hide().appendTo("body").delegate(".elfinder-contextmenu-item","mouseenter mouseleave",function(){e(this).toggleClass("ui-state-hover")}),i="ltr"==t.direction?"left":"right",r=e.extend({},t.options.contextmenu),a='',o=function(t,n,i){return e(a.replace("{icon}",n?"elfinder-button-icon-"+n:"").replace("{label}",t)).click(function(e){e.stopPropagation(),e.stopPropagation(),i()})},s=function(r,a){var o=e(window),s=n.outerWidth(),l=n.outerHeight(),d=o.width(),c=o.height(),u=o.scrollTop(),p=o.scrollLeft(),h=t.UA.Touch?10:0,f={top:(c>a+h+l?a+h:a-h-l>0?a-h-l:a+h)+u,left:(d>r+h+s?r+h:r-h-s)+p,"z-index":100+t.getUI("workzone").zIndex()};n.css(f).show(),f={"z-index":f["z-index"]+10},f[i]=parseInt(n.width()),n.find(".elfinder-contextmenu-sub").css(f)},l=function(){n.hide().empty()},d=function(i,a){var s=!1;e.each(r[i]||[],function(i,r){var d,c,u;if("|"==r&&s)return n.append(''),s=!1,void 0;if(d=t.command(r),d&&-1!=d.getstate(a)){if(d.variants){if(!d.variants.length)return;c=o(d.title,d.name,function(){}),u=e('').appendTo(c.append('')),c.addClass("elfinder-contextmenu-group").hover(function(){u.toggle()}),e.each(d.variants,function(t,n){u.append(e('").click(function(e){e.stopPropagation(),l(),d.exec(a,n[0])}))})}else c=o(d.title,d.name,function(){l(),d.exec(a)});n.append(c),s=!0}})},c=function(t){e.each(t,function(e,t){var i;t.label&&"function"==typeof t.callback&&(i=o(t.label,t.icon,function(){l(),t.callback()}),n.append(i))})};t.one("load",function(){t.bind("contextmenu",function(e){var t=e.data;l(),t.type&&t.targets?d(t.type,t.targets):t.raw&&c(t.raw),n.children().length&&s(t.x,t.y)}).one("destroy",function(){n.remove()}).bind("disable select",l).getUI().click(l)})})},e.fn.elfindercwd=function(t,n){return this.not(".elfinder-cwd").each(function(){var i="list"==t.viewType,r="select."+t.namespace,a="unselect."+t.namespace,o="disable."+t.namespace,s="enable."+t.namespace,l="class",d=t.res(l,"cwdfile"),c="."+d,u="ui-selected",p=t.res(l,"disabled"),h=t.res(l,"draggable"),f=t.res(l,"droppable"),m=t.res(l,"hover"),g=t.res(l,"adroppable"),v=d+"-tmp",b=t.options.loadTmbs>0?t.options.loadTmbs:5,y="",w=[],x={icon:'',row:' {marker}{name}
{perms} {date} {size} {kind} '},k=t.res("tpl","perms"),C=t.res("tpl","lock"),F=t.res("tpl","symlink"),T={permsclass:function(e){return t.perms2class(e)},perms:function(e){return t.formatPermissions(e)},dirclass:function(e){return"directory"==e.mime?"directory":""},mime:function(e){return t.mime2class(e.mime)},size:function(e){return t.formatSize(e.size)},date:function(e){return t.formatDate(e)},kind:function(e){return t.mime2kind(e)},marker:function(e){return(e.alias||"symlink-broken"==e.mime?F:"")+(e.read&&e.write?"":k)+(e.locked?C:"")},tooltip:function(e){var n=t.formatDate(e)+(e.size>0?" ("+t.formatSize(e.size)+")":"");return e.tooltip?t.escape(e.tooltip).replace(/"/g,""").replace(/\r/g,"
")+"
"+n:n}},z=function(e){return e.name=t.escape(e.name),x[i?"row":"icon"].replace(/\{([a-z]+)\}/g,function(t,n){return T[n]?T[n](e):e[n]?e[n]:""})},I=!1,P=function(t,n){function o(e,t){return e[t+"All"]("[id]:not(."+p+"):not(.elfinder-cwd-parent):first")}var s,l,d,c,h,f=e.ui.keyCode,m=t==f.LEFT||t==f.UP,g=$.find("[id]."+u);if(g.length)if(s=g.filter(m?":first":":last"),d=o(s,m?"prev":"next"),d.length)if(i||t==f.LEFT||t==f.RIGHT)l=d;else if(c=s.position().top,h=s.position().left,l=s,m){do l=l.prev("[id]");while(l.length&&!(l.position().topc&&l.position().left>=h));l.is("."+p)&&(l=o(l,"prev")),l.length||(d=$.find("[id]:not(."+p+"):last"),d.position().top>c&&(l=d))}else l=s;else l=$.find("[id]:not(."+p+"):not(.elfinder-cwd-parent):"+(m?"last":"first"));l&&l.length&&!l.is(".elfinder-cwd-parent")&&(n?l=s.add(s[m?"prevUntil":"nextUntil"]("#"+l.attr("id"))).add(l):g.trigger(a),l.trigger(r),E(l.filter(m?":first":":last")),S())},M=[],D=function(e){$.find("#"+e).trigger(r)},A=function(){var n=t.cwd().hash;$.find("[id]:not(."+u+"):not(.elfinder-cwd-parent)").trigger(r),M=e.map(t.files(),function(e){return e.phash==n?e.hash:null}),S()},O=function(){M=[],$.find("[id]."+u).trigger(a),S()},S=function(){t.trigger("select",{selected:M})},E=function(e){var t=e.position().top,n=e.outerHeight(!0),i=G.scrollTop(),r=G.innerHeight();t+n>i+r?G.scrollTop(parseInt(t+n-r)):i>t&&G.scrollTop(t)},U=[],j=function(e){for(var t=U.length;t--;)if(U[t].hash==e)return t;return-1},R="scroll."+t.namespace,q=function(){var n,a=[],o=!1,s=[],l={},d=$.find("[id]:last"),c=!d.length,p=i?$.children("table").children("tbody"):$;if(!U.length)return G.unbind(R);for(;(!d.length||d.position().top<=G.height()+G.scrollTop()+t.options.showThreshold)&&(n=U.splice(0,t.options.showFiles)).length;)a=e.map(n,function(e){return e.hash&&e.name?("directory"==e.mime&&(o=!0),e.tmb&&(1===e.tmb?s.push(e.hash):l[e.hash]=e.tmb),z(e)):null}),p.append(a.join("")),d=$.find("[id]:last"),c&&$.scrollTop(0);_(l),s.length&&N(s),o&&L(),M.length&&p.find("[id]:not(."+u+"):not(.elfinder-cwd-parent)").each(function(){var t=this.id;-1!==e.inArray(t,M)&&e(this).trigger(r)})},H=e.extend({},t.droppable,{over:function(n,i){var r=t.cwd().hash;e.each(i.helper.data("files"),function(e,n){return t.file(n).phash==r?($.removeClass(g),!1):void 0})}}),L=function(){setTimeout(function(){$.find(".directory:not(."+f+",.elfinder-na,.elfinder-ro)").droppable(t.droppable)},20)},_=function(n){var i,r=t.option("tmbUrl"),a=!0;return e.each(n,function(t,n){var o=$.find("#"+t);o.length?function(t,n){e(" ").load(function(){t.find(".elfinder-cwd-icon").css("background","url('"+n+"') center center no-repeat")}).attr("src",n)}(o,r+n):(a=!1,-1!=(i=j(t))&&(U[i].tmb=n))}),a},N=function(e){var n=[];return t.oldAPI?(t.request({data:{cmd:"tmb",current:t.cwd().hash},preventFail:!0}).done(function(e){_(e.images||[])&&e.tmb&&N()}),void 0):(n=n=e.splice(0,b),n.length&&t.request({data:{cmd:"tmb",targets:n},preventFail:!0}).done(function(t){_(t.images||[])&&N(e)}),void 0)},W=function(e){for(var n,r,a,o,s=i?$.find("tbody"):$,l=e.length,d=[],c={},u=!1,p=function(e){for(var n,i=$.find("[id]:first");i.length;){if(n=t.file(i.attr("id")),!i.is(".elfinder-cwd-parent")&&n&&t.compare(e,n)<0)return i;i=i.next("[id]")}},h=function(e){var n,i=U.length;for(n=0;i>n;n++)if(t.compare(e,U[n])<0)return n;return i||-1};l--;)n=e[l],r=n.hash,$.find("#"+r).length||((a=p(n))&&a.length?a.before(z(n)):(o=h(n))>=0?U.splice(o,0,n):s.append(z(n)),$.find("#"+r).length&&("directory"==n.mime?u=!0:n.tmb&&(1===n.tmb?d.push(r):c[r]=n.tmb)));_(c),d.length&&N(d),u&&L()},V=function(e){for(var n,i,r,a=e.length;a--;)if(n=e[a],(i=$.find("#"+n)).length)try{i.detach()}catch(o){t.debug("error",o)}else-1!=(r=j(n))&&U.splice(r,1)},B={name:t.i18n("name"),perm:t.i18n("perms"),mod:t.i18n("modify"),size:t.i18n("size"),kind:t.i18n("kind")},K=function(r,a){var o=t.cwd().hash;O();try{$.children("table,"+c).remove()}catch(s){$.html("")}if($.removeClass("elfinder-cwd-view-icons elfinder-cwd-view-list").addClass("elfinder-cwd-view-"+(i?"list":"icons")),G[i?"addClass":"removeClass"]("elfinder-cwd-wrapper-list"),i&&$.html(''+B.name+" "+B.perm+" "+B.mod+" "+B.size+" "+B.kind+"
"),U=e.map(r,function(e){return a||e.phash==o?e:null}),U=t.sortFiles(U),G.bind(R,q).trigger(R),o=t.cwd().phash,n.oldSchool&&o&&!y){var l=e.extend(!0,{},t.file(o),{name:"..",mime:"directory"});l=e(z(l)).addClass("elfinder-cwd-parent").bind("mousedown click mouseup touchstart touchmove touchend dblclick mouseenter",function(e){e.preventDefault(),e.stopPropagation()}).dblclick(function(){t.exec("open",this.id)}),(i?$.find("tbody"):$).prepend(l)}},$=e(this).addClass("ui-helper-clearfix elfinder-cwd").attr("unselectable","on").delegate(c,"click."+t.namespace,function(n){var i,o=this.id?e(this):e(this).parents("[id]:first"),s=o.prevAll("."+u+":first"),l=o.nextAll("."+u+":first"),d=s.length,c=l.length;if($.data("longtap"))return n.stopPropagation(),void 0;if(n.stopImmediatePropagation(),n.shiftKey&&(d||c))i=d?o.prevUntil("#"+s.attr("id")):o.nextUntil("#"+l.attr("id")),i.add(o).trigger(r);else if(n.ctrlKey||n.metaKey)o.trigger(o.is("."+u)?a:r);else{if(o.data("touching")&&o.is("."+u))return o.data("touching",null),t.dblclick({file:this.id}),O(),void 0;O(),o.trigger(r)}S()}).delegate(c,"dblclick."+t.namespace,function(){t.dblclick({file:this.id})}).delegate(c,"touchstart."+t.namespace,function(n){n.stopPropagation();var i=this.id?e(this):e(this).parents("[id]:first"),o=i.prevAll("."+u+":first").length+i.nextAll("."+u+":first").length;$.data("longtap",null),i.data("touching",!0),i.data("tmlongtap",setTimeout(function(){$.data("longtap",!0),i.is("."+u)&&o>0?(i.trigger(a),S()):(i.trigger(r),S(),i.trigger(t.trigger("contextmenu",{type:"files",targets:t.selected(),x:n.originalEvent.touches[0].clientX,y:n.originalEvent.touches[0].clientY})))},500))}).delegate(c,"touchmove."+t.namespace+" touchend."+t.namespace,function(t){var n=this.id?e(this):e(this).parents("[id]:first");t.stopPropagation(),clearTimeout(n.data("tmlongtap"))}).delegate(c,"mouseenter."+t.namespace,function(){var n=e(this),r=i?n:n.children();n.is("."+v)||r.is("."+h+",."+p)||r.draggable(t.draggable)}).delegate(c,r,function(){var t=e(this),n=t.attr("id");I||t.is("."+p)||(t.addClass(u).children().addClass(m),-1===e.inArray(n,M)&&M.push(n))}).delegate(c,a,function(){var t,n=e(this),i=n.attr("id");I||(e(this).removeClass(u).children().removeClass(m),t=e.inArray(i,M),-1!==t&&M.splice(t,1))}).delegate(c,o,function(){var t=e(this).removeClass(u).addClass(p),n=(i?t:t.children()).removeClass(m);t.is("."+f)&&t.droppable("disable"),n.is("."+h)&&n.draggable("disable"),!i&&n.removeClass(p)}).delegate(c,s,function(){var t=e(this).removeClass(p),n=i?t:t.children();t.is("."+f)&&t.droppable("enable"),n.is("."+h)&&n.draggable("enable")}).delegate(c,"scrolltoview",function(){E(e(this))}).delegate(c,"mouseenter."+t.namespace+" mouseleave."+t.namespace,function(n){t.trigger("hover",{hash:e(this).attr("id"),type:n.type}),e(this).toggleClass("ui-state-hover")}).bind("contextmenu."+t.namespace,function(n){var i=e(n.target).closest("."+d);i.length&&(n.stopPropagation(),n.preventDefault(),i.is("."+p)||i.data("touching")||(i.is("."+u)||(O(),i.trigger(r),S()),t.trigger("contextmenu",{type:"files",targets:t.selected(),x:n.clientX,y:n.clientY})))}).bind("click."+t.namespace,function(e){return $.data("longtap")?(e.stopPropagation(),void 0):(!e.shiftKey&&!e.ctrlKey&&!e.metaKey&&O(),void 0)}).selectable({filter:c,stop:S,delay:250,selected:function(t,n){e(n.selected).trigger(r)},unselected:function(t,n){e(n.unselected).trigger(a)}}).droppable(H).bind("create."+t.namespace,function(t,n){var r=i?$.find("tbody"):$,a=r.find(".elfinder-cwd-parent"),n=e(z(n)).addClass(v);O(),a.length?a.after(n):r.prepend(n),$.scrollTop(0)}).bind("unselectall",O).bind("selectfile",function(e,t){$.find("#"+t).trigger(r),S()}),G=e('
').bind("contextmenu",function(e){e.preventDefault(),t.trigger("contextmenu",{type:"cwd",targets:[t.cwd().hash],x:e.clientX,y:e.clientY})}).bind("touchstart."+t.namespace,function(n){var i=e(this);$.data("longtap",null),i.data("touching",!0),i.data("tmlongtap",setTimeout(function(){$.data("longtap",!0),t.trigger("contextmenu",{type:"cwd",targets:[t.cwd().hash],x:n.originalEvent.touches[0].clientX,y:n.originalEvent.touches[0].clientY})},500))}).bind("touchmove."+t.namespace+" touchend."+t.namespace,function(){clearTimeout(e(this).data("tmlongtap"))}),J=function(){var t=0;G.siblings(".elfinder-panel:visible").each(function(){t+=e(this).outerHeight(!0)}),G.height(Y.height()-t)},X=e(this).parent().resize(J),Y=X.children(".elfinder-workzone").append(G.append(this));e("body").on("touchstart touchmove touchend",function(){}),t.dragUpload&&(G[0].addEventListener("dragenter",function(e){e.preventDefault(),e.stopPropagation(),G.addClass(g)},!1),G[0].addEventListener("dragleave",function(e){e.preventDefault(),e.stopPropagation(),e.target==$[0]&&G.removeClass(g)},!1),G[0].addEventListener("dragover",function(e){e.preventDefault(),e.stopPropagation()},!1),G[0].addEventListener("drop",function(e){G.removeClass(g),t.exec("upload",{dropEvt:e})},!1)),t.bind("open",function(e){K(e.data.files)}).bind("search",function(e){w=e.data.files,K(w,!0)}).bind("searchend",function(){w=[],y&&(y="",K(t.files()))}).bind("searchstart",function(e){y=e.data.query}).bind("sortchange",function(){K(y?w:t.files(),!!y)}).bind("viewchange",function(){var n=t.selected(),r="list"==t.storage("view");r!=i&&(i=r,K(t.files()),e.each(n,function(e,t){D(t)}),S()),J()}).add(function(n){var i=t.cwd().hash,r=y?e.map(n.data.added||[],function(e){return-1===e.name.indexOf(y)?null:e}):e.map(n.data.added||[],function(e){return e.phash==i?e:null});W(r)}).change(function(n){var i=t.cwd().hash,r=t.selected();y?e.each(n.data.changed||[],function(t,n){V([n.hash]),-1!==n.name.indexOf(y)&&(W([n]),-1!==e.inArray(n.hash,r)&&D(n.hash))}):e.each(e.map(n.data.changed||[],function(e){return e.phash==i?e:null}),function(t,n){V([n.hash]),W([n]),-1!==e.inArray(n.hash,r)&&D(n.hash)}),S()}).remove(function(e){V(e.data.removed||[]),S()}).bind("open add search searchend",function(){$.css("height","auto"),$.outerHeight(!0) '),u=e('
').append(c),p=e('
').hide().append(n).appendTo(i).draggable({handle:".ui-dialog-titlebar",containment:"document"}).css({width:t.width,height:t.height}).mousedown(function(t){t.stopPropagation(),e(document).mousedown(),p.is("."+r)||(i.find("."+a+":visible").removeClass(r),p.addClass(r).zIndex(h()+1))}).bind("open",function(){var r=e(this),s=r.outerWidth()>i.width()-10?i.width()-10:null;s&&r.css({width:s,left:"5px"}),p.trigger("totop"),"function"==typeof t.open&&e.proxy(t.open,n[0])(),p.is("."+o)||i.find("."+a+":visible").not("."+o).each(function(){var t=e(this),n=parseInt(t.css("top")),i=parseInt(t.css("left")),r=parseInt(p.css("top")),a=parseInt(p.css("left"));t[0]==p[0]||n!=r&&i!=a||p.css({top:n+(s?15:10)+"px",left:(s?5:i+10)+"px"})})}).bind("close",function(){var r=i.find(".elfinder-dialog:visible"),a=h();e(this).data("modal")&&d.elfinderoverlay("hide"),r.length?r.each(function(){var t=e(this);return t.zIndex()>=a?(t.trigger("totop"),!1):void 0}):setTimeout(function(){i.mousedown().click()},10),"function"==typeof t.close?e.proxy(t.close,n[0])():t.destroyOnClose&&p.hide().remove()}).bind("totop",function(){e(this).mousedown().find(".ui-button:first").focus().end().find(":text:first").focus(),e(this).data("modal")&&d.elfinderoverlay("show"),d.zIndex(e(this).zIndex())}).data({modal:t.modal}),h=function(){var t=i.zIndex()+10;return i.find("."+a+":visible").each(function(){var n;this!=p[0]&&(n=e(this).zIndex(),n>t&&(t=n))}),t};t.position||(t.position={top:Math.max(0,parseInt((i.height()-p.outerHeight())/2-42))+"px",left:Math.max(0,parseInt((i.width()-p.outerWidth())/2))+"px"}),p.css(t.position),t.closeOnEscape&&e(document).bind("keyup."+l,function(t){t.keyCode==e.ui.keyCode.ESCAPE&&p.is("."+r)&&(n.elfinderdialog("close"),e(document).unbind("keyup."+l))}),p.prepend(e('").prepend(e(' ').mousedown(function(e){e.preventDefault(),n.elfinderdialog("close")}))),e.each(t.buttons,function(t,i){var r=e(''+t+" ").click(e.proxy(i,n[0])).hover(function(t){e(this)["mouseenter"==t.type?"focus":"blur"]()}).focus(function(){e(this).addClass(s)}).blur(function(){e(this).removeClass(s)}).keydown(function(t){var n;t.keyCode==e.ui.keyCode.ENTER?e(this).click():t.keyCode==e.ui.keyCode.TAB&&(n=e(this).next(".ui-button"),n.length?n.focus():e(this).parent().children(".ui-button:first").focus())});c.append(r)}),c.children().length&&p.append(u),t.resizable&&e.fn.resizable&&p.resizable({minWidth:t.minWidth,minHeight:t.minHeight,alsoResize:this}),"function"==typeof t.create&&e.proxy(t.create,this)(),t.autoOpen&&n.elfinderdialog("open")}),this},e.fn.elfinderdialog.defaults={cssClass:"",title:"",modal:!1,resizable:!0,autoOpen:!0,closeOnEscape:!0,destroyOnClose:!1,buttons:{},position:null,width:320,height:"auto",minWidth:200,minHeight:110},e.fn.elfindernavbar=function(t,n){return this.not(".elfinder-navbar").each(function(){var i,r=e(this).addClass("ui-state-default elfinder-navbar"),a=r.parent().resize(function(){r.height(o.height()-s)}),o=a.children(".elfinder-workzone").append(r),s=r.outerHeight()-r.height(),l="ltr"==t.direction;if(e.fn.resizable){if(i=r.resizable({handles:l?"e":"w",minWidth:n.minWidth||150,maxWidth:n.maxWidth||500}).bind("resize scroll",function(){var e=t.UA.Opera&&r.scrollLeft()?20:2;i.css({top:parseInt(r.scrollTop())+"px",left:l?"auto":parseInt(r.scrollLeft()+e),right:l?-1*parseInt(r.scrollLeft()-e):"auto"})}).find(".ui-resizable-handle").zIndex(r.zIndex()+10),t.UA.Touch){var d=function(){i.data("closed")?(i.data("closed",!1).css({backgroundColor:"transparent"}),r.css({width:i.data("width")}).trigger("resize")):(i.data("closed",!0).css({backgroundColor:"inherit"}),r.css({width:8})),i.data({startX:null,endX:null})};i.data({closed:!1,width:r.width()}).bind("touchstart",function(e){i.data("startX",e.originalEvent.touches[0].pageX)}).bind("touchmove",function(e){var t=e.originalEvent.touches[0].pageX,n=i.data("startX"),r=l?n&&t>n:n>t,a=l?n>t:n&&t>n;(r||a)&&d()}).bind("touchend",function(){i.data("startX")&&d()}),t.UA.Mobile&&(i.data("defWidth",r.width()),e(window).bind("resize",function(){var e=r.parent().width()/2;i.data("defWidth")>e?r.width(e):r.width(i.data("defWidth")),i.data("width",r.width())}))}t.one("open",function(){setTimeout(function(){r.trigger("resize")},150)})}}),this},e.fn.elfinderoverlay=function(t){if(this.filter(":not(.elfinder-overlay)").each(function(){t=e.extend({},t),e(this).addClass("ui-widget-overlay elfinder-overlay").hide().mousedown(function(e){e.preventDefault(),e.stopPropagation()}).data({cnt:0,show:"function"==typeof t.show?t.show:function(){},hide:"function"==typeof t.hide?t.hide:function(){}})}),"show"==t){var n=this.eq(0),i=n.data("cnt")+1,r=n.data("show");n.data("cnt",i),n.is(":hidden")&&(n.zIndex(n.parent().zIndex()+1),n.show(),r())}if("hide"==t){var n=this.eq(0),i=n.data("cnt")-1,a=n.data("hide");n.data("cnt",i),0==i&&n.is(":visible")&&(n.hide(),a())}return this},e.fn.elfinderpanel=function(t){return this.each(function(){var n=e(this).addClass("elfinder-panel ui-state-default ui-corner-all"),i="margin-"+("ltr"==t.direction?"left":"right");t.one("load",function(){var e=t.getUI("navbar");n.css(i,parseInt(e.outerWidth(!0))),e.bind("resize",function(){n.is(":visible")&&n.css(i,parseInt(e.outerWidth(!0)))})})})},e.fn.elfinderpath=function(t){return this.each(function(){var n=e(this).addClass("elfinder-path").html(" ").delegate("a","click",function(n){var i=e(this).attr("href").substr(1);n.preventDefault(),i!=t.cwd().hash&&t.exec("open",i)}).prependTo(t.getUI("statusbar").show());t.bind("open searchend",function(){var i=[];e.each(t.parents(t.cwd().hash),function(e,n){i.push(''+t.escape(t.file(n).name)+" ")}),n.html(i.join(t.option("separator")))}).bind("search",function(){n.html(t.i18n("searcresult"))})})},e.fn.elfinderplaces=function(t,n){return this.each(function(){var i=[],r="class",a=t.res(r,"navdir"),o=t.res(r,"navcollapse"),s=t.res(r,"navexpand"),l=(t.res(r,"hover"),t.res(r,"treeroot")),d=t.res("tpl","navdir"),c=t.res("tpl","perms"),u=e(t.res("tpl","navspinner")),p=function(e){return e.substr(6)},h=function(e){return"place-"+e},f=function(){t.storage("places",i.join(","))},m=function(n){return e(d.replace(/\{id\}/,h(n.hash)).replace(/\{name\}/,t.escape(n.name)).replace(/\{cssclass\}/,t.perms2class(n)).replace(/\{permissions\}/,n.read&&n.write?"":c).replace(/\{symlink\}/,""))},g=function(n){var r=m(n);w.children().length&&e.each(w.children(),function(){var t=e(this);return n.name.localeCompare(t.children("."+a).text())<0?!r.insertBefore(t):void 0}),i.push(n.hash),!r.parent().length&&w.append(r),y.addClass(o),r.draggable({appendTo:"body",revert:!1,helper:function(){var n=e(this);return n.children().removeClass("ui-state-hover"),e('
').append(n.clone()).data("hash",p(n.children(":first").attr("id")))},start:function(){e(this).hide()},stop:function(t,n){var i=x.offset().top,r=x.offset().left,a=x.width(),o=x.height(),s=t.clientX,l=t.clientY;s>r&&r+a>s&&l>i&&l+o>l?e(this).show():(v(n.helper.data("hash")),f())}})},v=function(t){var n=e.inArray(t,i);-1!==n&&(i.splice(n,1),w.find("#"+h(t)).parent().remove(),!w.children().length&&y.removeClass(o+" "+s))},b=m({hash:"root-"+t.namespace,name:t.i18n(n.name,"places"),read:!0,write:!0}),y=b.children("."+a).addClass(l).click(function(){y.is("."+o)&&(x.toggleClass(s),w.slideToggle(),t.storage("placesState",x.is("."+s)?1:0))}),w=b.children("."+t.res(r,"navsubtree")),x=e(this).addClass(t.res(r,"tree")+" elfinder-places ui-corner-all").hide().append(b).appendTo(t.getUI("navbar")).delegate("."+a,"mouseenter mouseleave",function(){e(this).toggleClass("ui-state-hover")}).delegate("."+a,"click",function(){t.exec("open",e(this).attr("id").substr(6))}).delegate("."+a+":not(."+l+")","contextmenu",function(n){var i=e(this).attr("id").substr(6);n.preventDefault(),t.trigger("contextmenu",{raw:[{label:t.i18n("rmFromPlaces"),icon:"rm",callback:function(){v(i),f()}}],x:n.clientX,y:n.clientY})}).droppable({tolerance:"pointer",accept:".elfinder-cwd-file-wrapper,.elfinder-tree-dir,.elfinder-cwd-file",hoverClass:t.res("class","adroppable"),drop:function(n,r){var a=!0;e.each(r.helper.data("files"),function(n,r){var o=t.file(r);o&&"directory"==o.mime&&-1===e.inArray(o.hash,i)?g(o):a=!1}),f(),a&&r.helper.hide()}});t.one("load",function(){t.oldAPI||(x.show().parent().show(),i=e.map(t.storage("places").split(","),function(e){return e||null}),i.length&&(y.prepend(u),t.request({data:{cmd:"info",targets:i},preventDefault:!0}).done(function(n){i=[],e.each(n.files,function(e,t){"directory"==t.mime&&g(t)}),f(),t.storage("placesState")>0&&y.click()}).always(function(){u.remove()})),t.remove(function(t){e.each(t.data.removed,function(e,t){v(t)}),f()}).change(function(t){e.each(t.data.changed,function(t,n){-1!==e.inArray(n.hash,i)&&(v(n.hash),"directory"==n.mime&&g(n))}),f()}).bind("sync",function(){i.length&&(y.prepend(u),t.request({data:{cmd:"info",targets:i},preventDefault:!0}).done(function(t){e.each(t.files||[],function(t,n){-1===e.inArray(n.hash,i)&&v(n.hash)}),f()}).always(function(){u.remove()}))}))})})},e.fn.elfindersearchbutton=function(t){return this.each(function(){var n=!1,i=e(this).hide().addClass("ui-widget-content elfinder-button "+t.fm.res("class","searchbtn")),r=function(){var i=e.trim(o.val());i?t.exec(i).done(function(){n=!0,o.focus()}):t.fm.trigger("searchend")},a=function(){o.val(""),n&&(n=!1,t.fm.trigger("searchend"))},o=e(' ').appendTo(i).keypress(function(e){e.stopPropagation()}).keydown(function(e){e.stopPropagation(),13==e.keyCode&&r(),27==e.keyCode&&(e.preventDefault(),a())});e(' ').appendTo(i).click(r),e(' ').appendTo(i).click(a),setTimeout(function(){if(i.parent().detach(),t.fm.getUI("toolbar").prepend(i.show()),t.fm.UA.ltIE7){var e=i.children("ltr"==t.fm.direction?".ui-icon-close":".ui-icon-search");e.css({right:"",left:parseInt(i.width())-e.outerWidth(!0)})}},200),t.fm.error(function(){o.unbind("keydown")}).select(function(){o.blur()}).bind("searchend",function(){o.val("")}).viewchange(a).shortcut({pattern:"ctrl+f f3",description:t.title,callback:function(){o.select().focus()}})})},e.fn.elfindersortbutton=function(t){return this.each(function(){var n=t.fm,i=t.name,r="class",a=n.res(r,"disabled"),o=n.res(r,"hover"),s="elfinder-button-menu-item",l=s+"-selected",d=l+"-asc",c=l+"-desc",u=e(this).addClass("ui-state-default elfinder-button elfinder-menubutton elfiner-button-"+i).attr("title",t.title).append(' ').hover(function(){!u.is("."+a)&&u.toggleClass(o)}).click(function(e){u.is("."+a)||(e.stopPropagation(),p.is(":hidden")&&t.fm.getUI().click(),p.slideToggle(100))}),p=e('').hide().appendTo(u).zIndex(12+u.zIndex()).delegate("."+s,"mouseenter mouseleave",function(){e(this).toggleClass(o)}).delegate("."+s,"click",function(e){e.preventDefault(),e.stopPropagation(),f()}),h=function(){p.children(":not(:last)").removeClass(l+" "+d+" "+c).filter('[rel="'+n.sortType+'"]').addClass(l+" "+("asc"==n.sortOrder?d:c)),p.children(":last").toggleClass(l,n.sortStickFolders)},f=function(){p.hide()};e.each(n.sortRules,function(t){p.append(e(' '+n.i18n("sort"+t)+"
").data("type",t))}),p.children().click(function(){var i=e(this).attr("rel");t.exec([],{type:i,order:i==n.sortType?"asc"==n.sortOrder?"desc":"asc":n.sortOrder,stick:n.sortStickFolders})}),e(' '+n.i18n("sortFoldersFirst")+"
").appendTo(p).click(function(){t.exec([],{type:n.sortType,order:n.sortOrder,stick:!n.sortStickFolders})}),n.bind("disable select",f).getUI().click(f),n.bind("sortchange",h),p.children().length>1?t.change(function(){u.toggleClass(a,t.disabled()),h()}).change():u.addClass(a)})},e.fn.elfinderstat=function(t){return this.each(function(){var n=e(this).addClass("elfinder-stat-size"),i=e('
'),r=t.i18n("size").toLowerCase(),a=t.i18n("items").toLowerCase(),o=t.i18n("selected"),s=function(i,o){var s=0,l=0;e.each(i,function(e,t){o&&t.phash!=o||(s++,l+=parseInt(t.size)||0)}),n.html(a+": "+s+", "+r+": "+t.formatSize(l))};t.getUI("statusbar").prepend(n).append(i).show(),t.bind("open reload add remove change searchend",function(){s(t.files(),t.cwd().hash)}).search(function(e){s(e.data.files)}).select(function(){var n=0,a=0,s=t.selectedFiles();return 1==s.length?(n=s[0].size,i.html(t.escape(s[0].name)+(n>0?", "+t.formatSize(n):"")),void 0):(e.each(s,function(e,t){a++,n+=parseInt(t.size)||0}),i.html(a?o+": "+a+", "+r+": "+t.formatSize(n):" "),void 0)})})},e.fn.elfindertoolbar=function(t,n){return this.not(".elfinder-toolbar").each(function(){var i,r,a,o,s=t._commands,l=e(this).addClass("ui-helper-clearfix ui-widget-header ui-corner-top elfinder-toolbar"),d=n||[],c=d.length;for(l.prev().length&&l.parent().prepend(this);c--;)if(d[c]){for(a=e('
'),i=d[c].length;i--;)(r=s[d[c][i]])&&(o="elfinder"+r.options.ui,e.fn[o]&&a.prepend(e("
")[o](r)));a.children().length&&l.prepend(a),a.children(":gt(0)").before(' ')}l.children().length&&l.show()}),this},e.fn.elfindertree=function(t,n){var i=t.res("class","tree");return this.not("."+i).each(function(){var r="class",a=t.res(r,"treeroot"),o=n.openRootOnLoad,s=t.res(r,"navsubtree"),l=t.res(r,"treedir"),d=t.res(r,"navcollapse"),c=t.res(r,"navexpand"),u="elfinder-subtree-loaded",p=t.res(r,"navarrow"),h=t.res(r,"active"),f=t.res(r,"adroppable"),m=t.res(r,"hover"),g=t.res(r,"disabled"),v=t.res(r,"draggable"),b=t.res(r,"droppable"),y=function(e){var t=j.offset().left;return e>=t&&e<=t+j.width()},w=t.droppable.drop,x=e.extend(!0,{},t.droppable,{over:function(t){var n=e(this),i=m+" "+f;y(t.clientX)?(n.addClass(i),n.is("."+d+":not(."+c+")")&&setTimeout(function(){n.is("."+f)&&n.children("."+p).click()},500)):n.removeClass(i)},out:function(){e(this).removeClass(m+" "+f)},drop:function(e,t){y(e.clientX)&&w.call(this,e,t)}}),k=e(t.res("tpl","navspinner")),C=t.res("tpl","navdir"),F=t.res("tpl","perms"),T=(t.res("tpl","lock"),t.res("tpl","symlink")),z={id:function(e){return t.navHash2Id(e.hash)},cssclass:function(e){return(e.phash?"":a)+" "+l+" "+t.perms2class(e)+" "+(e.dirs&&!e.link?d:"")},permissions:function(e){return e.read&&e.write?"":F},symlink:function(e){return e.alias?T:""},style:function(e){return e.icon?"style=\"background-image:url('"+e.icon+"')\"":""}},I=function(e){return e.name=t.escape(e.i18||e.name),C.replace(/(?:\{([a-z]+)\})/gi,function(t,n){return e[n]||(z[n]?z[n](e):"")})},P=function(t){return e.map(t||[],function(e){return"directory"==e.mime?e:null})},M=function(e){return e?U.find("#"+t.navHash2Id(e)).next("."+s):U
+},D=function(n,i){for(var r,a=n.children(":first");a.length;){if(r=t.file(t.navId2Hash(a.children("[id]").attr("id"))),(r=t.file(t.navId2Hash(a.children("[id]").attr("id"))))&&i.name.toLowerCase().localeCompare(r.name.toLowerCase())<0)return a;a=a.next()}return e("")},A=function(e){for(var n,i,r,a,o=e.length,s=[],l=e.length,d=!0;l--;)n=e[l],U.find("#"+t.navHash2Id(n.hash)).length||((r=M(n.phash)).length?(i=I(n),n.phash&&(a=D(r,n)).length?a.before(i):(r[d||n.phash?"append":"prepend"](i),d=!1)):s.push(n));return s.length&&s.length0}).addClass(i)})},U=e(this).addClass(i).delegate("."+l,"mouseenter mouseleave",function(n){var i=e(this),r="mouseenter"==n.type;i.is("."+f+" ,."+g)||(r&&!i.is("."+a+",."+v+",.elfinder-na,.elfinder-wo")&&i.draggable(t.draggable),i.toggleClass(m,r))}).delegate("."+l,"dropover dropout drop",function(t){e(this)["dropover"==t.type?"addClass":"removeClass"](f+" "+m)}).delegate("."+l,"click",function(n){var i=e(this),r=t.navId2Hash(i.attr("id")),a=t.file(r);return i.data("longtap")?(n.stopPropagation(),void 0):(t.trigger("searchend"),r==t.cwd().hash||i.is("."+g)?i.is("."+d)&&i.children("."+p).click():t.exec("open",a.thash||r),void 0)}).delegate("."+l,"touchstart",function(n){var i=e(this),r=n.originalEvent;i.data("longtap",null),i.data("touching",!0),i.data("tmlongtap",setTimeout(function(){i.data("longtap",!0),t.trigger("contextmenu",{type:"navbar",targets:[t.navId2Hash(i.attr("id"))],x:r.touches[0].clientX,y:r.touches[0].clientY})},500))}).delegate("."+l,"touchmove touchend",function(){clearTimeout(e(this).data("tmlongtap"))}).delegate("."+l+"."+d+" ."+p,"click",function(n){var i=e(this),r=i.parent("."+l),a=r.next("."+s);n.stopPropagation(),r.is("."+u)?(r.toggleClass(c),a.slideToggle()):(k.insertBefore(i),r.removeClass(d),t.request({cmd:"tree",target:t.navId2Hash(r.attr("id"))}).done(function(e){A(P(e.tree)),a.children().length&&(r.addClass(d+" "+c),a.slideDown()),O()}).always(function(){k.remove(),r.addClass(u)}))}).delegate("."+l,"contextmenu",function(n){n.preventDefault(),t.trigger("contextmenu",{type:"navbar",targets:[t.navId2Hash(e(this).attr("id"))],x:n.clientX,y:n.clientY})}),j=t.getUI("navbar").append(U).show();t.open(function(e){var t=e.data,n=P(t.files);t.init&&U.empty(),n.length&&(A(n),E(n,u)),O()}).add(function(e){var t=P(e.data.added);t.length&&(A(t),E(t,d))}).change(function(n){for(var i,r,a,o,d,p,h,f,m,g=P(n.data.changed),v=g.length;v--;)if(i=g[v],(r=U.find("#"+t.navHash2Id(i.hash))).length){if(i.phash){if(o=r.closest("."+s),d=M(i.phash),p=r.parent().next(),h=D(d,i),!d.length)continue;(d[0]!==o[0]||p.get(0)!==h.get(0))&&(h.length?h.before(r):d.append(r))}f=r.is("."+c),m=r.is("."+u),a=e(I(i)),r.replaceWith(a.children("."+l)),i.dirs&&(f||m)&&(r=U.find("#"+t.navHash2Id(i.hash)))&&r.next("."+s).children().length&&(f&&r.addClass(c),m&&r.addClass(u))}O(),S()}).remove(function(e){for(var n,i,r=e.data.removed,a=r.length;a--;)(n=U.find("#"+t.navHash2Id(r[a]))).length&&(i=n.closest("."+s),n.parent().detach(),i.children().length||i.hide().prev("."+l).removeClass(d+" "+c+" "+u))}).bind("search searchend",function(e){U.find("#"+t.navHash2Id(t.cwd().hash))["search"==e.type?"removeClass":"addClass"](h)}).bind("lockfiles unlockfiles",function(n){var i="lockfiles"==n.type,r=i?"disable":"enable",a=e.map(n.data.files||[],function(e){var n=t.file(e);return n&&"directory"==n.mime?e:null});e.each(a,function(e,n){var a=U.find("#"+t.navHash2Id(n));a.length&&(a.is("."+v)&&a.draggable(r),a.is("."+b)&&a.droppable(h),a[i?"addClass":"removeClass"](g))})})}),this},e.fn.elfinderuploadbutton=function(t){return this.each(function(){var n=e(this).elfinderbutton(t).unbind("click"),i=e("").appendTo(n),r=e(' ').change(function(){var n=e(this);n.val()&&(t.exec({input:n.remove()[0]}),r.clone(!0).appendTo(i))});i.append(r.clone(!0)),t.change(function(){i[t.disabled()?"hide":"show"]()}).change()})},e.fn.elfinderviewbutton=function(t){return this.each(function(){var n=e(this).elfinderbutton(t),i=n.children(".elfinder-button-icon");t.change(function(){var e="icons"==t.value;i.toggleClass("elfinder-button-icon-view-list",e),n.attr("title",t.fm.i18n(e?"viewlist":"viewicons"))})})},e.fn.elfinderworkzone=function(){var t="elfinder-workzone";return this.not("."+t).each(function(){var n=e(this).addClass(t),i=n.outerHeight(!0)-n.height(),r=n.parent();r.add(window).bind("resize",function(){var a=r.height();r.children(":visible:not(."+t+")").each(function(){var t=e(this);"absolute"!=t.css("position")&&(a-=t.outerHeight(!0))}),n.height(a-i)})}),this},elFinder.prototype.commands.archive=function(){var t=this,n=t.fm,i=[];this.variants=[],this.disableOnSearch=!0,n.bind("open reload",function(){t.variants=[],e.each(i=n.option("archivers").create||[],function(e,i){t.variants.push([i,n.mime2kind(i)])}),t.change()}),this.getstate=function(){return!this._disabled&&i.length&&n.selected().length&&n.cwd().write?0:-1},this.exec=function(t,r){var a,o=this.files(t),s=o.length,l=r||i[0],d=n.cwd(),c=["errArchive","errPerm","errCreatingTempDir","errFtpDownloadFile","errFtpUploadFile","errFtpMkdir","errArchiveExec","errExtractExec","errRm"],u=e.Deferred().fail(function(e){e&&n.error(e)});if(!(this.enabled()&&s&&i.length&&-1!==e.inArray(l,i)))return u.reject();if(!d.write)return u.reject(c);for(a=0;s>a;a++)if(!o[a].read)return u.reject(c);return n.request({data:{cmd:"archive",targets:this.hashes(t),type:l},notify:{type:"archive",cnt:1},syncOnFail:!0})}},elFinder.prototype.commands.back=function(){this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+left backspace"}],this.getstate=function(){return this.fm.history.canBack()?0:-1},this.exec=function(){return this.fm.history.back()}},elFinder.prototype.commands.copy=function(){this.shortcuts=[{pattern:"ctrl+c ctrl+insert"}],this.getstate=function(t){var t=this.files(t),n=t.length;return n&&e.map(t,function(e){return e.phash&&e.read?e:null}).length==n?0:-1},this.exec=function(t){var n=this.fm,i=e.Deferred().fail(function(e){n.error(e)});return e.each(this.files(t),function(e,t){return t.read&&t.phash?void 0:!i.reject(["errCopy",t.name,"errPerm"])}),"rejected"==i.state()?i:i.resolve(n.clipboard(this.hashes(t)))}},elFinder.prototype.commands.cut=function(){this.shortcuts=[{pattern:"ctrl+x shift+insert"}],this.getstate=function(t){var t=this.files(t),n=t.length;return n&&e.map(t,function(e){return e.phash&&e.read&&!e.locked?e:null}).length==n?0:-1},this.exec=function(t){var n=this.fm,i=e.Deferred().fail(function(e){n.error(e)});return e.each(this.files(t),function(e,t){return t.read&&t.phash?t.locked?!i.reject(["errLocked",t.name]):void 0:!i.reject(["errCopy",t.name,"errPerm"])}),"rejected"==i.state()?i:i.resolve(n.clipboard(this.hashes(t),!0))}},elFinder.prototype.commands.download=function(){var t=this,n=this.fm,i=function(n){return e.map(t.files(n),function(e){return"directory"==e.mime?null:e})};this.shortcuts=[{pattern:"shift+enter"}],this.getstate=function(){var e=this.fm.selected(),t=e.length;return this._disabled||!t||(n.UA.IE||n.UA.Mobile)&&1!=t||t!=i(e).length?-1:0},this.exec=function(t){var n,r,a=this.fm,o=a.options.url,s=i(t),l=e.Deferred(),d="",c="";if(this.disabled())return l.reject();if(a.oldAPI)return a.error("errCmdNoSupport"),l.reject();c=e.param(a.options.customData||{}),c&&(c="&"+c),o+=-1===o.indexOf("?")?"?":"&";var r;for(n=0;n ';return e(d).appendTo("body").attr("src",this.attr("src")).ready(function(){setTimeout(function(){e(d).each(function(){e("#"+e(this).attr("id")).remove()})},a.UA.Firefox?2e4+1e4*n:1e3)}),a.trigger("download",{files:s}),l.resolve(t)}},elFinder.prototype.commands.duplicate=function(){var t=this.fm;this.getstate=function(n){var n=this.files(n),i=n.length;return!this._disabled&&i&&t.cwd().write&&e.map(n,function(e){return e.phash&&e.read?e:null}).length==i?0:-1},this.exec=function(t){var n=this.fm,i=this.files(t),r=i.length,a=e.Deferred().fail(function(e){e&&n.error(e)});return!r||this._disabled?a.reject():(e.each(i,function(e,t){return t.read&&n.file(t.phash).write?void 0:!a.reject(["errCopy",t.name,"errPerm"])}),"rejected"==a.state()?a:n.request({data:{cmd:"duplicate",targets:this.hashes(t)},notify:{type:"copy",cnt:r}}))}},elFinder.prototype.commands.edit=function(){var t=this,n=this.fm,i=n.res("mimes","text")||[],r=function(n){return e.map(n,function(n){return 0!==n.mime.indexOf("text/")&&-1===e.inArray(n.mime,i)||!n.mime.indexOf("text/rtf")||t.onlyMimes.length&&-1===e.inArray(n.mime,t.onlyMimes)||!n.read||!n.write?null:n})},a=function(i,r,a){var o=e.Deferred(),s=e('"),l=function(){s.editor&&s.editor.save(s[0],s.editor.instance),o.resolve(s.getContent()),s.elfinderdialog("close")},d=function(){o.reject(),s.elfinderdialog("close")},c={title:r.name,width:t.options.dialogWidth||450,buttons:{},close:function(){s.editor&&s.editor.close(s[0],s.editor.instance),e(this).elfinderdialog("destroy")},open:function(){n.disable(),s.focus(),s[0].setSelectionRange&&s[0].setSelectionRange(0,0),s.editor&&s.editor.load(s[0])}};return s.getContent=function(){return s.val()},e.each(t.options.editors||[],function(t,n){return-1!==e.inArray(r.mime,n.mimes||[])&&"function"==typeof n.load&&"function"==typeof n.save?(s.editor={load:n.load,save:n.save,close:"function"==typeof n.close?n.close:function(){},instance:null},!1):void 0}),s.editor||s.keydown(function(e){var t,n,i=e.keyCode;e.stopPropagation(),9==i&&(e.preventDefault(),this.setSelectionRange&&(t=this.value,n=this.selectionStart,this.value=t.substr(0,n)+" "+t.substr(this.selectionEnd),n+=1,this.setSelectionRange(n,n))),(e.ctrlKey||e.metaKey)&&((81==i||87==i)&&(e.preventDefault(),d()),83==i&&(e.preventDefault(),l()))}),c.buttons[n.i18n("Save")]=l,c.buttons[n.i18n("Cancel")]=d,n.dialog(s,c).attr("id",i),o.promise()},o=function(i,r){var s,l=i.hash,d=(n.options,e.Deferred()),c="edit-"+n.namespace+"-"+i.hash,u=n.getUI().find("#"+c),p=r?1:0;return u.length?(u.elfinderdialog("toTop"),d.resolve()):i.read&&i.write?(n.request({data:{cmd:"get",target:l,conv:p},notify:{type:"openfile",cnt:1},syncOnFail:!0}).done(function(e){e.doconv?n.confirm({title:t.title,text:"confirmConvUTF8",accept:{label:"btnConv",callback:function(){d=o(i,1)}},cancel:{label:"btnCancel",callback:function(){d.reject()}}}):a(c,i,e.content).done(function(e){n.request({options:{type:"post"},data:{cmd:"put",target:l,content:e},notify:{type:"save",cnt:1},syncOnFail:!0}).fail(function(e){d.reject(e)}).done(function(e){e.changed&&e.changed.length&&n.change(e),d.resolve(e)})})}).fail(function(e){d.reject(e)}),d.promise()):(s=["errOpen",i.name,"errPerm"],n.error(s),d.reject(s))};this.shortcuts=[{pattern:"ctrl+e"}],this.init=function(){this.onlyMimes=this.options.mimes||[]},this.getstate=function(e){var e=this.files(e),t=e.length;return!this._disabled&&t&&r(e).length==t?0:-1},this.exec=function(t){var n,i=r(this.files(t)),a=[];if(this.disabled())return e.Deferred().reject();for(;n=i.shift();)a.push(o(n));return a.length?e.when.apply(null,a):e.Deferred().reject()}},elFinder.prototype.commands.extract=function(){var t=this,n=t.fm,i=[],r=function(t){return e.map(t,function(t){return t.read&&-1!==e.inArray(t.mime,i)?t:null})};this.disableOnSearch=!0,n.bind("open reload",function(){i=n.option("archivers").extract||[],t.change()}),this.getstate=function(e){var e=this.files(e),t=e.length;return!this._disabled&&t&&this.fm.cwd().write&&r(e).length==t?0:-1},this.exec=function(t){var r,a,o,s=this.files(t),l=e.Deferred(),d=s.length,c=!1,u=!1,p=e.map(n.files(t),function(e){return e.name}),h={};e.map(n.files(t),function(e){h[e.name]=e});var f=function(e){switch(e){case"overwrite_all":c=!0;break;case"omit_all":u=!0}},m=function(t){t.read&&n.file(t.phash).write?-1===e.inArray(t.mime,i)?(a=["errExtract",t.name,"errNoArchive"],n.error(a),l.reject(a)):n.request({data:{cmd:"extract",target:t.hash},notify:{type:"extract",cnt:1},syncOnFail:!0}).fail(function(e){"rejected"!=l.state()&&l.reject(e)}).done(function(){}):(a=["errExtract",t.name,"errPerm"],n.error(a),l.reject(a))},g=function(t,i){var a=t[i],s=a.name.replace(/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/gi,""),v=e.inArray(s,p)>=0;v&&"directory"!=h[s].mime?n.confirm({title:n.i18n("ntfextract"),text:n.i18n(["errExists",s,"confirmRepl"]),accept:{label:"btnYes",callback:function(e){if(o=e?"overwrite_all":"overwrite",f(o),c||u){if(c){for(r=0;d>r;r++)m(t[r]);l.resolve()}}else"overwrite"==o&&m(a),d>i+1?g(t,i+1):l.resolve()}},reject:{label:"btnNo",callback:function(e){o=e?"omit_all":"omit",f(o),!c&&!u&&d>i+1?g(t,i+1):u&&l.resolve()}},cancel:{label:"btnCancel",callback:function(){l.resolve()}},all:d>1}):(m(a),d>i+1?g(t,i+1):l.resolve())};return this.enabled()&&d&&i.length?(d>0&&g(s,0),l):l.reject()}},elFinder.prototype.commands.forward=function(){this.alwaysEnabled=!0,this.updateOnSelect=!0,this.shortcuts=[{pattern:"ctrl+right"}],this.getstate=function(){return this.fm.history.canForward()?0:-1},this.exec=function(){return this.fm.history.forward()}},elFinder.prototype.commands.getfile=function(){var t=this,n=this.fm,i=function(n){var i=t.options;return n=e.map(n,function(e){return"directory"!=e.mime||i.folders?e:null}),i.multiple||1==n.length?n:[]};this.alwaysEnabled=!0,this.callback=n.options.getFileCallback,this._disabled="function"==typeof this.callback,this.getstate=function(e){var e=this.files(e),t=e.length;return this.callback&&t&&i(e).length==t?0:-1},this.exec=function(n){var i,r,a,o=this.fm,s=this.options,l=this.files(n),d=l.length,c=o.option("url"),u=o.option("tmbUrl"),p=e.Deferred().done(function(e){o.trigger("getfile",{files:e}),t.callback(e,o),"close"==s.oncomplete?o.hide():"destroy"==s.oncomplete&&o.destroy()}),h=function(){return s.onlyURL?s.multiple?e.map(l,function(e){return e.url}):l[0].url:s.multiple?l:l[0]},f=[];if(-1==this.getstate())return p.reject();for(i=0;d>i;i++){if(r=l[i],"directory"==r.mime&&!s.folders)return p.reject();r.baseUrl=c,"1"==r.url?f.push(o.request({data:{cmd:"url",target:r.hash},notify:{type:"url",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){if(e.url){var t=o.file(this.hash);t.url=this.url=e.url}}.bind(r))):r.url=o.url(r.hash),r.path=o.path(r.hash),r.tmb&&1!=r.tmb&&(r.tmb=u+r.tmb),r.width||r.height||(r.dim?(a=r.dim.split("x"),r.width=a[0],r.height=a[1]):-1!==r.mime.indexOf("image")&&f.push(o.request({data:{cmd:"dim",target:r.hash},notify:{type:"dim",cnt:1,hideCnt:!0},preventDefault:!0}).done(function(e){if(e.dim){var t=e.dim.split("x"),n=o.file(this.hash);n.width=this.width=t[0],n.height=this.height=t[1]}}.bind(r))))}return f.length?(e.when.apply(null,f).always(function(){p.resolve(h(l))}),p):p.resolve(h(l))}},elFinder.prototype.commands.help=function(){var t,n=this.fm,i=this,r='',a='',o=/\{url\}/,s=/\{link\}/,l=/\{author\}/,d=/\{work\}/,c="replace",u="ui-priority-primary",p="ui-priority-secondary",h="elfinder-help-license",f='{title} ',m=['','"),-1!==e.inArray("about",r)&&b(),-1!==e.inArray("shortcuts",r)&&y(),-1!==e.inArray("help",r)&&w(),m.push("
"),t=e(m.join("")),n.one("load",function(){t.find("#apiver").text(n.api)}),t.find(".ui-tabs-nav li").hover(function(){e(this).toggleClass("ui-state-hover")}).children().click(function(n){var i=e(this);n.preventDefault(),n.stopPropagation(),i.is(".ui-tabs-selected")||(i.parent().addClass("ui-tabs-selected ui-state-active").siblings().removeClass("ui-tabs-selected").removeClass("ui-state-active"),t.find(".ui-tabs-panel").hide().filter(i.attr("href")).show())}).filter(":first").click()},200),this.getstate=function(){return 0},this.exec=function(){this.dialog||(this.dialog=this.fm.dialog(t,{title:this.title,width:530,autoOpen:!1,destroyOnClose:!1})),this.dialog.elfinderdialog("open").find(".ui-tabs-nav li a:first").click()}},elFinder.prototype.commands.home=function(){this.title="Home",this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+home ctrl+shift+up",description:"Home"}],this.getstate=function(){var e=this.fm.root(),t=this.fm.cwd().hash;return e&&t&&e!=t?0:-1},this.exec=function(){return this.fm.exec("open",this.fm.root())}},elFinder.prototype.commands.info=function(){var t=this.fm,n="elfinder-info-spinner",i={calc:t.i18n("calc"),size:t.i18n("size"),unknown:t.i18n("unknown"),path:t.i18n("path"),aliasfor:t.i18n("aliasfor"),modify:t.i18n("modify"),perms:t.i18n("perms"),locked:t.i18n("locked"),dim:t.i18n("dim"),kind:t.i18n("kind"),files:t.i18n("files"),folders:t.i18n("folders"),items:t.i18n("items"),yes:t.i18n("yes"),no:t.i18n("no"),link:t.i18n("link")};this.tpl={main:' {title}
',itemTitle:'{name} {kind} ',groupTitle:"{items}: {num} ",row:"{label} : {value} ",spinner:'{text} '},this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+i"}],this.init=function(){e.each(i,function(e,n){i[e]=t.i18n(n)})},this.getstate=function(){return 0},this.exec=function(t){var r=this.files(t);r.length||(r=this.files([this.fm.cwd().hash]));var a,o,s,l,d,c=this.fm,u=this.options,p=this.tpl,h=p.row,f=r.length,m=[],g=p.main,v="{label}",b="{value}",y={title:this.title,width:"auto",close:function(){e(this).elfinderdialog("destroy")}},w=[],x=function(e,t){C.find("."+n+"-"+t).parent().html(e)},k=c.namespace+"-info-"+e.map(r,function(e){return e.hash}).join("-"),C=c.getUI().find("#"+k);if(!f)return e.Deferred().reject();if(C.length)return C.elfinderdialog("toTop"),e.Deferred().resolve();if(1==f){if(s=r[0],g=g.replace("{class}",c.mime2class(s.mime)),l=p.itemTitle.replace("{name}",c.escape(s.i18||s.name)).replace("{kind}",c.mime2kind(s)),s.tmb&&(o=c.option("tmbUrl")+s.tmb),s.read?"directory"!=s.mime||s.alias?a=c.formatSize(s.size):(a=p.spinner.replace("{text}",i.calc).replace("{name}","size"),w.push(s.hash)):a=i.unknown,m.push(h.replace(v,i.size).replace(b,a)),s.alias&&m.push(h.replace(v,i.aliasfor).replace(b,s.alias)),m.push(h.replace(v,i.path).replace(b,c.escape(c.path(s.hash,!0)))),s.read){var F;if("1"==s.url)m.push(h.replace(v,i.link).replace(b,p.spinner.replace("{text}",i.modify).replace("{name}","url"))),c.request({data:{cmd:"url",target:s.hash},preventDefault:!0}).fail(function(){x(s.name,"url")}).done(function(e){if(x(''+s.name+" "||s.name,"url"),e.url){var t=c.file(s.hash);t.url=e.url}});else{if(u.nullUrlDirLinkSelf&&"directory"==s.mime&&null===s.url){var T=window.location;F=T.pathname+T.search+"#elf_"+s.hash}else F=c.url(s.hash);m.push(h.replace(v,i.link).replace(b,''+s.name+" "))}}s.dim?m.push(h.replace(v,i.dim).replace(b,s.dim)):-1!==s.mime.indexOf("image")&&(s.width&&s.height?m.push(h.replace(v,i.dim).replace(b,s.width+"x"+s.height)):(m.push(h.replace(v,i.dim).replace(b,p.spinner.replace("{text}",i.calc).replace("{name}","dim"))),c.request({data:{cmd:"dim",target:s.hash},preventDefault:!0}).fail(function(){x(i.unknown,"dim")}).done(function(e){if(x(e.dim||i.unknown,"dim"),e.dim){var t=e.dim.split("x"),n=c.file(s.hash);n.width=t[0],n.height=t[1]}}))),m.push(h.replace(v,i.modify).replace(b,c.formatDate(s))),m.push(h.replace(v,i.perms).replace(b,c.formatPermissions(s))),m.push(h.replace(v,i.locked).replace(b,s.locked?i.yes:i.no))}else g=g.replace("{class}","elfinder-cwd-icon-group"),l=p.groupTitle.replace("{items}",i.items).replace("{num}",f),d=e.map(r,function(e){return"directory"==e.mime?1:null}).length,d?(m.push(h.replace(v,i.kind).replace(b,d==f?i.folders:i.folders+" "+d+", "+i.files+" "+(f-d))),m.push(h.replace(v,i.size).replace(b,p.spinner.replace("{text}",i.calc).replace("{name}","size"))),w=e.map(r,function(e){return e.hash})):(a=0,e.each(r,function(e,t){var n=parseInt(t.size);n>=0&&a>=0?a+=n:a="unknown"}),m.push(h.replace(v,i.kind).replace(b,i.files)),m.push(h.replace(v,i.size).replace(b,c.formatSize(a))));g=g.replace("{title}",l).replace("{content}",m.join("")),C=c.dialog(g,y),C.attr("id",k),o&&e(" ").load(function(){C.find(".elfinder-cwd-icon").css("background",'url("'+o+'") center center no-repeat')}).attr("src",o),w.length&&c.request({data:{cmd:"size",targets:w},preventDefault:!0}).fail(function(){x(i.unknown,"size")}).done(function(e){var t=parseInt(e.size);x(t>=0?c.formatSize(t):i.unknown,"size")})}},elFinder.prototype.commands.mkdir=function(){this.disableOnSearch=!0,this.updateOnSelect=!1,this.mime="directory",this.prefix="untitled folder",this.exec=e.proxy(this.fm.res("mixin","make"),this),this.shortcuts=[{pattern:"ctrl+shift+n"}],this.getstate=function(){return!this._disabled&&this.fm.cwd().write?0:-1}},elFinder.prototype.commands.mkfile=function(){this.disableOnSearch=!0,this.updateOnSelect=!1,this.mime="text/plain",this.prefix="untitled file.txt",this.exec=e.proxy(this.fm.res("mixin","make"),this),this.getstate=function(){return!this._disabled&&this.fm.cwd().write?0:-1}},elFinder.prototype.commands.netmount=function(){var t=this;this.alwaysEnabled=!0,this.updateOnSelect=!1,this.drivers=[],this.handlers={load:function(){this.drivers=this.fm.netDrivers}},this.getstate=function(){return this.drivers.length?0:-1},this.exec=function(){var n=t.fm,i=e.Deferred(),r=t.options,a=function(){var a={protocol:e(" ").change(function(){var e=this.value;s.find(".elfinder-netmount-tr").hide(),s.find(".elfinder-netmount-tr-"+e).show(),"function"==typeof r[e].select&&r[e].select(n)})},o={title:n.i18n("netMountDialogTitle"),resizable:!1,modal:!0,destroyOnClose:!0,close:function(){delete t.dialog,"pending"==i.state()&&i.reject()},buttons:{}},s=e(''),l=e("
");return s.append(e(" ").append(e(""+n.i18n("protocol")+" ")).append(e(" ").append(a.protocol))),e.each(t.drivers,function(t,i){a.protocol.append(''+n.i18n(i)+" "),e.each(r[i].inputs,function(t,r){r.attr("name",t),"hidden"!=r.attr("type")?(r.addClass("ui-corner-all elfinder-netmount-inputs-"+i),s.append(e(" ").addClass("elfinder-netmount-tr elfinder-netmount-tr-"+i).append(e(""+n.i18n(t)+" ")).append(e(" ").append(r)))):(r.addClass("elfinder-netmount-inputs-"+i),l.append(r))})}),s.append(l),s.find(".elfinder-netmount-tr").hide(),o.buttons[n.i18n("btnMount")]=function(){var n=a.protocol.val(),r={cmd:"netmount",protocol:n};return e.each(s.find("input.elfinder-netmount-inputs-"+n),function(t,n){var i;i="function"==typeof n.val?e.trim(n.val()):e.trim(n.value),i&&(r[n.name]=i)}),r.host?(t.fm.request({data:r,notify:{type:"netmount",cnt:1,hideCnt:!0}}).done(function(){i.resolve()}).fail(function(e){i.reject(e)}),t.dialog.elfinderdialog("close"),void 0):t.fm.trigger("error",{error:"errNetMountHostReq"})},o.buttons[n.i18n("btnCancel")]=function(){t.dialog.elfinderdialog("close")},n.dialog(s,o).ready(function(){a.protocol.change()})};return n.bind("netmount",function(e){var t=e.data||null;t&&t.protocol&&r[t.protocol]&&"function"==typeof r[t.protocol].done&&r[t.protocol].done(n,t)}),t.dialog||(t.dialog=a()),i.promise()}},elFinder.prototype.commands.netunmount=function(){this.alwaysEnabled=!0,this.updateOnSelect=!1,this.drivers=[],this.handlers={load:function(){this.drivers=this.fm.netDrivers}},this.getstate=function(e){var t=this.fm;return e&&this.drivers.length&&!this._disabled&&t.file(e[0]).netkey?0:-1},this.exec=function(t){var n=this,i=this.fm,r=e.Deferred().fail(function(e){e&&i.error(e)}),a=i.file(t[0]);return this._disabled?r.reject():("pending"==r.state()&&i.confirm({title:n.title,text:i.i18n("confirmUnmount",a.name),accept:{label:"btnUnmount",callback:function(){i.request({data:{cmd:"netmount",protocol:"netunmount",host:a.netkey,user:a.hash,pass:"dum"},notify:{type:"netunmount",cnt:1,hideCnt:!0},preventFail:!0}).fail(function(e){r.reject(e)}).done(function(e){var t=i.root()==a.hash;if(e.removed=[a.hash],i.remove(e),t){var n=i.files();for(var o in n)if("directory"==i.file(o).mime){i.exec("open",o);break}}r.resolve()})}},cancel:{label:"btnCancel",callback:function(){r.reject()}}}),r)}},elFinder.prototype.commands.open=function(){this.alwaysEnabled=!0,this._handlers={dblclick:function(e){e.preventDefault(),this.exec()},"select enable disable reload":function(e){this.update("disable"==e.type?-1:void 0)}},this.shortcuts=[{pattern:"ctrl+down numpad_enter"+("mac"!=this.fm.OS&&" enter")}],this.getstate=function(t){var t=this.files(t),n=t.length;return 1==n?0:n&&!this.fm.UA.Mobile?e.map(t,function(e){return"directory"==e.mime?null:e}).length==n?0:-1:-1},this.exec=function(t){var n,i,r,a,o,s,l,d,c=this.fm,u=e.Deferred().fail(function(e){e&&c.error(e)}),p=this.files(t),h=p.length;if(!h)return u.reject();if(1==h&&(n=p[0])&&"directory"==n.mime)return n&&!n.read?u.reject(["errOpen",n.name,"errPerm"]):c.request({data:{cmd:"open",target:n.thash||n.hash},notify:{type:"open",cnt:1,hideCnt:!0},syncOnFail:!0});if(p=e.map(p,function(e){return"directory"!=e.mime?e:null}),h!=p.length)return u.reject();for(h=p.length;h--;){if(n=p[h],!n.read)return u.reject(["errOpen",n.name,"errPerm"]);if(c.UA.Mobile){(i=c.url(n.hash))||(i=c.options.url,i=i+(-1===i.indexOf("?")?"?":"&")+(c.oldAPI?"cmd=open¤t="+n.phash:"cmd=file")+"&target="+n.hash);var f=window.open(i);if(!f)return u.reject("errPopup")}else{o=l=Math.round(2*e(window).width()/3),s=d=Math.round(2*e(window).height()/3),parseInt(n.width)&&parseInt(n.height)?(o=parseInt(n.width),s=parseInt(n.height)):n.dim&&(r=n.dim.split("x"),o=parseInt(r[0]),s=parseInt(r[1])),l>=o&&d>=s?(l=o,d=s):o-l>s-d?d=Math.round(s*(l/o)):l=Math.round(o*(d/s)),a="width="+l+",height="+d;var f=window.open("","new_window",a+",top=50,left=50,scrollbars=yes,resizable=yes");if(!f)return u.reject("errPopup");var m=document.createElement("form");m.action=c.options.url,m.method="POST",m.target="new_window",m.style.display="none";var g=e.extend({},c.options.customData,{cmd:"file",target:n.hash});e.each(g,function(e,t){var n=document.createElement("input");n.name=e,n.value=t,m.appendChild(n)}),document.body.appendChild(m),m.submit()}}return u.resolve(t)}},elFinder.prototype.commands.paste=function(){this.updateOnSelect=!1,this.handlers={changeclipboard:function(){this.update()}},this.shortcuts=[{pattern:"ctrl+v shift+insert"}],this.getstate=function(t){if(this._disabled)return-1;if(t){if(e.isArray(t)){if(1!=t.length)return-1;t=this.fm.file(t[0])}}else t=this.fm.cwd();return this.fm.clipboard().length&&"directory"==t.mime&&t.write?0:-1},this.exec=function(t){var n,i,r=this,a=r.fm,t=t?this.files(t)[0]:a.cwd(),o=a.clipboard(),s=o.length,l=s?o[0].cut:!1,d=l?"errMove":"errCopy",c=[],u=[],p=e.Deferred().fail(function(e){e&&a.error(e)}),h=function(t){return t.length&&a._commands.duplicate?a.exec("duplicate",t):e.Deferred().resolve()},f=function(n){var i=e.Deferred(),o=[],s=function(t,n){for(var i=[],r=t.length;r--;)-1!==e.inArray(t[r].name,n)&&i.unshift(r);return i},d=function(e){var t=o[e],r=n[t],s=e==o.length-1;r&&a.confirm({title:a.i18n(l?"moveFiles":"copyFiles"),text:a.i18n(["errExists",r.name,"confirmRepl"]),all:!s,accept:{label:"btnYes",callback:function(t){s||t?u(n):d(++e)}},reject:{label:"btnNo",callback:function(t){var i;if(t)for(i=o.length;e '),b=e("
"),y=e('
'),w=e('
').mousedown(function(t){var n=a.window,r=n.is("."+p),s="scroll."+o.namespace,l=e(window);t.stopPropagation(),r?(n.css(n.data("position")).unbind("mousemove"),l.unbind(s).trigger(a.resize).unbind(a.resize),x.unbind("mouseenter").unbind("mousemove")):(n.data("position",{left:n.css("left"),top:n.css("top"),width:n.width(),height:n.height()}).css({width:"100%",height:"100%"}),e(window).bind(s,function(){n.css({left:parseInt(e(window).scrollLeft())+"px",top:parseInt(e(window).scrollTop())+"px"})}).bind(a.resize,function(){a.preview.trigger("changesize")}).trigger(s).trigger(a.resize),n.bind("mousemove",function(){x.stop(!0,!0).show().delay(3e3).fadeOut("slow")}).mousemove(),x.mouseenter(function(){x.stop(!0,!0).show()}).mousemove(function(e){e.stopPropagation()})),x.attr("style","").draggable(r?"destroy":{}),n.toggleClass(p),e(this).toggleClass(u+"-fullscreen-off"),e.fn.resizable&&i.add(n).resizable(r?"enable":"disable").removeClass("ui-state-disabled")}),x=e('
').append(e('
').mousedown(function(){h(37)})).append(w).append(e('
').mousedown(function(){h(39)})).append('
').append(e('
').mousedown(function(){a.window.trigger("close")}));this.resize="resize."+o.namespace,this.info=e('
').append(b).append(y),this.preview=e('
').bind("change",function(){a.info.attr("style","").hide(),b.removeAttr("class").attr("style",""),y.html("")}).bind("update",function(t){var n,i=a.fm,r=(a.preview,t.file),o='{value}
';r?(!r.read&&t.stopImmediatePropagation(),a.window.data("hash",r.hash),a.preview.unbind("changesize").trigger("change").children().remove(),v.html(i.escape(r.name)),y.html(o.replace(/\{value\}/,r.name)+o.replace(/\{value\}/,i.mime2kind(r))+("directory"==r.mime?"":o.replace(/\{value\}/,i.formatSize(r.size)))+o.replace(/\{value\}/,i.i18n("modify")+": "+i.formatDate(r))),b.addClass("elfinder-cwd-icon ui-corner-all "+i.mime2class(r.mime)),r.tmb&&e(" ").hide().appendTo(a.preview).load(function(){b.css("background",'url("'+n+'") center center no-repeat'),e(this).remove()}).attr("src",n=i.tmb(r.hash)),a.info.delay(100).fadeIn(10)):t.stopImmediatePropagation()}),this.window=e('
').click(function(e){e.stopPropagation()}).append(e('
').append(v).append(e(' ').mousedown(function(e){e.stopPropagation(),a.window.trigger("close")}))).append(this.preview.add(x)).append(a.info.hide()).draggable({handle:"div.elfinder-quicklook-titlebar"}).bind("open",function(){var e,t=a.window,n=a.value;a.closed()&&n&&(e=r.find("#"+n.hash)).length&&(x.attr("style",""),c=l,e.trigger("scrolltoview"),t.css(f(e)).show().animate(m(),550,function(){c=d,a.update(1,a.value)}))}).bind("close",function(){var e=a.window,t=a.preview.trigger("change"),n=(a.value,r.find("#"+e.data("hash"))),i=function(){c=s,e.hide(),t.children().remove(),a.update(0,a.value)};a.opened()&&(c=l,e.is("."+p)&&w.mousedown(),n.length?e.animate(f(n),500,i):i())}),this.alwaysEnabled=!0,this.value=null,this.handlers={select:function(){this.update(void 0,this.fm.selectedFiles()[0])},error:function(){a.window.is(":visible")&&a.window.data("hash","").trigger("close")},"searchshow searchhide":function(){this.opened()&&this.window.trigger("close")}},this.shortcuts=[{pattern:"space"}],this.support={audio:{ogg:g('audio/ogg; codecs="vorbis"'),mp3:g("audio/mpeg;"),wav:g('audio/wav; codecs="1"'),m4a:g("audio/x-m4a;")||g("audio/aac;")},video:{ogg:g('video/ogg; codecs="theora"'),webm:g('video/webm; codecs="vp8, vorbis"'),mp4:g('video/mp4; codecs="avc1.42E01E"')||g('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')}},this.closed=function(){return c==s},this.opened=function(){return c==d},this.init=function(){var s=this.options,l=this.window,d=this.preview;t=s.width>0?parseInt(s.width):450,n=s.height>0?parseInt(s.height):300,o.one("load",function(){i=o.getUI(),r=o.getUI("cwd"),l.appendTo("body").zIndex(100+i.zIndex()),e(document).keydown(function(e){27==e.keyCode&&a.opened()&&l.trigger("close")}),e.fn.resizable&&!o.UA.Touch&&l.resizable({handles:"se",minWidth:350,minHeight:120,resize:function(){d.trigger("changesize")}}),a.change(function(){a.opened()&&(a.value?d.trigger(e.Event("update",{file:a.value})):l.trigger("close"))}),e.each(o.commands.quicklook.plugins||[],function(e,t){"function"==typeof t&&new t(a)}),d.bind("update",function(){a.info.show()})})},this.getstate=function(){return 1==this.fm.selected().length?c==d?1:0:-1},this.exec=function(){this.enabled()&&this.window.trigger(this.opened()?"close":"open")},this.hideinfo=function(){this.info.stop(!0).hide()}},elFinder.prototype.commands.quicklook.plugins=[function(t){var n=["image/jpeg","image/png","image/gif"],i=t.preview;e.each(navigator.mimeTypes,function(t,i){var r=i.type;0===r.indexOf("image/")&&e.inArray(r,n)&&n.push(r)}),i.bind("update",function(r){var a,o=r.file;-1!==e.inArray(o.mime,n)&&(r.stopImmediatePropagation(),a=e(" ").hide().appendTo(i).load(function(){setTimeout(function(){var e=(a.width()/a.height()).toFixed(2);i.bind("changesize",function(){var t,n,r=parseInt(i.width()),o=parseInt(i.height());e<(r/o).toFixed(2)?(n=o,t=Math.floor(n*e)):(t=r,n=Math.floor(t/e)),a.width(t).height(n).css("margin-top",o>n?Math.floor((o-n)/2):0)}).trigger("changesize"),t.hideinfo(),a.fadeIn(100)},1)}).attr("src",t.fm.url(o.hash)))})},function(t){var n=["text/html","application/xhtml+xml"],i=t.preview,r=t.fm;i.bind("update",function(a){var o,s=a.file;-1!==e.inArray(s.mime,n)&&(a.stopImmediatePropagation(),i.one("change",function(){"pending"==o.state()&&o.reject()}),o=r.request({data:{cmd:"get",target:s.hash,current:s.phash,conv:1},preventDefault:!0}).done(function(n){t.hideinfo(),doc=e('').appendTo(i)[0].contentWindow.document,doc.open(),doc.write(n.content),doc.close()}))})},function(t){var n=t.fm,i=n.res("mimes","text"),r=t.preview;r.bind("update",function(a){var o,s=a.file,l=s.mime;(0===l.indexOf("text/")||-1!==e.inArray(l,i))&&(a.stopImmediatePropagation(),r.one("change",function(){"pending"==o.state()&&o.reject()}),o=n.request({data:{cmd:"get",target:s.hash,conv:1},preventDefault:!0}).done(function(i){t.hideinfo(),e('").appendTo(r)}))})},function(t){var n=t.fm,i="application/pdf",r=t.preview,a=!1;n.UA.Safari&&"mac"==n.OS||n.UA.IE?a=!0:e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){return t.type==i?!(a=!0):void 0})}),a&&r.bind("update",function(a){var o,s=a.file;s.mime==i&&(a.stopImmediatePropagation(),r.one("change",function(){o.unbind("load").remove()}),o=e('').hide().appendTo(r).load(function(){t.hideinfo(),o.show()}).attr("src",n.url(s.hash)))})},function(t){var n=t.fm,i="application/x-shockwave-flash",r=t.preview,a=!1;e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){return t.type==i?!(a=!0):void 0})}),a&&r.bind("update",function(a){var o,s=a.file;s.mime==i&&(a.stopImmediatePropagation(),t.hideinfo(),r.append(o=e(' ')))})},function(t){var n,i=t.preview,r=!!t.options.autoplay,a={"audio/mpeg":"mp3","audio/mpeg3":"mp3","audio/mp3":"mp3","audio/x-mpeg3":"mp3","audio/x-mp3":"mp3","audio/x-wav":"wav","audio/wav":"wav","audio/x-m4a":"m4a","audio/aac":"m4a","audio/mp4":"m4a","audio/x-mp4":"m4a","audio/ogg":"ogg"};i.bind("update",function(o){var s=o.file,l=a[s.mime];t.support.audio[l]&&(o.stopImmediatePropagation(),n=e(' ').appendTo(i),r&&n[0].play())}).bind("change",function(){n&&n.parent().length&&(n[0].pause(),n.remove(),n=null)})},function(t){var n,i=t.preview,r=!!t.options.autoplay,a={"video/mp4":"mp4","video/x-m4v":"mp4","video/ogg":"ogg","application/ogg":"ogg","video/webm":"webm"};i.bind("update",function(o){var s=o.file,l=a[s.mime];t.support.video[l]&&(o.stopImmediatePropagation(),t.hideinfo(),n=e(' ').appendTo(i),r&&n[0].play())}).bind("change",function(){n&&n.parent().length&&(n[0].pause(),n.remove(),n=null)})},function(t){var n,i=t.preview,r=[];e.each(navigator.plugins,function(t,n){e.each(n,function(e,t){(0===t.type.indexOf("audio/")||0===t.type.indexOf("video/"))&&r.push(t.type)})}),i.bind("update",function(a){var o,s=a.file,l=s.mime;-1!==e.inArray(s.mime,r)&&(a.stopImmediatePropagation(),(o=0===l.indexOf("video/"))&&t.hideinfo(),n=e(' ').appendTo(i))}).bind("change",function(){n&&n.parent().length&&(n.remove(),n=null)})}],elFinder.prototype.commands.reload=function(){this.alwaysEnabled=!0,this.updateOnSelect=!0,this.shortcuts=[{pattern:"ctrl+shift+r f5"}],this.getstate=function(){return 0},this.exec=function(){var e=this.fm,t=e.sync(),n=setTimeout(function(){e.notify({type:"reload",cnt:1,hideCnt:!0}),t.always(function(){e.notify({type:"reload",cnt:-1})})},e.notifyDelay);return t.always(function(){clearTimeout(n),e.trigger("reload")})}},elFinder.prototype.commands.rename=function(){this.shortcuts=[{pattern:"f2"+("mac"==this.fm.OS?" enter":"")}],this.getstate=function(){var e=this.fm.selectedFiles();return this._disabled||1!=e.length||!e[0].phash||e[0].locked?-1:0},this.exec=function(){var t=this.fm,n=t.getUI("cwd"),i=t.selected(),r=i.length,a=t.file(i.shift()),o=".elfinder-cwd-filename",s=e.Deferred().fail(function(e){var i=l.parent(),r=t.escape(a.name);i.length?(l.remove(),i.html(r)):(n.find("#"+a.hash).find(o).html(r),setTimeout(function(){n.find("#"+a.hash).click()},50)),e&&t.error(e)}).always(function(){t.enable()}),l=e(' ').keydown(function(t){t.stopPropagation(),t.stopImmediatePropagation(),t.keyCode==e.ui.keyCode.ESCAPE?s.reject():t.keyCode==e.ui.keyCode.ENTER&&l.blur()}).mousedown(function(e){e.stopPropagation()}).dblclick(function(e){e.stopPropagation(),e.preventDefault()}).blur(function(){var n=e.trim(l.val()),i=l.parent();if(i.length){if(l[0].setSelectionRange&&l[0].setSelectionRange(0,0),n==a.name)return s.reject();if(!n)return s.reject("errInvName");if(t.fileByName(n,a.phash))return s.reject(["errExists",n]);i.html(t.escape(n)),t.lockfiles({files:[a.hash]}),t.request({data:{cmd:"rename",target:a.hash,name:n},notify:{type:"rename",cnt:1}}).fail(function(){s.reject(),t.sync()}).done(function(e){s.resolve(e)}).always(function(){t.unlockfiles({files:[a.hash]})})}}),d=n.find("#"+a.hash).find(o).empty().append(l.val(a.name)),c=l.val().replace(/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/gi,"");return this.disabled()?s.reject():!a||r>1||!d.length?s.reject("errCmdParams",this.title):a.locked?s.reject(["errLocked",a.name]):(t.one("select",function(){l.parent().length&&a&&-1===e.inArray(a.hash,t.selected())&&l.blur()}),l.select().focus(),l[0].setSelectionRange&&l[0].setSelectionRange(0,c.length),s)}},elFinder.prototype.commands.resize=function(){this.updateOnSelect=!1,this.getstate=function(){var e=this.fm.selectedFiles();return!this._disabled&&1==e.length&&e[0].read&&e[0].write&&-1!==e[0].mime.indexOf("image/")?0:-1},this.exec=function(t){var n,i,r=this.fm,a=this.files(t),o=e.Deferred(),s=function(t,n){var i=e('
'),a=' ',s='
',l='
',d=e('
'),c=e('
'),u=e(''+r.i18n("ntfloadimg")+"
"),p=e('
'),h=e('
'),f=e('
'),m=e('
'),g='
',v='
',b=' ',y=e('
'),w=e(v).attr("title",r.i18n("rotate-cw")).append(e(' ').click(function(){V-=90,Q.update(V)})),x=e(v).attr("title",r.i18n("rotate-ccw")).append(e(' ').click(function(){V+=90,Q.update(V)})),k=e(" "),C=e('
'),F=e('
').append(''+r.i18n("resize")+" ").append(''+r.i18n("crop")+" ").append(''+r.i18n("rotate")+" "),T=e("input",F).attr("disabled","disabled").change(function(){var t=e("input:checked",F).val();X(),et(!0),tt(!0),nt(!0),"resize"==t?(f.show(),y.hide(),m.hide(),et()):"crop"==t?(y.hide(),f.hide(),m.show(),tt()):"rotate"==t&&(f.hide(),m.hide(),y.show(),nt())}),z=e(' ').change(function(){H=!!z.prop("checked"),Y.fixHeight(),et(!0),et()}),I=e(a).change(function(){var e=parseInt(I.val()),t=parseInt(H?Math.round(e/U):P.val());e>0&&t>0&&(Y.updateView(e,t),P.val(t))}),P=e(a).change(function(){var e=parseInt(P.val()),t=parseInt(H?Math.round(e*U):I.val());t>0&&e>0&&(Y.updateView(t,e),I.val(t))}),M=e(a).change(function(){Z.updateView()}),D=e(a).change(function(){Z.updateView()}),A=e(a).change(function(){Z.updateView()}),O=e(a).change(function(){Z.updateView()}),S=e(' ').change(function(){Q.update()}),E=e('
').slider({min:0,max:359,value:S.val(),animate:!0,change:function(e,t){t.value!=E.slider("value")&&Q.update(t.value)},slide:function(e,t){Q.update(t.value,!1)}}),U=1,j=1,R=0,q=0,H=!0,L=0,_=0,N=0,W=0,V=0,B=e(" ").load(function(){u.remove(),R=B.width(),q=B.height(),U=R/q,Y.updateView(R,q),p.append(B.show()).show(),I.val(R),P.val(q);var t=Math.min(L,_)/Math.sqrt(Math.pow(R,2)+Math.pow(q,2));N=R*t,W=q*t,T.button("enable"),d.find("input,select").removeAttr("disabled").filter(":text").keydown(function(t){var n,i=t.keyCode;return t.stopPropagation(),i>=37&&40>=i||i==e.ui.keyCode.BACKSPACE||i==e.ui.keyCode.DELETE||65==i&&(t.ctrlKey||t.metaKey)||27==i?void 0:(9==i&&(n=e(this).parent()[t.shiftKey?"prev":"next"](".elfinder-resize-row").children(":text"),n.length?n.focus():e(this).parent().parent().find(":text:"+(t.shiftKey?"last":"first")).focus()),13==i?(r.confirm({title:e("input:checked",F).val(),text:"confirmReq",accept:{label:"btnApply",callback:function(){it()}},cancel:{label:"btnCancel",callback:function(){}}}),void 0):(i>=48&&57>=i||i>=96&&105>=i||t.preventDefault(),void 0))}).filter(":first").focus(),et(),C.hover(function(){C.toggleClass("ui-state-hover")}).click(X)}).error(function(){u.text("Unable to load image").css("background","transparent")}),K=e("
"),$=e(" "),G=e("
"),J=e(" "),X=function(){I.val(R),P.val(q),Y.updateView(R,q)},Y={update:function(){I.val(Math.round(B.width()/j)),P.val(Math.round(B.height()/j))},updateView:function(e,t){e>L||t>_?e/L>t/_?(j=L/e,B.width(L).height(Math.ceil(t*j))):(j=_/t,B.height(_).width(Math.ceil(e*j))):B.width(e).height(t),j=B.width()/e,k.text("1 : "+(1/j).toFixed(2)),Y.updateHandle()},updateHandle:function(){p.width(B.width()).height(B.height())},fixWidth:function(){var e,t;H&&(t=P.val(),t=Math.round(t*U),Y.updateView(e,t),I.val(e))},fixHeight:function(){var e,t;H&&(e=I.val(),t=Math.round(e/U),Y.updateView(e,t),P.val(t))}},Z={update:function(){A.val(Math.round((h.data("w")||h.width())/j)),O.val(Math.round((h.data("h")||h.height())/j)),M.val(Math.round(((h.data("x")||h.offset().left)-$.offset().left)/j)),D.val(Math.round(((h.data("y")||h.offset().top)-$.offset().top)/j))},updateView:function(){var e=parseInt(M.val())*j+$.offset().left,t=parseInt(D.val())*j+$.offset().top,n=A.val()*j,i=O.val()*j;h.data({x:e,y:t,w:n,h:i}),h.width(Math.round(n)),h.height(Math.round(i)),G.width(h.width()),G.height(h.height()),h.offset({left:Math.round(e),top:Math.round(t)})},resize_update:function(){h.data({w:null,h:null}),Z.update(),G.width(h.width()),G.height(h.height())},drag_update:function(){h.data({x:null,y:null}),Z.update()}},Q={mouseStartAngle:0,imageStartAngle:0,imageBeingRotated:!1,update:function(e,t){"undefined"==typeof e&&(V=e=parseInt(S.val())),"undefined"==typeof t&&(t=!0),!t||r.UA.Opera||r.UA.ltIE8?J.rotate(e):J.animate({rotate:e+"deg"}),e%=360,0>e&&(e+=360),S.val(parseInt(e)),E.slider("value",S.val())},execute:function(e){if(Q.imageBeingRotated){var t=Q.getCenter(J),n=e.pageX-t[0],i=e.pageY-t[1],r=Math.atan2(i,n),a=r-Q.mouseStartAngle+Q.imageStartAngle;return a=Math.round(180*parseFloat(a)/Math.PI),e.shiftKey&&(a=15*Math.round((a+6)/15)),J.rotate(a),a%=360,0>a&&(a+=360),S.val(a),E.slider("value",S.val()),!1}},start:function(t){Q.imageBeingRotated=!0;var n=Q.getCenter(J),i=t.pageX-n[0],r=t.pageY-n[1];return Q.mouseStartAngle=Math.atan2(r,i),Q.imageStartAngle=parseFloat(J.rotate())*Math.PI/180,e(document).mousemove(Q.execute),!1},stop:function(){return Q.imageBeingRotated?(e(document).unbind("mousemove",Q.execute),setTimeout(function(){Q.imageBeingRotated=!1},10),!1):void 0},getCenter:function(){var e=J.rotate();J.rotate(0);var t=J.offset(),n=t.left+J.width()/2,i=t.top+J.height()/2;return J.rotate(e),Array(n,i)}},et=function(t){e.fn.resizable&&(t?(p.filter(":ui-resizable").resizable("destroy"),p.hide()):(p.show(),p.resizable({alsoResize:B,aspectRatio:H,resize:Y.update,stop:Y.fixHeight})))},tt=function(t){e.fn.draggable&&e.fn.resizable&&(t?(h.filter(":ui-resizable").resizable("destroy"),h.filter(":ui-draggable").draggable("destroy"),K.hide()):($.width(B.width()).height(B.height()),G.width(B.width()).height(B.height()),h.width($.width()).height($.height()).offset($.offset()).resizable({containment:K,resize:Z.resize_update,handles:"all"}).draggable({handle:G,containment:$,drag:Z.drag_update}),K.show().width(B.width()).height(B.height()),Z.update()))},nt=function(t){e.fn.draggable&&e.fn.resizable&&(t?J.hide():J.show().width(N).height(W).css("margin-top",(_-W)/2+"px").css("margin-left",(L-N)/2+"px"))},it=function(){var n,a,s,l,d,c=e("input:checked",F).val();if("resize"==c)n=parseInt(I.val())||0,a=parseInt(P.val())||0;else if("crop"==c)n=parseInt(A.val())||0,a=parseInt(O.val())||0,s=parseInt(M.val())||0,l=parseInt(D.val())||0;else if("rotate"==c){if(n=R,a=q,d=parseInt(S.val())||0,0>d||d>360)return r.error("Invalid rotate degree");if(0==d||360==d)return r.error("Image dose not rotated")}if("rotate"!=c){if(0>=n||0>=a)return r.error("Invalid image size");if(n==R&&a==q)return r.error("Image size not changed")}i.elfinderdialog("close"),r.request({data:{cmd:"resize",target:t.hash,width:n,height:a,x:s,y:l,degree:d,mode:c},notify:{type:"resize",cnt:1}}).fail(function(e){o.reject(e)}).done(function(){o.resolve()})},rt={},at="elfinder-resize-handle-hline",ot="elfinder-resize-handle-vline",st="elfinder-resize-handle-point",lt=r.url(t.hash);J.mousedown(Q.start),e(document).mouseup(Q.stop),f.append(e(s).append(e(l).text(r.i18n("width"))).append(I).append(C)).append(e(s).append(e(l).text(r.i18n("height"))).append(P)).append(e(s).append(e(" ").text(r.i18n("aspectRatio")).prepend(z))).append(e(s).append(r.i18n("scale")+" ").append(k)),m.append(e(s).append(e(l).text("X")).append(M)).append(e(s).append(e(l).text("Y")).append(D)).append(e(s).append(e(l).text(r.i18n("width"))).append(A)).append(e(s).append(e(l).text(r.i18n("height"))).append(O)),y.append(e(s).append(e(l).text(r.i18n("rotate"))).append(e('').append(e('
').append(S).append(e("
").text(r.i18n("degree")))).append(e(g).append(w).append(e(b)).append(x))).append(E)),i.append(F),d.append(e(s)).append(f).append(m.hide()).append(y.hide()).find("input,select").attr("disabled","disabled"),p.append('
').append('
').append('
').append('
').append('
').append('
').append('
'),c.append(u).append(p.hide()).append(B.hide()),h.css("position","absolute").append('
').append('
').append('
').append('
').append('
').append('
').append('
').append('
').append('
').append('
').append('
').append('
'),c.append(K.css("position","absolute").hide().append($).append(h.append(G))),c.append(J.hide()),c.css("overflow","hidden"),i.append(c).append(d),rt[r.i18n("btnApply")]=it,rt[r.i18n("btnCancel")]=function(){i.elfinderdialog("close")},r.dialog(i,{title:t.name,width:650,resizable:!1,destroyOnClose:!0,buttons:rt,open:function(){c.zIndex(1+e(this).parent().zIndex())}}).attr("id",n),r.UA.ltIE8&&e(".elfinder-dialog").css("filter",""),C.css("left",I.position().left+I.width()+12),G.css({opacity:.2,"background-color":"#fff",position:"absolute"}),h.css("cursor","move"),h.find(".elfinder-resize-handle-point").css({"background-color":"#fff",opacity:.5,"border-color":"#000"}),J.css("cursor","pointer"),F.buttonset(),L=c.width()-(p.outerWidth()-p.width()),_=c.height()-(p.outerHeight()-p.height()),B.attr("src",lt+(-1===lt.indexOf("?")?"?":"&")+"_="+Math.random()),$.attr("src",B.attr("src")),J.attr("src",B.attr("src"))};return a.length&&-1!==a[0].mime.indexOf("image/")?(n="resize-"+r.namespace+"-"+a[0].hash,i=r.getUI().find("#"+n),i.length?(i.elfinderdialog("toTop"),o.resolve()):(s(a[0],n),o)):o.reject()}},function(e){var t=function(e,t){var n=0;for(n in t)if("undefined"!=typeof e[t[n]])return t[n];return e[t[n]]="",t[n]};if(e.cssHooks.rotate={get:function(t){return e(t).rotate()},set:function(t,n){return e(t).rotate(n),n}},e.cssHooks.transform={get:function(e){var n=t(e.style,["WebkitTransform","MozTransform","OTransform","msTransform","transform"]);return e.style[n]},set:function(e,n){var i=t(e.style,["WebkitTransform","MozTransform","OTransform","msTransform","transform"]);return e.style[i]=n,n}},e.fn.rotate=function(e){if("undefined"==typeof e){if(window.opera){var t=this.css("transform").match(/rotate\((.*?)\)/);return t&&t[1]?Math.round(180*parseFloat(t[1])/Math.PI):0}var t=this.css("transform").match(/rotate\((.*?)\)/);return t&&t[1]?parseInt(t[1]):0}return this.css("transform",this.css("transform").replace(/none|rotate\(.*?\)/,"")+"rotate("+parseInt(e)+"deg)"),this},e.fx.step.rotate=function(t){0==t.state&&(t.start=e(t.elem).rotate(),t.now=t.start),e(t.elem).rotate(t.now)},"undefined"==typeof window.addEventListener&&"undefined"==typeof document.getElementsByClassName){var n=function(e){for(var t=e,n=t.offsetLeft,i=t.offsetTop;t.offsetParent&&(t=t.offsetParent,t==document.body||"static"==t.currentStyle.position);)t!=document.body&&t!=document.documentElement&&(n-=t.scrollLeft,i-=t.scrollTop),n+=t.offsetLeft,i+=t.offsetTop;return{x:n,y:i}},i=function(e){if("static"==e.currentStyle.position){var t=n(e);e.style.position="absolute",e.style.left=t.x+"px",e.style.top=t.y+"px"}},r=function(e,t){var n,r=1,a=1,o=1,s=1;if("undefined"!=typeof e.style.msTransform)return!0;i(e),n=t.match(/rotate\((.*?)\)/);var l=n&&n[1]?parseInt(n[1]):0;l%=360,0>l&&(l=360+l);var d=l*Math.PI/180,c=Math.cos(d),u=Math.sin(d);r*=c,a*=-u,o*=u,s*=c,e.style.filter=(e.style.filter||"").replace(/progid:DXImageTransform\.Microsoft\.Matrix\([^)]*\)/,"")+("progid:DXImageTransform.Microsoft.Matrix(M11="+r+",M12="+a+",M21="+o+",M22="+s+",FilterType='bilinear',sizingMethod='auto expand')");var p=parseInt(e.style.width||e.width||0),h=parseInt(e.style.height||e.height||0),d=l*Math.PI/180,f=Math.abs(Math.cos(d)),m=Math.abs(Math.sin(d)),g=(p-(p*f+h*m))/2,v=(h-(p*m+h*f))/2;return e.style.marginLeft=Math.floor(g)+"px",e.style.marginTop=Math.floor(v)+"px",!0},a=e.cssHooks.transform.set;e.cssHooks.transform.set=function(e,t){return a.apply(this,[e,t]),r(e,t),t}}}(jQuery),elFinder.prototype.commands.rm=function(){this.shortcuts=[{pattern:"delete ctrl+backspace"}],this.getstate=function(t){var n=this.fm;return t=t||n.selected(),!this._disabled&&t.length&&e.map(t,function(e){var t=n.file(e);return t&&t.phash&&!t.locked?e:null}).length==t.length?0:-1},this.exec=function(t){var n=this,i=this.fm,r=e.Deferred().fail(function(e){e&&i.error(e)}),a=this.files(t),o=a.length,s=i.cwd().hash,l=!1;return!o||this._disabled?r.reject():(e.each(a,function(e,t){return t.phash?t.locked?!r.reject(["errLocked",t.name]):(t.hash==s&&(l=i.root(t.hash)),void 0):!r.reject(["errRm",t.name,"errPerm"])}),"pending"==r.state()&&(a=this.hashes(t),i.confirm({title:n.title,text:"confirmRm",accept:{label:"btnRm",callback:function(){i.lockfiles({files:a}),i.request({data:{cmd:"rm",targets:a},notify:{type:"rm",cnt:o},preventFail:!0}).fail(function(e){r.reject(e)}).done(function(e){r.done(e),l&&i.exec("open",l)}).always(function(){i.unlockfiles({files:a})})}},cancel:{label:"btnCancel",callback:function(){r.reject()}}})),r)}},elFinder.prototype.commands.search=function(){this.title="Find files",this.options={ui:"searchbutton"},this.alwaysEnabled=!0,this.updateOnSelect=!1,this.getstate=function(){return 0},this.exec=function(t){var n=this.fm;return"string"==typeof t&&t?(n.trigger("searchstart",{query:t}),n.request({data:{cmd:"search",q:t},notify:{type:"search",cnt:1,hideCnt:!0}})):(n.getUI("toolbar").find("."+n.res("class","searchbtn")+" :text").focus(),e.Deferred().reject())}},elFinder.prototype.commands.sort=function(){this.options={ui:"sortbutton"},this.getstate=function(){return 0},this.exec=function(t,n){var i=this.fm,n=e.extend({type:i.sortType,order:i.sortOrder,stick:i.sortStickFolders},n);return this.fm.setSort(n.type,n.order,n.stick),e.Deferred().resolve()}},elFinder.prototype.commands.up=function(){this.alwaysEnabled=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+up"}],this.getstate=function(){return this.fm.cwd().phash?0:-1},this.exec=function(){return this.fm.cwd().phash?this.fm.exec("open",this.fm.cwd().phash):e.Deferred().reject()}},elFinder.prototype.commands.upload=function(){var t=this.fm.res("class","hover");this.disableOnSearch=!0,this.updateOnSelect=!1,this.shortcuts=[{pattern:"ctrl+u"}],this.getstate=function(){return!this._disabled&&this.fm.cwd().write?0:-1},this.exec=function(n){var i,r,a,o,s,l,d,c,u=this.fm,p=function(e){r.elfinderdialog("close"),u.upload(e).fail(function(e){i.reject(e)}).done(function(e){i.resolve(e)})};if(this.disabled())return e.Deferred().reject();if(d=function(e){e.stopPropagation(),e.preventDefault();var t=!1,n="",i=null;try{i=e.dataTransfer.getData("text/html")}catch(e){}return i?(t=[i],n="html"):(i=e.dataTransfer.getData("text"))?(t=[i],n="text"):e.dataTransfer&&e.dataTransfer.items&&e.dataTransfer.items.length?(t=e.dataTransfer,n="data"):e.dataTransfer&&e.dataTransfer.files&&e.dataTransfer.files.length&&(t=e.dataTransfer.files,n="files"),t?u.upload({files:t,type:n}):!1},n){if(n.input||n.files)return n.type="files",u.upload(n);if(n.dropEvt)return d(n.dropEvt)}return i=e.Deferred(),c=function(e){var t,e=e.originalEvent||e,n=[];if(e.clipboardData&&e.clipboardData.items&&e.clipboardData.items.length){for(var i=0;i
]*>/gi," "),t=e.match(/<[^>]+>/)?"html":"text";r.innerHTML="",p({files:[e],type:t})}},1)},a=e(' ').change(function(){p({input:a[0]})}),o=e(''+u.i18n("selectForUpload")+"
").append(e("").append(a)).hover(function(){o.toggleClass(t)}),r=e('
').append(o),l=e(''+u.i18n("dropFilesBrowser")+"
").on("paste drop",function(e){c(e)}).on("mousedown click",function(){e(this).focus()}).on("focus",function(e){e=e.originalEvent||e,(e.target||e.srcElement).innerHTML=""}).on("blur",function(e){e=e.originalEvent||e,(e.target||e.srcElement).innerHTML=u.i18n("dropFilesBrowser")}).on("dragenter mouseover",function(){l.addClass(t)}).on("dragleave mouseout",function(){l.removeClass(t)}),u.dragUpload?(s=e(''+u.i18n("dropPasteFiles")+"
").on("paste",function(e){c(e)}).on("mousedown click",function(){e(this).focus()}).on("focus",function(e){(e.originalEvent||e).target.innerHTML=""}).on("blur",function(e){(e.originalEvent||e).target.innerHTML=u.i18n("dropPasteFiles")}).on("mouseover",function(){e(this).addClass(t)}).on("mouseout",function(){e(this).removeClass(t)}).prependTo(r).after(''+u.i18n("or")+"
")[0],s.addEventListener("dragenter",function(n){n.stopPropagation(),n.preventDefault(),e(s).addClass(t)},!1),s.addEventListener("dragleave",function(n){n.stopPropagation(),n.preventDefault(),e(s).removeClass(t)
+},!1),s.addEventListener("dragover",function(n){n.stopPropagation(),n.preventDefault(),e(s).addClass(t)},!1),s.addEventListener("drop",function(e){r.elfinderdialog("close"),d(e)},!1)):l.prependTo(r).after(''+u.i18n("or")+"
")[0],u.dialog(r,{title:this.title,modal:!0,resizable:!1,destroyOnClose:!0}),i}},elFinder.prototype.commands.view=function(){this.value=this.fm.viewType,this.alwaysEnabled=!0,this.updateOnSelect=!1,this.options={ui:"viewbutton"},this.getstate=function(){return 0},this.exec=function(){var e=this.fm.storage("view","list"==this.value?"icons":"list");this.fm.viewchange(),this.update(void 0,e)}}}(jQuery);
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.LANG.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.LANG.js
new file mode 100644
index 00000000..4fab35c5
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.LANG.js
@@ -0,0 +1,355 @@
+/**
+ * elFinder translation template
+ * use this file to create new translation
+ * submit new translation via https://github.com/Studio-42/elFinder/issues
+ * or make a pull request
+ */
+
+/**
+ * XXXXX translation
+ * @author Translator Name
+ * @version 201x-xx-xx
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.REPLACE_WITH_xx_OR_xx_YY_LANG_CODE = {
+ translator : 'Translator name <translator@email.tld>',
+ language : 'Language of translation in your language',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Error',
+ 'errUnknown' : 'Unknown error.',
+ 'errUnknownCmd' : 'Unknown command.',
+ 'errJqui' : 'Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.',
+ 'errNode' : 'elFinder requires DOM Element to be created.',
+ 'errURL' : 'Invalid elFinder configuration! URL option is not set.',
+ 'errAccess' : 'Access denied.',
+ 'errConnect' : 'Unable to connect to backend.',
+ 'errAbort' : 'Connection aborted.',
+ 'errTimeout' : 'Connection timeout.',
+ 'errNotFound' : 'Backend not found.',
+ 'errResponse' : 'Invalid backend response.',
+ 'errConf' : 'Invalid backend configuration.',
+ 'errJSON' : 'PHP JSON module not installed.',
+ 'errNoVolumes' : 'Readable volumes not available.',
+ 'errCmdParams' : 'Invalid parameters for command "$1".',
+ 'errDataNotJSON' : 'Data is not JSON.',
+ 'errDataEmpty' : 'Data is empty.',
+ 'errCmdReq' : 'Backend request requires command name.',
+ 'errOpen' : 'Unable to open "$1".',
+ 'errNotFolder' : 'Object is not a folder.',
+ 'errNotFile' : 'Object is not a file.',
+ 'errRead' : 'Unable to read "$1".',
+ 'errWrite' : 'Unable to write into "$1".',
+ 'errPerm' : 'Permission denied.',
+ 'errLocked' : '"$1" is locked and can not be renamed, moved or removed.',
+ 'errExists' : 'File named "$1" already exists.',
+ 'errInvName' : 'Invalid file name.',
+ 'errFolderNotFound' : 'Folder not found.',
+ 'errFileNotFound' : 'File not found.',
+ 'errTrgFolderNotFound' : 'Target folder "$1" not found.',
+ 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.',
+ 'errMkdir' : 'Unable to create folder "$1".',
+ 'errMkfile' : 'Unable to create file "$1".',
+ 'errRename' : 'Unable to rename "$1".',
+ 'errCopyFrom' : 'Copying files from volume "$1" not allowed.',
+ 'errCopyTo' : 'Copying files to volume "$1" not allowed.',
+ 'errUploadCommon' : 'Upload error.',
+ 'errUpload' : 'Unable to upload "$1".',
+ 'errUploadNoFiles' : 'No files found for upload.',
+ 'errMaxSize' : 'Data exceeds the maximum allowed size.',
+ 'errFileMaxSize' : 'File exceeds maximum allowed size.',
+ 'errUploadMime' : 'File type not allowed.',
+ 'errUploadTransfer' : '"$1" transfer error.',
+ 'errSave' : 'Unable to save "$1".',
+ 'errCopy' : 'Unable to copy "$1".',
+ 'errMove' : 'Unable to move "$1".',
+ 'errCopyInItself' : 'Unable to copy "$1" into itself.',
+ 'errRm' : 'Unable to remove "$1".',
+ 'errExtract' : 'Unable to extract files from "$1".',
+ 'errArchive' : 'Unable to create archive.',
+ 'errArcType' : 'Unsupported archive type.',
+ 'errNoArchive' : 'File is not archive or has unsupported archive type.',
+ 'errCmdNoSupport' : 'Backend does not support this command.',
+ 'errReplByChild' : 'The folder “$1” can’t be replaced by an item it contains.',
+ 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks or files with not allowed names.', // edited 24.06.2012
+ 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.',
+ 'errResize' : 'Unable to resize "$1".',
+ 'errUsupportType' : 'Unsupported file type.',
+ 'errNotUTF8Content' : 'File "$1" is not in UTF-8 and cannot be edited.', // added 9.11.2011
+ 'errNetMount' : 'Unable to mount "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : 'Unsupported protocol.', // added 17.04.2012
+ 'errNetMountFailed' : 'Mount failed.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Host required.', // added 18.04.2012
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Create archive',
+ 'cmdback' : 'Back',
+ 'cmdcopy' : 'Copy',
+ 'cmdcut' : 'Cut',
+ 'cmddownload' : 'Download',
+ 'cmdduplicate' : 'Duplicate',
+ 'cmdedit' : 'Edit file',
+ 'cmdextract' : 'Extract files from archive',
+ 'cmdforward' : 'Forward',
+ 'cmdgetfile' : 'Select files',
+ 'cmdhelp' : 'About this software',
+ 'cmdhome' : 'Home',
+ 'cmdinfo' : 'Get info',
+ 'cmdmkdir' : 'New folder',
+ 'cmdmkfile' : 'New text file',
+ 'cmdopen' : 'Open',
+ 'cmdpaste' : 'Paste',
+ 'cmdquicklook' : 'Preview',
+ 'cmdreload' : 'Reload',
+ 'cmdrename' : 'Rename',
+ 'cmdrm' : 'Delete',
+ 'cmdsearch' : 'Find files',
+ 'cmdup' : 'Go to parent directory',
+ 'cmdupload' : 'Upload files',
+ 'cmdview' : 'View',
+ 'cmdresize' : 'Resize image',
+ 'cmdsort' : 'Sort',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Close',
+ 'btnSave' : 'Save',
+ 'btnRm' : 'Remove',
+ 'btnApply' : 'Apply',
+ 'btnCancel' : 'Cancel',
+ 'btnNo' : 'No',
+ 'btnYes' : 'Yes',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Open folder',
+ 'ntffile' : 'Open file',
+ 'ntfreload' : 'Reload folder content',
+ 'ntfmkdir' : 'Creating directory',
+ 'ntfmkfile' : 'Creating files',
+ 'ntfrm' : 'Delete files',
+ 'ntfcopy' : 'Copy files',
+ 'ntfmove' : 'Move files',
+ 'ntfprepare' : 'Prepare to copy files',
+ 'ntfrename' : 'Rename files',
+ 'ntfupload' : 'Uploading files',
+ 'ntfdownload' : 'Downloading files',
+ 'ntfsave' : 'Save files',
+ 'ntfarchive' : 'Creating archive',
+ 'ntfextract' : 'Extracting files from archive',
+ 'ntfsearch' : 'Searching files',
+ 'ntfsmth' : 'Doing something >_<',
+ 'ntfloadimg' : 'Loading image',
+ 'ntfnetmount' : 'Mounting network volume', // added 18.04.2012
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'unknown',
+ 'Today' : 'Today',
+ 'Yesterday' : 'Yesterday',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'May',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Aug',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Oct',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dec',
+ 'January' : 'January',
+ 'February' : 'February',
+ 'March' : 'March',
+ 'April' : 'April',
+ 'May' : 'May',
+ 'June' : 'June',
+ 'July' : 'July',
+ 'August' : 'August',
+ 'September' : 'September',
+ 'October' : 'October',
+ 'November' : 'November',
+ 'December' : 'December',
+ 'Sunday' : 'Sunday',
+ 'Monday' : 'Monday',
+ 'Tuesday' : 'Tuesday',
+ 'Wednesday' : 'Wednesday',
+ 'Thursday' : 'Thursday',
+ 'Friday' : 'Friday',
+ 'Saturday' : 'Saturday',
+ 'Sun' : 'Sun',
+ 'Mon' : 'Mon',
+ 'Tue' : 'Tue',
+ 'Wed' : 'Wed',
+ 'Thu' : 'Thu',
+ 'Fri' : 'Fri',
+ 'Sat' : 'Sat',
+ /******************************** sort variants ********************************/
+ 'sortname' : 'by name',
+ 'sortkind' : 'by kind',
+ 'sortsize' : 'by size',
+ 'sortdate' : 'by date',
+ 'sortFoldersFirst' : 'Folders first', // added 22.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmation required',
+ 'confirmRm' : 'Are you sure you want to remove files? This cannot be undone!',
+ 'confirmRepl' : 'Replace old file with new one?',
+ 'apllyAll' : 'Apply to all',
+ 'name' : 'Name',
+ 'size' : 'Size',
+ 'perms' : 'Permissions',
+ 'modify' : 'Modified',
+ 'kind' : 'Kind',
+ 'read' : 'read',
+ 'write' : 'write',
+ 'noaccess' : 'no access',
+ 'and' : 'and',
+ 'unknown' : 'unknown',
+ 'selectall' : 'Select all files',
+ 'selectfiles' : 'Select file(s)',
+ 'selectffile' : 'Select first file',
+ 'selectlfile' : 'Select last file',
+ 'viewlist' : 'List view',
+ 'viewicons' : 'Icons view',
+ 'places' : 'Places',
+ 'calc' : 'Calculate',
+ 'path' : 'Path',
+ 'aliasfor' : 'Alias for',
+ 'locked' : 'Locked',
+ 'dim' : 'Dimensions',
+ 'files' : 'Files',
+ 'folders' : 'Folders',
+ 'items' : 'Items',
+ 'yes' : 'yes',
+ 'no' : 'no',
+ 'link' : 'Link',
+ 'searcresult' : 'Search results',
+ 'selected' : 'selected items',
+ 'about' : 'About',
+ 'shortcuts' : 'Shortcuts',
+ 'help' : 'Help',
+ 'webfm' : 'Web file manager',
+ 'ver' : 'Version',
+ 'protocolver' : 'protocol version',
+ 'homepage' : 'Project home',
+ 'docs' : 'Documentation',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Follow us on twitter',
+ 'facebook' : 'Join us on facebook',
+ 'team' : 'Team',
+ 'chiefdev' : 'chief developer',
+ 'developer' : 'developer',
+ 'contributor' : 'contributor',
+ 'maintainer' : 'maintainer',
+ 'translator' : 'translator',
+ 'icons' : 'Icons',
+ 'dontforget' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : 'Shortcuts disabled',
+ 'dropFiles' : 'Drop files here',
+ 'or' : 'or',
+ 'selectForUpload' : 'Select files to upload',
+ 'moveFiles' : 'Move files',
+ 'copyFiles' : 'Copy files',
+ 'rmFromPlaces' : 'Remove from places',
+ 'untitled folder' : 'untitled folder',
+ 'untitled file.txt' : 'untitled file.txt',
+ 'aspectRatio' : 'Aspect ratio',
+ 'scale' : 'Scale',
+ 'width' : 'Width',
+ 'height' : 'Height',
+ 'mode' : 'Mode',
+ 'resize' : 'Resize',
+ 'crop' : 'Crop',
+ 'rotate' : 'Rotate',
+ 'rotate-cw' : 'Rotate 90 degrees CW',
+ 'rotate-ccw' : 'Rotate 90 degrees CCW',
+ 'degree' : 'Degree',
+ 'netMountDialogTitle' : 'Mount network volume', // added 18.04.2012
+ 'protocol' : 'Protocol', // added 18.04.2012
+ 'host' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'User', // added 18.04.2012
+ 'pass' : 'Password', // added 18.04.2012
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Unknown',
+ 'kindFolder' : 'Folder',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Broken alias',
+ // applications
+ 'kindApp' : 'Application',
+ 'kindPostscript' : 'Postscript document',
+ 'kindMsOffice' : 'Microsoft Office document',
+ 'kindMsWord' : 'Microsoft Word document',
+ 'kindMsExcel' : 'Microsoft Excel document',
+ 'kindMsPP' : 'Microsoft Powerpoint presentation',
+ 'kindOO' : 'Open Office document',
+ 'kindAppFlash' : 'Flash application',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent file',
+ 'kind7z' : '7z archive',
+ 'kindTAR' : 'TAR archive',
+ 'kindGZIP' : 'GZIP archive',
+ 'kindBZIP' : 'BZIP archive',
+ 'kindZIP' : 'ZIP archive',
+ 'kindRAR' : 'RAR archive',
+ 'kindJAR' : 'Java JAR file',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM package',
+ // texts
+ 'kindText' : 'Text document',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP source',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML document',
+ 'kindJS' : 'Javascript source',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C source',
+ 'kindCHeader' : 'C header source',
+ 'kindCPP' : 'C++ source',
+ 'kindCPPHeader' : 'C++ header source',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python source',
+ 'kindJava' : 'Java source',
+ 'kindRuby' : 'Ruby source',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL source',
+ 'kindXML' : 'XML document',
+ 'kindAWK' : 'AWK source',
+ 'kindCSV' : 'Comma separated values',
+ 'kindDOCBOOK' : 'Docbook XML document',
+ // images
+ 'kindImage' : 'Image',
+ 'kindBMP' : 'BMP image',
+ 'kindJPEG' : 'JPEG image',
+ 'kindGIF' : 'GIF Image',
+ 'kindPNG' : 'PNG Image',
+ 'kindTIFF' : 'TIFF image',
+ 'kindTGA' : 'TGA image',
+ 'kindPSD' : 'Adobe Photoshop image',
+ 'kindXBITMAP' : 'X bitmap image',
+ 'kindPXM' : 'Pixelmator image',
+ // media
+ 'kindAudio' : 'Audio media',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Video media',
+ 'kindVideoDV' : 'DV movie',
+ 'kindVideoMPEG' : 'MPEG movie',
+ 'kindVideoMPEG4' : 'MPEG-4 movie',
+ 'kindVideoAVI' : 'AVI movie',
+ 'kindVideoMOV' : 'Quick Time movie',
+ 'kindVideoWM' : 'Windows Media movie',
+ 'kindVideoFlash' : 'Flash movie',
+ 'kindVideoMKV' : 'Matroska movie',
+ 'kindVideoOGG' : 'Ogg movie'
+ }
+ }
+}
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ar.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ar.js
new file mode 100644
index 00000000..31b873b8
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ar.js
@@ -0,0 +1,290 @@
+/**
+ * Arabic translation (Syrian Localization, it may differ if you aren't from Syria or any Country in Middle East)
+ * @author Tawfek Daghistani
+ * @version 2011-07-09
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.ar = {
+ translator : 'Tawfek Daghistani <tawfekov@gmail.com>',
+ language : 'العربية',
+ direction : 'rtl',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'خطأ',
+ 'errUnknown' : 'خطأ غير معروف .',
+ 'errUnknownCmd' : 'أمر غير معروف .',
+ 'errJqui' : 'إعدادات jQuery UI غير كاملة الرجاء التأكد من وجود كل من selectable, draggable and droppable',
+ 'errNode' : '. موجود DOM إلى عنصر elFinder تحتاج ',
+ 'errURL' : 'إعدادات خاطئة , عليك وضع الرابط ضمن الإعدادات',
+ 'errAccess' : 'وصول مرفوض .',
+ 'errConnect' : 'غير قادر على الاتصال بالخادم الخلفي (backend)',
+ 'errAbort' : 'تم فصل الإتصال',
+ 'errTimeout' : 'مهلة الإتصال قد إنتهت .',
+ 'errNotFound' : 'الخادم الخلفي غير موجود .',
+ 'errResponse' : 'رد غير مقبول من الخادم الخلفي',
+ 'errConf' : 'خطأ في الإعدادات الخاصة بالخادم الخلفي ',
+ 'errJSON' : 'الميزة PHP JSON module غير موجودة ',
+ 'errNoVolumes' : 'لا يمكن القراءة من أي من الوسائط الموجودة ',
+ 'errCmdParams' : 'البيانات المرسلة للأمر غير مقبولة "$1".',
+ 'errDataNotJSON' : 'المعلومات المرسلة ليست من نوع JSON ',
+ 'errDataEmpty' : 'لا يوجد معلومات مرسلة',
+ 'errCmdReq' : 'الخادم الخلفي يطلب وجود اسم الأمر ',
+ 'errOpen' : 'غير قادر على فتح "$1".',
+ 'errNotFolder' : 'العنصر المختار ليس مجلد',
+ 'errNotFile' : 'العنصر المختار ليس ملف',
+ 'errRead' : 'غير قادر على القراءة "$1".',
+ 'errWrite' : 'غير قادر على الكتابة "$1".',
+ 'errPerm' : 'وصول مرفوض ',
+ 'errLocked' : ' محمي و لا يمكن التعديل أو النقل أو إعادة التسمية"$1"',
+ 'errExists' : ' موجود مسبقاً "$1"',
+ 'errInvName' : 'الاسم مرفوض',
+ 'errFolderNotFound' : 'المجلد غير موجود',
+ 'errFileNotFound' : 'الملف غير موجود',
+ 'errTrgFolderNotFound' : 'الملف الهدف "$1" غير موجود ',
+ 'errPopup' : 'يمنعني المتصفح من إنشاء نافذة منبثقة , الرجاء تعديل الخيارات الخاصة من إعدادات المتصفح ',
+ 'errMkdir' : ' غير قادر على إنشاء مجلد جديد "$1".',
+ 'errMkfile' : ' غير قادر على إنشاء ملف جديد"$1".',
+ 'errRename' : 'غير قادر على إعادة تسمية ال "$1".',
+ 'errCopyFrom' : 'نسخ الملفات من الوسط المحدد "$1"غير مسموح.',
+ 'errCopyTo' : 'نسخ الملفات إلى الوسط المحدد "$1" غير مسموح .',
+ 'errUploadCommon' : 'خطأ أثناء عملية الرفع',
+ 'errUpload' : 'غير قادر على رفع "$1".',
+ 'errUploadNoFiles' : 'لم يتم رفع أي ملف ',
+ 'errMaxSize' : 'حجم البيانات أكبر من الحجم المسموح به ',
+ 'errFileMaxSize' : 'حجم الملف أكبر من الحجم المسموح به',
+ 'errUploadMime' : 'نوع ملف غير مسموح ',
+ 'errUploadTransfer' : '"$1" خطأ أثناء عملية النقل',
+ 'errSave' : 'غير قادر على الحفظ في "$1".',
+ 'errCopy' : 'غير قادر على النسخ إلى"$1".',
+ 'errMove' : 'غير قادر على القص إلى "$1".',
+ 'errCopyInItself' : 'غير قادر على نسخ الملف "$1" ضمن الملف نفسه.',
+ 'errRm' : 'غير قادر على الحذف "$1".',
+ 'errExtract' : 'غير قادر على استخراج الملفات من "$1".',
+ 'errArchive' : 'غير قادر على إنشاء ملف مضغوط',
+ 'errArcType' : 'نوع الملف المضغوط غير مدعومة',
+ 'errNoArchive' : 'هذا الملف ليس ملف مضغوط أو ذو صسغة غير مدعومة ',
+ 'errCmdNoSupport' : 'الخادم الخلفي لا يدعم هذا الأمر ',
+ 'errReplByChild' : 'The folder “$1” can’t be replaced by an item it contains.',
+ 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks.',
+ 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'أنشئ مجلد مضغوط',
+ 'cmdback' : 'الخلف',
+ 'cmdcopy' : 'نسخ',
+ 'cmdcut' : 'قص',
+ 'cmddownload' : 'تحميل',
+ 'cmdduplicate' : 'تكرار',
+ 'cmdedit' : 'تعديل الملف',
+ 'cmdextract' : 'استخراج الملفات',
+ 'cmdforward' : 'الأمام',
+ 'cmdgetfile' : 'أختيار الملفات',
+ 'cmdhelp' : 'عن هذا المشروع',
+ 'cmdhome' : 'المجلد الرئيسي',
+ 'cmdinfo' : 'معلومات ',
+ 'cmdmkdir' : 'مجلد جديد',
+ 'cmdmkfile' : 'ملف نصي جديد',
+ 'cmdopen' : 'فتح',
+ 'cmdpaste' : 'لصق',
+ 'cmdquicklook' : 'معاينة',
+ 'cmdreload' : 'إعادة تحميل',
+ 'cmdrename' : 'إعادة تسمية',
+ 'cmdrm' : 'حذف',
+ 'cmdsearch' : 'بحث عن ملفات',
+ 'cmdup' : 'تغيير المسار إلى مستوى أعلى',
+ 'cmdupload' : 'رفع ملفات',
+ 'cmdview' : 'عرض',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'إغلاق',
+ 'btnSave' : 'حفظ',
+ 'btnRm' : 'إزالة',
+ 'btnCancel' : 'إلغاء',
+ 'btnNo' : 'لا',
+ 'btnYes' : 'نعم',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'فتح مجلد',
+ 'ntffile' : 'فتح ملف',
+ 'ntfreload' : 'إعادة عرض محتويات المجلد ',
+ 'ntfmkdir' : 'ينشئ المجلدات',
+ 'ntfmkfile' : 'ينشئ الملفات',
+ 'ntfrm' : 'حذف الملفات',
+ 'ntfcopy' : 'نسخ الملفات',
+ 'ntfmove' : 'نقل الملفات',
+ 'ntfprepare' : 'تحضير لنسخ الملفات',
+ 'ntfrename' : 'إعادة تسمية الملفات',
+ 'ntfupload' : 'رفع الملفات',
+ 'ntfdownload' : 'تحميل الملفات',
+ 'ntfsave' : 'حفظ الملفات',
+ 'ntfarchive' : 'ينشئ ملف مضغوط',
+ 'ntfextract' : 'استخراج ملفات من الملف المضغوط ',
+ 'ntfsearch' : 'يبحث عن ملفات',
+ 'ntfsmth' : 'يحضر لشيء ما >_<',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'غير معلوم',
+ 'Today' : 'اليوم',
+ 'Yesterday' : 'البارحة',
+ 'Jan' : 'كانون الثاني',
+ 'Feb' : 'شباط',
+ 'Mar' : 'آذار',
+ 'Apr' : 'نيسان',
+ 'May' : 'أيار',
+ 'Jun' : 'حزيران',
+ 'Jul' : 'تموز',
+ 'Aug' : 'آب',
+ 'Sep' : 'أيلول',
+ 'Oct' : 'تشرين الأول',
+ 'Nov' : 'تشرين الثاني',
+ 'Dec' : 'كانون الأول ',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'يرجى التأكيد',
+ 'confirmRm' : 'هل انت متأكد من انك تريد الحذف لا يمكن التراجع عن هذه العملية ',
+ 'confirmRepl' : 'استبدال الملف القديم بملف جديد ؟',
+ 'apllyAll' : 'تطبيق على الكل',
+ 'name' : 'الأسم',
+ 'size' : 'الحجم',
+ 'perms' : 'الصلاحيات',
+ 'modify' : 'أخر تعديل',
+ 'kind' : 'نوع الملف',
+ 'read' : 'قراءة',
+ 'write' : 'كتابة',
+ 'noaccess' : 'وصول ممنوع',
+ 'and' : 'و',
+ 'unknown' : 'غير معروف',
+ 'selectall' : 'تحديد كل الملفات',
+ 'selectfiles' : 'تحديد ملفات',
+ 'selectffile' : 'تحديد الملف الاول',
+ 'selectlfile' : 'تحديد الملف الأخير',
+ 'viewlist' : 'اعرض ك قائمة',
+ 'viewicons' : 'اعرض ك ايقونات',
+ 'places' : 'المواقع',
+ 'calc' : 'حساب',
+ 'path' : 'مسار',
+ 'aliasfor' : 'Alias for',
+ 'locked' : 'مقفول',
+ 'dim' : 'الابعاد',
+ 'files' : 'ملفات',
+ 'folders' : 'مجلدات',
+ 'items' : 'عناصر',
+ 'yes' : 'نعم',
+ 'no' : 'لا',
+ 'link' : 'اربتاط',
+ 'searcresult' : 'نتائج البحث',
+ 'selected' : 'العناصر المحددة',
+ 'about' : 'عن البرنامج',
+ 'shortcuts' : 'الاختصارات',
+ 'help' : 'مساعدة',
+ 'webfm' : 'مدير ملفات الويب',
+ 'ver' : 'رقم الإصدار',
+ 'protocolver' : 'اصدار البرتوكول',
+ 'homepage' : 'الصفحة الرئيسية',
+ 'docs' : 'التعليمات',
+ 'github' : 'شاركنا بتطوير المشروع على Github',
+ 'twitter' : 'تابعنا على تويتر',
+ 'facebook' : 'انضم إلينا على الفيس بوك',
+ 'team' : 'الفريق',
+ 'chiefdev' : 'رئيس المبرمجين',
+ 'developer' : 'مبرمح',
+ 'contributor' : 'مبرمح',
+ 'maintainer' : 'مشارك',
+ 'translator' : 'مترجم',
+ 'icons' : 'أيقونات',
+ 'dontforget' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : 'الاختصارات غير مفعلة',
+ 'dropFiles' : 'لصق الملفات هنا',
+ 'or' : 'أو',
+ 'selectForUpload' : 'اختر الملفات التي تريد رفعها',
+ 'moveFiles' : 'قص الملفات',
+ 'copyFiles' : 'نسخ الملفات',
+ 'rmFromPlaces' : 'Remove from places',
+ 'untitled folder' : 'untitled folder',
+ 'untitled file.txt' : 'untitled file.txt',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'غير معروف',
+ 'kindFolder' : 'مجلد',
+ 'kindAlias' : 'اختصار',
+ 'kindAliasBroken' : 'اختصار غير صالح',
+ // applications
+ 'kindApp' : 'برنامج',
+ 'kindPostscript' : 'Postscript ملف',
+ 'kindMsOffice' : 'Microsoft Office ملف',
+ 'kindMsWord' : 'Microsoft Word ملف',
+ 'kindMsExcel' : 'Microsoft Excel ملف',
+ 'kindMsPP' : 'Microsoft Powerpoint عرض تقديمي ',
+ 'kindOO' : 'Open Office ملف',
+ 'kindAppFlash' : 'تطبيق فلاش',
+ 'kindPDF' : 'ملف (PDF)',
+ 'kindTorrent' : 'Bittorrent ملف',
+ 'kind7z' : '7z ملف',
+ 'kindTAR' : 'TAR ملف',
+ 'kindGZIP' : 'GZIP ملف',
+ 'kindBZIP' : 'BZIP ملف',
+ 'kindZIP' : 'ZIP ملف',
+ 'kindRAR' : 'RAR ملف',
+ 'kindJAR' : 'Java JAR ملف',
+ 'kindTTF' : 'True Type خط ',
+ 'kindOTF' : 'Open Type خط ',
+ 'kindRPM' : 'RPM ملف تنصيب',
+ // texts
+ 'kindText' : 'Text ملف',
+ 'kindTextPlain' : 'مستند نصي',
+ 'kindPHP' : 'PHP ملف نصي برمجي لـ',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML ملف',
+ 'kindJS' : 'Javascript ملف نصي برمجي لـ',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C ملف نصي برمجي لـ',
+ 'kindCHeader' : 'C header ملف نصي برمجي لـ',
+ 'kindCPP' : 'C++ ملف نصي برمجي لـ',
+ 'kindCPPHeader' : 'C++ header ملف نصي برمجي لـ',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python ملف نصي برمجي لـ',
+ 'kindJava' : 'Java ملف نصي برمجي لـ',
+ 'kindRuby' : 'Ruby ملف نصي برمجي لـ',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL ملف نصي برمجي لـ',
+ 'kindXML' : 'XML ملف',
+ 'kindAWK' : 'AWK ملف نصي برمجي لـ',
+ 'kindCSV' : 'ملف CSV',
+ 'kindDOCBOOK' : 'Docbook XML ملف',
+ // images
+ 'kindصورة' : 'صورة',
+ 'kindBMP' : 'BMP صورة',
+ 'kindJPEG' : 'JPEG صورة',
+ 'kindGIF' : 'GIF صورة',
+ 'kindPNG' : 'PNG صورة',
+ 'kindTIFF' : 'TIFF صورة',
+ 'kindTGA' : 'TGA صورة',
+ 'kindPSD' : 'Adobe Photoshop صورة',
+ 'kindXBITMAP' : 'X bitmap صورة',
+ 'kindPXM' : 'Pixelmator صورة',
+ // media
+ 'kindAudio' : 'ملف صوتي',
+ 'kindAudioMPEG' : 'MPEG ملف صوتي',
+ 'kindAudioMPEG4' : 'MPEG-4 ملف صوتي',
+ 'kindAudioMIDI' : 'MIDI ملف صوتي',
+ 'kindAudioOGG' : 'Ogg Vorbis ملف صوتي',
+ 'kindAudioWAV' : 'WAV ملف صوتي',
+ 'AudioPlaylist' : 'MP3 قائمة تشغيل',
+ 'kindVideo' : 'ملف فيديو',
+ 'kindVideoDV' : 'DV ملف فيديو',
+ 'kindVideoMPEG' : 'MPEG ملف فيديو',
+ 'kindVideoMPEG4' : 'MPEG-4 ملف فيديو',
+ 'kindVideoAVI' : 'AVI ملف فيديو',
+ 'kindVideoMOV' : 'Quick Time ملف فيديو',
+ 'kindVideoWM' : 'Windows Media ملف فيديو',
+ 'kindVideoFlash' : 'Flash ملف فيديو',
+ 'kindVideoMKV' : 'Matroska ملف فيديو',
+ 'kindVideoOGG' : 'Ogg ملف فيديو'
+ }
+ }
+}
+
+
+
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.bg.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.bg.js
new file mode 100644
index 00000000..6f8e7825
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.bg.js
@@ -0,0 +1,310 @@
+/**
+ * Bulgarian translation
+ * @author Stamo Petkov
+ * @version 2012-02-18
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.bg = {
+ translator : 'Stamo Petkov <stamo.petkov@gmail.com>',
+ language : 'Български',
+ direction : 'ltr',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Грешка',
+ 'errUnknown' : 'Непозната грешка.',
+ 'errUnknownCmd' : 'Непозната команда.',
+ 'errJqui' : 'Грешна конфигурация на jQuery UI. Компонентите selectable, draggable и droppable трябва да са включени.',
+ 'errNode' : 'elFinder изисква да бъде създаден DOM елемент.',
+ 'errURL' : 'Грешка в настройките на elFinder! не е зададена стойност на URL.',
+ 'errAccess' : 'Достъп отказан.',
+ 'errConnect' : 'Няма връзка със сървъра.',
+ 'errAbort' : 'Връзката е прекъсната.',
+ 'errTimeout' : 'Просрочена връзка.',
+ 'errNotFound' : 'Сървърът не е намерен.',
+ 'errResponse' : 'Грешен отговор от сървъра.',
+ 'errConf' : 'Грешни настройки на сървъра.',
+ 'errJSON' : 'Не е инсталиран модул на PHP за JSON.',
+ 'errNoVolumes' : 'Няма дялове достъпни за четене.',
+ 'errCmdParams' : 'Грешни параметри на командата "$1".',
+ 'errDataNotJSON' : 'Данните не са JSON.',
+ 'errDataEmpty' : 'Липсват данни.',
+ 'errCmdReq' : 'Запитването от сървъра изисква име на команда.',
+ 'errOpen' : 'Не мога да отворя "$1".',
+ 'errNotFolder' : 'Обектът не е папка.',
+ 'errNotFile' : 'Обектът не е фаил.',
+ 'errRead' : 'Не мога да прочета "$1".',
+ 'errWrite' : 'Не мога да пиша в "$1".',
+ 'errPerm' : 'Разрешение отказано.',
+ 'errLocked' : '"$1" е заключен и не може да бъде преименуван, местен или премахван.',
+ 'errExists' : 'Вече съществува файл с име "$1"',
+ 'errInvName' : 'Грешно име на фаил.',
+ 'errFolderNotFound' : 'Папката не е открита.',
+ 'errFileNotFound' : 'Фаилът не е открит.',
+ 'errTrgFolderNotFound' : 'Целевата папка "$1" не е намерена.',
+ 'errPopup' : 'Браузъра блокира отварянето на прозорец. За да отворите файла, разрешете отварянето в настройките на браузъра.',
+ 'errMkdir' : 'Не мога да създам папка"$1".',
+ 'errMkfile' : 'Не мога да създам файл "$1".',
+ 'errRename' : 'Не мога да преименувам "$1".',
+ 'errCopyFrom' : 'Копирането на файлове от том "$1" не е разрешено.',
+ 'errCopyTo' : 'Копирането на файлове в том "$1" не е разрешено.',
+ 'errUploadCommon' : 'Грешка при качване.',
+ 'errUpload' : 'Не мога да кача "$1".',
+ 'errUploadNoFiles' : 'Не са намерени файлове за качване.',
+ 'errMaxSize' : 'Данните превишават максимално допостумия размер.',
+ 'errFileMaxSize' : 'Файла превишава максимално допустимия размер.',
+ 'errUploadMime' : 'Не е позволен тип на файла.',
+ 'errUploadTransfer' : '"$1" грешка при предаване.',
+ 'errSave' : 'Не мога да запиша "$1".',
+ 'errCopy' : 'Не мога да копирам "$1".',
+ 'errMove' : 'Не мога да преместя "$1".',
+ 'errCopyInItself' : 'Не мога да копирам "$1" върху самия него.',
+ 'errRm' : 'Не мога да премахна "$1".',
+ 'errExtract' : 'Не мога да извлеча файловете от "$1".',
+ 'errArchive' : 'Не мога да създам архив.',
+ 'errArcType' : 'Неподдържан тип на архива.',
+ 'errNoArchive' : 'Файлът не е архив или е от неподдържан тип.',
+ 'errCmdNoSupport' : 'Сървъра не поддържа тази команда.',
+ 'errReplByChild' : 'Папката “$1” не може да бъде заменена от съдържащ се в нея елемент.',
+ 'errArcSymlinks' : 'От съображения за сигурност няма да бъдат разопаковани архиви съдържащи symlinks.',
+ 'errArcMaxSize' : 'Архивните файлове превишават максимално допустимия размер.',
+ 'errResize' : 'Не мога да преоразмеря "$1".',
+ 'errUsupportType' : 'Неподдържан тип файл.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Създай архив',
+ 'cmdback' : 'Назад',
+ 'cmdcopy' : 'Копирай',
+ 'cmdcut' : 'Изрежи',
+ 'cmddownload' : 'Свали',
+ 'cmdduplicate' : 'Дублирай',
+ 'cmdedit' : 'Редактирай файл',
+ 'cmdextract' : 'Извлечи файловете от архива',
+ 'cmdforward' : 'Напред',
+ 'cmdgetfile' : 'Избери файлове',
+ 'cmdhelp' : 'За тази програма',
+ 'cmdhome' : 'Начало',
+ 'cmdinfo' : 'Информация',
+ 'cmdmkdir' : 'Нова папка',
+ 'cmdmkfile' : 'Нов текстови файл',
+ 'cmdopen' : 'Отвори',
+ 'cmdpaste' : 'Вмъкни',
+ 'cmdquicklook' : 'Преглед',
+ 'cmdreload' : 'Презареди',
+ 'cmdrename' : 'Преименувай',
+ 'cmdrm' : 'Изтрий',
+ 'cmdsearch' : 'Намери файлове',
+ 'cmdup' : 'Една директория нагоре',
+ 'cmdupload' : 'Качи файловете',
+ 'cmdview' : 'Виж',
+ 'cmdresize' : 'Размер на изображение',
+ 'cmdsort' : 'Подреди',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Затвори',
+ 'btnSave' : 'Запиши',
+ 'btnRm' : 'Премахни',
+ 'btnApply' : 'Приложи',
+ 'btnCancel' : 'Отказ',
+ 'btnNo' : 'Не',
+ 'btnYes' : 'Да',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Отваряне на папка',
+ 'ntffile' : 'Отваряне на файл',
+ 'ntfreload' : 'Презареждане съдържанието на папка',
+ 'ntfmkdir' : 'Създавам директория',
+ 'ntfmkfile' : 'Създавам файл',
+ 'ntfrm' : 'Изтриване на файлове',
+ 'ntfcopy' : 'Копиране на файлове',
+ 'ntfmove' : 'Преместване на файлове',
+ 'ntfprepare' : 'Подготовка за копиране на файлове',
+ 'ntfrename' : 'Преименуване на файлове',
+ 'ntfupload' : 'Качвам файлове',
+ 'ntfdownload' : 'Свалям файлове',
+ 'ntfsave' : 'Запис на файлове',
+ 'ntfarchive' : 'Създавам архив',
+ 'ntfextract' : 'Извличам файловете от архив',
+ 'ntfsearch' : 'Търся файлове',
+ 'ntfsmth' : 'Зает съм >_<',
+ 'ntfloadimg' : 'Зареждам изображения',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'неизвестна',
+ 'Today' : 'Днес',
+ 'Yesterday' : 'Вчера',
+ 'Jan' : 'Яну',
+ 'Feb' : 'Фев',
+ 'Mar' : 'Мар',
+ 'Apr' : 'Апр',
+ 'May' : 'Май',
+ 'Jun' : 'Юни',
+ 'Jul' : 'Юли',
+ 'Aug' : 'Авг',
+ 'Sep' : 'Сеп',
+ 'Oct' : 'Окт',
+ 'Nov' : 'Ное',
+ 'Dec' : 'Дек',
+
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'по име (първо папките)',
+ 'sortkindDirsFirst' : 'по вид (първо папките)',
+ 'sortsizeDirsFirst' : 'по размер (първо папките)',
+ 'sortdateDirsFirst' : 'по дата (първо папките)',
+ 'sortname' : 'по име',
+ 'sortkind' : 'по вид',
+ 'sortsize' : 'по размер',
+ 'sortdate' : 'по дата',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Изисква се подтвърждение',
+ 'confirmRm' : 'Сигурни ли сте, че желаете да премахнете файловете? Това действие е необратимо!',
+ 'confirmRepl' : 'Да заменя ли стария фаил с новия?',
+ 'apllyAll' : 'Приложи за всички',
+ 'name' : 'Име',
+ 'size' : 'Размер',
+ 'perms' : 'Привилегии',
+ 'modify' : 'Променен',
+ 'kind' : 'Вид',
+ 'read' : 'четене',
+ 'write' : 'запис',
+ 'noaccess' : 'без достъп',
+ 'and' : 'и',
+ 'unknown' : 'непознат',
+ 'selectall' : 'Избери всички файлове',
+ 'selectfiles' : 'Избери фаил(ове)',
+ 'selectffile' : 'Избери първият файл',
+ 'selectlfile' : 'Избери последният файл',
+ 'viewlist' : 'Изглед списък',
+ 'viewicons' : 'Изглед икони',
+ 'places' : 'Места',
+ 'calc' : 'Изчисли',
+ 'path' : 'Път',
+ 'aliasfor' : 'Връзка към',
+ 'locked' : 'Заключен',
+ 'dim' : 'Размери',
+ 'files' : 'Файлове',
+ 'folders' : 'Папки',
+ 'items' : 'Елементи',
+ 'yes' : 'да',
+ 'no' : 'не',
+ 'link' : 'Връзка',
+ 'searcresult' : 'Резултати от търсенето',
+ 'selected' : 'Избрани елементи',
+ 'about' : 'За',
+ 'shortcuts' : 'преки пътища',
+ 'help' : 'Помощ',
+ 'webfm' : 'Файлов менаджер за web',
+ 'ver' : 'Версия',
+ 'protocolver' : 'версия на протокола',
+ 'homepage' : 'Начало',
+ 'docs' : 'Документация',
+ 'github' : 'Разклонение в Github',
+ 'twitter' : 'Последвайте ни в Twitter',
+ 'facebook' : 'Присъединете се към нас във Facebook',
+ 'team' : 'Екип',
+ 'chiefdev' : 'Главен разработчик',
+ 'developer' : 'разработчик',
+ 'contributor' : 'сътрудник',
+ 'maintainer' : 'поддръжка',
+ 'translator' : 'преводач',
+ 'icons' : 'Икони',
+ 'dontforget' : 'и не забравяйте да си вземете кърпата',
+ 'shortcutsof' : 'Преките пътища са изключени',
+ 'dropFiles' : 'Пуснете файловете тук',
+ 'or' : 'или',
+ 'selectForUpload' : 'Изберете файлове за качване',
+ 'moveFiles' : 'Премести файлове',
+ 'copyFiles' : 'Копирай файлове',
+ 'rmFromPlaces' : 'Премахни от Места',
+ 'untitled folder' : 'Неозаглавена папка',
+ 'untitled file.txt' : 'неозаглавен_файл.txt',
+ 'aspectRatio' : 'Отношение',
+ 'scale' : 'Мащаб',
+ 'width' : 'Ширина',
+ 'height' : 'Височина',
+ 'mode' : 'Режим',
+ 'resize' : 'Преоразмери',
+ 'crop' : 'Отрежи',
+
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Непознат',
+ 'kindFolder' : 'Папка',
+ 'kindAlias' : 'Връзка',
+ 'kindAliasBroken' : 'Счупена връзка',
+ // applications
+ 'kindApp' : 'Приложение',
+ 'kindPostscript' : 'Postscript документ',
+ 'kindMsOffice' : 'Microsoft Office документ',
+ 'kindMsWord' : 'Microsoft Word документ',
+ 'kindMsExcel' : 'Microsoft Excel документ',
+ 'kindMsPP' : 'Microsoft Powerpoint презентация',
+ 'kindOO' : 'Open Office документ',
+ 'kindAppFlash' : 'Flash приложение',
+ 'kindPDF' : 'PDF документ',
+ 'kindTorrent' : 'Bittorrent файл',
+ 'kind7z' : '7z архив',
+ 'kindTAR' : 'TAR архив',
+ 'kindGZIP' : 'GZIP архив',
+ 'kindBZIP' : 'BZIP архив',
+ 'kindZIP' : 'ZIP архив',
+ 'kindRAR' : 'RAR архив',
+ 'kindJAR' : 'Java JAR файл',
+ 'kindTTF' : 'True Type шрифт',
+ 'kindOTF' : 'Open Type шрифт',
+ 'kindRPM' : 'RPM пакет',
+ // texts
+ 'kindText' : 'Текстов документ',
+ 'kindTextPlain' : 'Чист текст',
+ 'kindPHP' : 'PHP изходен код',
+ 'kindCSS' : 'CSS таблица със стилове',
+ 'kindHTML' : 'HTML документ',
+ 'kindJS' : 'Javascript изходен код',
+ 'kindRTF' : 'RTF текстови файл',
+ 'kindC' : 'C изходен код',
+ 'kindCHeader' : 'C header изходен код',
+ 'kindCPP' : 'C++ изходен код',
+ 'kindCPPHeader' : 'C++ header изходен код',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python изходен код',
+ 'kindJava' : 'Java изходен код',
+ 'kindRuby' : 'Ruby изходен код',
+ 'kindPerl' : 'Perl изходен код',
+ 'kindSQL' : 'SQL изходен код',
+ 'kindXML' : 'XML документ',
+ 'kindAWK' : 'AWK изходен код',
+ 'kindCSV' : 'CSV стойности разделени със запетая',
+ 'kindDOCBOOK' : 'Docbook XML документ',
+ // images
+ 'kindImage' : 'Изображение',
+ 'kindBMP' : 'BMP изображение',
+ 'kindJPEG' : 'JPEG изображение',
+ 'kindGIF' : 'GIF изображение',
+ 'kindPNG' : 'PNG изображение',
+ 'kindTIFF' : 'TIFF изображение',
+ 'kindTGA' : 'TGA изображение',
+ 'kindPSD' : 'Adobe Photoshop изображение',
+ 'kindXBITMAP' : 'X bitmap изображение',
+ 'kindPXM' : 'Pixelmator изображение',
+ // media
+ 'kindAudio' : 'Аудио медия',
+ 'kindAudioMPEG' : 'MPEG звук',
+ 'kindAudioMPEG4' : 'MPEG-4 звук',
+ 'kindAudioMIDI' : 'MIDI звук',
+ 'kindAudioOGG' : 'Ogg Vorbis звук',
+ 'kindAudioWAV' : 'WAV звук',
+ 'AudioPlaylist' : 'MP3 списък за изпълнение',
+ 'kindVideo' : 'Видео медия',
+ 'kindVideoDV' : 'DV филм',
+ 'kindVideoMPEG' : 'MPEG филм',
+ 'kindVideoMPEG4' : 'MPEG-4 филм',
+ 'kindVideoAVI' : 'AVI филм',
+ 'kindVideoMOV' : 'Quick Time филм',
+ 'kindVideoWM' : 'Windows Media филм',
+ 'kindVideoFlash' : 'Flash филм',
+ 'kindVideoMKV' : 'Matroska филм',
+ 'kindVideoOGG' : 'Ogg филм'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ca.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ca.js
new file mode 100644
index 00000000..afa1edf0
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ca.js
@@ -0,0 +1,310 @@
+/**
+ * Catalan translation
+ * @author Sergio Jovani
+ * @version 2011-11-13
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.ca = {
+ translator : 'Sergio Jovani <lesergi@gmail.com>',
+ language : 'Català',
+ direction : 'ltr',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Error',
+ 'errUnknown' : 'Error desconegut.',
+ 'errUnknownCmd' : 'Ordre desconeguda.',
+ 'errJqui' : 'La configuració de jQuery UI no és vàlida. S\'han d\'incloure els components "selectable", "draggable" i "droppable".',
+ 'errNode' : 'elFinder necessita crear elements DOM.',
+ 'errURL' : 'La configuració de l\'elFinder no és vàlida! L\'opció URL no està configurada.',
+ 'errAccess' : 'Accés denegat.',
+ 'errConnect' : 'No s\'ha pogut connectar amb el rerefons.',
+ 'errAbort' : 'S\'ha interromput la connexió.',
+ 'errTimeout' : 'Temps de connexió excedit.',
+ 'errNotFound' : 'No s\'ha trobat el rerefons.',
+ 'errResponse' : 'La resposta del rerefons no és vàlida.',
+ 'errConf' : 'La configuració del rerefons no és vàlida.',
+ 'errJSON' : 'No està instal·lat el mòdul JSON del PHP.',
+ 'errNoVolumes' : 'No s\'han trobat volums llegibles.',
+ 'errCmdParams' : 'Els paràmetres per l\'ordre "$1" no són vàlids.',
+ 'errDataNotJSON' : 'Les dades no són JSON.',
+ 'errDataEmpty' : 'Les dades estan buides.',
+ 'errCmdReq' : 'La sol·licitud del rerefons necessita el nom de l\'ordre.',
+ 'errOpen' : 'No s\'ha pogut obrir "$1".',
+ 'errNotFolder' : 'L\'objecte no és una carpeta.',
+ 'errNotFile' : 'L\'objecte no és un fitxer.',
+ 'errRead' : 'No s\'ha pogut llegir "$1".',
+ 'errWrite' : 'No s\'ha pogut escriure a "$1".',
+ 'errPerm' : 'Permís denegat.',
+ 'errLocked' : '"$1" està bloquejat i no podeu canviar-li el nom, moure-lo ni suprimir-lo.',
+ 'errExists' : 'Ja existeix un fitxer anomenat "$1".',
+ 'errInvName' : 'El nom de fitxer no és vàlid.',
+ 'errFolderNotFound' : 'No s\'ha trobat la carpeta.',
+ 'errFileNotFound' : 'No s\'ha trobat el fitxer.',
+ 'errTrgFolderNotFound' : 'No s\'ha trobat la carpeta de destí "$1".',
+ 'errPopup' : 'El navegador ha evitat obrir una finestra emergent. Autoritzeu-la per obrir el fitxer.',
+ 'errMkdir' : 'No s\'ha pogut crear la carpeta "$1".',
+ 'errMkfile' : 'No s\'ha pogut crear el fitxer "$1".',
+ 'errRename' : 'No s\'ha pogut canviar el nom de "$1".',
+ 'errCopyFrom' : 'No està permès copiar fitxers des del volum "$1".',
+ 'errCopyTo' : 'No està permès copiar fitxers al volum "$1".',
+ 'errUploadCommon' : 'S\'ha produït un error en la càrrega.',
+ 'errUpload' : 'No s\'ha pogut carregar "$1".',
+ 'errUploadNoFiles' : 'No s\'han trobat fitxers per carregar.',
+ 'errMaxSize' : 'Les dades excedeixen la mida màxima permesa.',
+ 'errFileMaxSize' : 'El fitxer excedeix la mida màxima permesa.',
+ 'errUploadMime' : 'El tipus de fitxer no està permès.',
+ 'errUploadTransfer' : 'S\'ha produït un error en transferir "$1".',
+ 'errSave' : 'No s\'ha pogut desar "$1".',
+ 'errCopy' : 'No s\'ha pogut copiar "$1".',
+ 'errMove' : 'No s\'ha pogut moure "$1".',
+ 'errCopyInItself' : 'No s\'ha pogut copiar "$1" a si mateix.',
+ 'errRm' : 'No s\'ha pogut suprimir "$1".',
+ 'errExtract' : 'No s\'han pogut extreure els fitxers de "$1".',
+ 'errArchive' : 'No s\'ha pogut crear l\'arxiu.',
+ 'errArcType' : 'El tipus d\'arxiu no està suportat.',
+ 'errNoArchive' : 'El fitxer no és un arxiu o és un tipus no suportat.',
+ 'errCmdNoSupport' : 'El rerefons no suporta aquesta ordre.',
+ 'errReplByChild' : 'No es pot reemplaçar la carpeta “$1” per un element que conté.',
+ 'errArcSymlinks' : 'Per raons de seguretat, no es permet extreure arxius que contenen enllaços simbòlics.',
+ 'errArcMaxSize' : 'Els fitxers de l\'arxiu excedeixen la mida màxima permesa.',
+ 'errResize' : 'No s\'ha pogut redimensionar "$1".',
+ 'errUsupportType' : 'El tipus de fitxer no està suportat.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Crea arxiu',
+ 'cmdback' : 'Enrere',
+ 'cmdcopy' : 'Copia',
+ 'cmdcut' : 'Retalla',
+ 'cmddownload' : 'Descarrega',
+ 'cmdduplicate' : 'Duplica',
+ 'cmdedit' : 'Edita el fitxer',
+ 'cmdextract' : 'Extreu els fitxers de l\'arxiu',
+ 'cmdforward' : 'Endavant',
+ 'cmdgetfile' : 'Selecciona els fitxers',
+ 'cmdhelp' : 'Quant a aquest programari',
+ 'cmdhome' : 'Inici',
+ 'cmdinfo' : 'Obté informació',
+ 'cmdmkdir' : 'Nova carpeta',
+ 'cmdmkfile' : 'Nou fitxer de text',
+ 'cmdopen' : 'Obre',
+ 'cmdpaste' : 'Enganxa',
+ 'cmdquicklook' : 'Previsualitza',
+ 'cmdreload' : 'Torna a carregar',
+ 'cmdrename' : 'Canvia el nom',
+ 'cmdrm' : 'Suprimeix',
+ 'cmdsearch' : 'Cerca fitxers',
+ 'cmdup' : 'Vés al directori superior',
+ 'cmdupload' : 'Carrega fitxers',
+ 'cmdview' : 'Visualitza',
+ 'cmdresize' : 'Redimensiona la imatge',
+ 'cmdsort' : 'Ordena',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Tanca',
+ 'btnSave' : 'Desa',
+ 'btnRm' : 'Suprimeix',
+ 'btnApply' : 'Aplica',
+ 'btnCancel' : 'Cancel·la',
+ 'btnNo' : 'No',
+ 'btnYes' : 'Sí',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'S\'està obrint la carpeta',
+ 'ntffile' : 'S\'està obrint el fitxer',
+ 'ntfreload' : 'S\'està tornant a carregar el contingut de la carpeta',
+ 'ntfmkdir' : 'S\'està creant el directori',
+ 'ntfmkfile' : 'S\'estan creant el fitxers',
+ 'ntfrm' : 'S\'estan suprimint els fitxers',
+ 'ntfcopy' : 'S\'estan copiant els fitxers',
+ 'ntfmove' : 'S\'estan movent els fitxers',
+ 'ntfprepare' : 'S\'està preparant per copiar fitxers',
+ 'ntfrename' : 'S\'estan canviant els noms del fitxers',
+ 'ntfupload' : 'S\'estan carregant els fitxers',
+ 'ntfdownload' : 'S\'estan descarregant els fitxers',
+ 'ntfsave' : 'S\'estan desant els fitxers',
+ 'ntfarchive' : 'S\'està creant l\'arxiu',
+ 'ntfextract' : 'S\'estan extreient els fitxers de l\'arxiu',
+ 'ntfsearch' : 'S\'estan cercant els fitxers',
+ 'ntfsmth' : 'S\'estan realitzant operacions',
+ 'ntfloadimg' : 'S\'està carregant la imatge',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'desconegut',
+ 'Today' : 'Avui',
+ 'Yesterday' : 'Ahir',
+ 'Jan' : 'gen.',
+ 'Feb' : 'febr.',
+ 'Mar' : 'març',
+ 'Apr' : 'abr.',
+ 'May' : 'maig',
+ 'Jun' : 'juny',
+ 'Jul' : 'jul.',
+ 'Aug' : 'ag.',
+ 'Sep' : 'set.',
+ 'Oct' : 'oct.',
+ 'Nov' : 'nov.',
+ 'Dec' : 'des.',
+
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'per nom (carpetes primer)',
+ 'sortkindDirsFirst' : 'per tipus (carpetes primer)',
+ 'sortsizeDirsFirst' : 'per mida (carpetes primer)',
+ 'sortdateDirsFirst' : 'per data (carpetes primer)',
+ 'sortname' : 'per nom',
+ 'sortkind' : 'per tipus',
+ 'sortsize' : 'per mida',
+ 'sortdate' : 'per data',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Es necessita confirmació',
+ 'confirmRm' : 'Voleu suprimir els fitxers? L\'acció es podrà desfer!',
+ 'confirmRepl' : 'Voleu reemplaçar el fitxer antic amb el nou?',
+ 'apllyAll' : 'Aplica a tot',
+ 'name' : 'Nom',
+ 'size' : 'Mida',
+ 'perms' : 'Permisos',
+ 'modify' : 'Modificat',
+ 'kind' : 'Tipus',
+ 'read' : 'llegir',
+ 'write' : 'escriure',
+ 'noaccess' : 'sense accés',
+ 'and' : 'i',
+ 'unknown' : 'desconegut',
+ 'selectall' : 'Selecciona tots els fitxers',
+ 'selectfiles' : 'Selecciona el(s) fitxer(s)',
+ 'selectffile' : 'Selecciona el primer fitxer',
+ 'selectlfile' : 'Selecciona l\'últim fitxer',
+ 'viewlist' : 'Vista en llista',
+ 'viewicons' : 'Vista en icones',
+ 'places' : 'Llocs',
+ 'calc' : 'Calcula',
+ 'path' : 'Camí',
+ 'aliasfor' : 'Àlies per',
+ 'locked' : 'Bloquejat',
+ 'dim' : 'Dimensions',
+ 'files' : 'Fitxers',
+ 'folders' : 'Carpetes',
+ 'items' : 'Elements',
+ 'yes' : 'sí',
+ 'no' : 'no',
+ 'link' : 'Enllaç',
+ 'searcresult' : 'Resultats de la cerca',
+ 'selected' : 'Elements seleccionats',
+ 'about' : 'Quant a',
+ 'shortcuts' : 'Dreceres',
+ 'help' : 'Ajuda',
+ 'webfm' : 'Gestor de fitxers web',
+ 'ver' : 'Versió',
+ 'protocolver' : 'versió de protocol',
+ 'homepage' : 'Pàgina del projecte',
+ 'docs' : 'Documentació',
+ 'github' : 'Bifurca\'ns a GitHub',
+ 'twitter' : 'Segueix-nos a Twitter',
+ 'facebook' : 'Uniu-vos a Facebook',
+ 'team' : 'Equip',
+ 'chiefdev' : 'cap desenvolupador',
+ 'developer' : 'desenvolupador',
+ 'contributor' : 'col·laborador',
+ 'maintainer' : 'mantenidor',
+ 'translator' : 'traductor',
+ 'icons' : 'Icones',
+ 'dontforget' : 'i no oblideu agafar la vostra tovallola',
+ 'shortcutsof' : 'Les dreceres estan inhabilitades',
+ 'dropFiles' : 'Arrossegueu els fitxers aquí',
+ 'or' : 'o',
+ 'selectForUpload' : 'Seleccioneu els fitxer a carregar',
+ 'moveFiles' : 'Mou els fitxers',
+ 'copyFiles' : 'Copia els fitxers',
+ 'rmFromPlaces' : 'Suprimeix dels llocs',
+ 'untitled folder' : 'carpeta sense nom',
+ 'untitled file.txt' : 'fitxer sense nom.txt',
+ 'aspectRatio' : 'Relació d\'aspecte',
+ 'scale' : 'Escala',
+ 'width' : 'Amplada',
+ 'height' : 'Alçada',
+ 'mode' : 'Mode',
+ 'resize' : 'Redimensiona',
+ 'crop' : 'Retalla',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Desconegut',
+ 'kindFolder' : 'Carpeta',
+ 'kindAlias' : 'Àlies',
+ 'kindAliasBroken' : 'Àlies no vàlid',
+ // applications
+ 'kindApp' : 'Aplicació',
+ 'kindPostscript' : 'Document Postscript',
+ 'kindMsOffice' : 'Document del Microsoft Office',
+ 'kindMsWord' : 'Document del Microsoft Word',
+ 'kindMsExcel' : 'Document del Microsoft Excel',
+ 'kindMsPP' : 'Presentació del Microsoft Powerpoint',
+ 'kindOO' : 'Document de l\'Open Office',
+ 'kindAppFlash' : 'Aplicació Flash',
+ 'kindPDF' : 'Document PDF',
+ 'kindTorrent' : 'Fitxer Bittorrent',
+ 'kind7z' : 'Arxiu 7z',
+ 'kindTAR' : 'Arxiu TAR',
+ 'kindGZIP' : 'Arxiu GZIP',
+ 'kindBZIP' : 'Arxiu BZIP',
+ 'kindZIP' : 'Arxiu ZIP',
+ 'kindRAR' : 'Arxiu RAR',
+ 'kindJAR' : 'Fitxer JAR de Java',
+ 'kindTTF' : 'Tipus de lletra True Type',
+ 'kindOTF' : 'Tipus de lletra Open Type',
+ 'kindRPM' : 'Paquet RPM',
+ // texts
+ 'kindText' : 'Document de text',
+ 'kindTextPlain' : 'Document de text net',
+ 'kindPHP' : 'Codi PHP',
+ 'kindCSS' : 'Full d\'estils CSS',
+ 'kindHTML' : 'Document HTML',
+ 'kindJS' : 'Codi Javascript',
+ 'kindRTF' : 'Document RTF',
+ 'kindC' : 'Codi C',
+ 'kindCHeader' : 'Codi de caçalera C',
+ 'kindCPP' : 'Codi C++',
+ 'kindCPPHeader' : 'Codi de caçalera C++',
+ 'kindShell' : 'Script Unix',
+ 'kindPython' : 'Codi Python',
+ 'kindJava' : 'Codi Java',
+ 'kindRuby' : 'Codi Ruby',
+ 'kindPerl' : 'Script Perl',
+ 'kindSQL' : 'Codi SQL',
+ 'kindXML' : 'Document XML',
+ 'kindAWK' : 'Codi AWK',
+ 'kindCSV' : 'Document CSV',
+ 'kindDOCBOOK' : 'Document XML de Docbook',
+ // images
+ 'kindImage' : 'Imatge',
+ 'kindBMP' : 'Imatge BMP',
+ 'kindJPEG' : 'Imatge JPEG',
+ 'kindGIF' : 'Imatge GIF',
+ 'kindPNG' : 'Imatge PNG',
+ 'kindTIFF' : 'Imatge TIFF',
+ 'kindTGA' : 'Imatge TGA',
+ 'kindPSD' : 'Imatge Adobe Photoshop',
+ 'kindXBITMAP' : 'Imatge X bitmap',
+ 'kindPXM' : 'Imatge Pixelmator',
+ // media
+ 'kindAudio' : 'Fitxer d\'àudio',
+ 'kindAudioMPEG' : 'Fitxer d\'àudio MPEG',
+ 'kindAudioMPEG4' : 'Fitxer d\'àudio MPEG-4',
+ 'kindAudioMIDI' : 'Fitxer d\'àudio MIDI',
+ 'kindAudioOGG' : 'Fitxer d\'àudio Ogg Vorbis',
+ 'kindAudioWAV' : 'Fitxer d\'àudio WAV',
+ 'AudioPlaylist' : 'Llista de reproducció MP3',
+ 'kindVideo' : 'Fitxer de vídeo',
+ 'kindVideoDV' : 'Fitxer de vídeo DV',
+ 'kindVideoMPEG' : 'Fitxer de vídeo MPEG',
+ 'kindVideoMPEG4' : 'Fitxer de vídeo MPEG-4',
+ 'kindVideoAVI' : 'Fitxer de vídeo AVI',
+ 'kindVideoMOV' : 'Fitxer de vídeo Quick Time',
+ 'kindVideoWM' : 'Fitxer de vídeo Windows Media',
+ 'kindVideoFlash' : 'Fitxer de vídeo Flash',
+ 'kindVideoMKV' : 'Fitxer de vídeo Matroska',
+ 'kindVideoOGG' : 'Fitxer de vídeo Ogg'
+ }
+ }
+}
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.cs.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.cs.js
new file mode 100644
index 00000000..fce735cb
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.cs.js
@@ -0,0 +1,340 @@
+/**
+ * Czech translation
+ * @author Jay Gridley
+ * @version 2012-03-23
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.cs = {
+ translator : 'Jay Gridley <gridley.jay@hotmail.com>',
+ language : 'čeština',
+ direction : 'ltr',
+ dateFormat : 'd. m. Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Chyba',
+ 'errUnknown' : 'Neznámá chyba.',
+ 'errUnknownCmd' : 'Neznámý příkaz.',
+ 'errJqui' : 'Nedostačující konfigurace jQuery UI. Musí být zahrnuty komponenty Selectable, Draggable a Droppable.',
+ 'errNode' : 'elFinder vyžaduje vytvořený DOM Element.',
+ 'errURL' : 'Chybná konfigurace elFinderu! Není nastavena hodnota URL.',
+ 'errAccess' : 'Přístup zamítnut.',
+ 'errConnect' : 'Nepodařilo se připojit k backendu (konektoru).',
+ 'errAbort' : 'Připojení zrušeno.',
+ 'errTimeout' : 'Vypšel limit pro připojení.',
+ 'errNotFound' : 'Backend nenalezen.',
+ 'errResponse' : 'Nesprávná odpověď backendu.',
+ 'errConf' : 'Nepsrávná konfigurace backendu.',
+ 'errJSON' : 'PHP modul JSON není nainstalován.',
+ 'errNoVolumes' : 'Není dostupný čitelný oddíl.',
+ 'errCmdParams' : 'Nesprávné parametry příkazu "$1".',
+ 'errDataNotJSON' : 'Data nejsou ve formátu JSON.',
+ 'errDataEmpty' : 'Data jsou prázdná.',
+ 'errCmdReq' : 'Dotaz backendu vyžaduje název příkazu.',
+ 'errOpen' : 'Chyba při otevírání "$1".',
+ 'errNotFolder' : 'Objekt není složka.',
+ 'errNotFile' : 'Objekt není soubor.',
+ 'errRead' : 'Chyba při čtení "$1".',
+ 'errWrite' : 'Chyba při zápisu do "$1".',
+ 'errPerm' : 'Přístup odepřen.',
+ 'errLocked' : '"$1" je uzamčený a nemůže být přejmenován, přesunut nebo smazán.',
+ 'errExists' : 'Soubor s názvem "$1" již existuje.',
+ 'errInvName' : 'Nesprávný název souboru.',
+ 'errFolderNotFound' : 'Složka nenalezena.',
+ 'errFileNotFound' : 'Soubor nenalezen.',
+ 'errTrgFolderNotFound' : 'Cílová složka "$1" nenalezena.',
+ 'errPopup' : 'Prohlížeč zabránil otevření vyskakovacího okna. K otevření souboru, povolte vyskakovací okno v prohlížeči.',
+ 'errMkdir' : 'Nepodařilo se vytvořit složku "$1".',
+ 'errMkfile' : 'Nepodařilo se vytvořit soubor "$1".',
+ 'errRename' : 'Nepodařilo se přejmenovat "$1".',
+ 'errCopyFrom' : 'Kopírování souborů z oddílu "$1" není povoleno.',
+ 'errCopyTo' : 'Kopírování souborů do oddílu "$1" není povoleno.',
+ 'errUploadCommon' : 'Chyba nahrávání.',
+ 'errUpload' : 'Nepodařilo se nahrát "$1".',
+ 'errUploadNoFiles' : 'Nejsou vybrány žádné soubory k nahrání.',
+ 'errMaxSize' : 'Překročena maximální povolená velikost dat.',
+ 'errFileMaxSize' : 'Překročena maximální povolená velikost souboru.',
+ 'errUploadMime' : 'Nepovolený typ souboru.',
+ 'errUploadTransfer' : '"$1" chyba přenosu.',
+ 'errSave' : '"$1" nelze uložit.',
+ 'errCopy' : '"$1" nelze zkopírovat.',
+ 'errMove' : '"$1" nelze přemístit.',
+ 'errCopyInItself' : '"$1" nelze zkopírovat do sebe sama.',
+ 'errRm' : '"$1" nelze odstranit.',
+ 'errExtract' : 'Nelze extrahovat soubory z "$1".',
+ 'errArchive' : 'Nelze vytvořit archív.',
+ 'errArcType' : 'Nepodporovaný typ archívu.',
+ 'errNoArchive' : 'Soubor není archív nebo má nepodporovaný formát.',
+ 'errCmdNoSupport' : 'Backend tento příkaz nepodporuje.',
+ 'errReplByChild' : 'Složka "$1" nemůže být nahrazena souborem, který sama obsahuje.',
+ 'errArcSymlinks' : 'Z bezpečnostních důvodů je zakázáno rozbalit archívy obsahující symlinky.',
+ 'errArcMaxSize' : 'Soubory archívu překračují maximální povolenou velikost.',
+ 'errResize' : 'Nepodařilo se změnit velikost obrázku "$1".',
+ 'errUsupportType' : 'Nepodporovaný typ souboru.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Vytvořit archív',
+ 'cmdback' : 'Zpět',
+ 'cmdcopy' : 'Kopírovat',
+ 'cmdcut' : 'Vyjmout',
+ 'cmddownload' : 'Stáhnout',
+ 'cmdduplicate' : 'Duplikovat',
+ 'cmdedit' : 'Upravit soubor',
+ 'cmdextract' : 'Rozbalit archív',
+ 'cmdforward' : 'Vpřed',
+ 'cmdgetfile' : 'Vybrat soubory',
+ 'cmdhelp' : 'O softwaru',
+ 'cmdhome' : 'Domů',
+ 'cmdinfo' : 'Zobrazit informace',
+ 'cmdmkdir' : 'Nová složka',
+ 'cmdmkfile' : 'Nový textový soubor',
+ 'cmdopen' : 'Otevřít',
+ 'cmdpaste' : 'Vložit',
+ 'cmdquicklook' : 'Náhled',
+ 'cmdreload' : 'Obnovit',
+ 'cmdrename' : 'Přejmenovat',
+ 'cmdrm' : 'Smazat',
+ 'cmdsearch' : 'Najít soubory',
+ 'cmdup' : 'Přejít do nadřazené složky',
+ 'cmdupload' : 'Nahrát soubor(y)',
+ 'cmdview' : 'Zobrazit',
+ 'cmdresize' : 'Změnit velikost',
+ 'cmdsort' : 'Seřadit',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Zavřít',
+ 'btnSave' : 'Uložit',
+ 'btnRm' : 'Odstranit',
+ 'btnApply' : 'Použít',
+ 'btnCancel' : 'Zrušit',
+ 'btnNo' : 'Ne',
+ 'btnYes' : 'Ano',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Otevírání složky',
+ 'ntffile' : 'Otevírání souboru',
+ 'ntfreload' : 'Obnovování obsahu složky',
+ 'ntfmkdir' : 'Vytváření složky',
+ 'ntfmkfile' : 'Vytváření souborů',
+ 'ntfrm' : 'Mazání souborů',
+ 'ntfcopy' : 'Kopírování souborů',
+ 'ntfmove' : 'Přesunování souborů',
+ 'ntfprepare' : 'Příprava ke kopírování souborů',
+ 'ntfrename' : 'Přejmenovávání souborů',
+ 'ntfupload' : 'Nahrávání souborů',
+ 'ntfdownload' : 'Stahování souborů',
+ 'ntfsave' : 'Ukládání souborů',
+ 'ntfarchive' : 'Vytváření archívu',
+ 'ntfextract' : 'Rozbalování souborů z archívu',
+ 'ntfsearch' : 'Vyhledávání souborů',
+ 'ntfsmth' : 'Čekejte prosím...',
+ 'ntfloadimg' : 'Načítání obrázků',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'neznámý',
+ 'Today' : 'Dnes',
+ 'Yesterday' : 'Včera',
+ 'Jan' : 'Led',
+ 'Feb' : 'Úno',
+ 'Mar' : 'Bře',
+ 'Apr' : 'Dub',
+ 'May' : 'Kvě',
+ 'Jun' : 'Čer',
+ 'Jul' : 'Čec',
+ 'Aug' : 'Srp',
+ 'Sep' : 'Zář',
+ 'Oct' : 'Říj',
+ 'Nov' : 'Lis',
+ 'Dec' : 'Pro',
+ 'January' : 'Leden',
+ 'February' : 'Únor',
+ 'March' : 'Březen',
+ 'April' : 'Duben',
+ 'May' : 'Květen',
+ 'June' : 'Červen',
+ 'July' : 'Červenec',
+ 'August' : 'Srpen',
+ 'September' : 'Září',
+ 'October' : 'Říjen',
+ 'November' : 'Listopad',
+ 'December' : 'Prosinec',
+ 'Sunday' : 'Neděle',
+ 'Monday' : 'Pondělí',
+ 'Tuesday' : 'Úterý',
+ 'Wednesday' : 'Středa',
+ 'Thursday' : 'Čtvrtek',
+ 'Friday' : 'Pátek',
+ 'Saturday' : 'Sobota',
+ 'Sun' : 'Ne',
+ 'Mon' : 'Po',
+ 'Tue' : 'Út',
+ 'Wed' : 'St',
+ 'Thu' : 'Čt',
+ 'Fri' : 'Pá',
+ 'Sat' : 'So',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'dle jména (složky přednostně)',
+ 'sortkindDirsFirst' : 'dle typu (složky přednostně)',
+ 'sortsizeDirsFirst' : 'dle veliksoti (složky přednostně)',
+ 'sortdateDirsFirst' : 'dle data (složky přednostně',
+ 'sortname' : 'dle jména',
+ 'sortkind' : 'dle typu',
+ 'sortsize' : 'dle velikosti',
+ 'sortdate' : 'dle data',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Požadováno potvržení',
+ 'confirmRm' : 'Opravdu chcete odstranit tyto soubory? Operace nelze vrátit!',
+ 'confirmRepl' : 'Nahradit staré soubory novými?',
+ 'apllyAll' : 'Všem',
+ 'name' : 'Název',
+ 'size' : 'Velikost',
+ 'perms' : 'Práva',
+ 'modify' : 'Upravený',
+ 'kind' : 'Typ',
+ 'read' : 'čtení',
+ 'write' : 'zápis',
+ 'noaccess' : 'přístup nepovolen',
+ 'and' : 'a',
+ 'unknown' : 'neznámý',
+ 'selectall' : 'Vybrat všechny soubory',
+ 'selectfiles' : 'Vybrat soubor(y)',
+ 'selectffile' : 'Vybrat první soubor',
+ 'selectlfile' : 'Vybrat poslední soubor',
+ 'viewlist' : 'Seznam',
+ 'viewicons' : 'Ikony',
+ 'places' : 'Místa',
+ 'calc' : 'Vypočítat',
+ 'path' : 'Cesta',
+ 'aliasfor' : 'Zástupce pro',
+ 'locked' : 'Uzamčený',
+ 'dim' : 'Rozměry',
+ 'files' : 'Soubory',
+ 'folders' : 'Složky',
+ 'items' : 'Položky',
+ 'yes' : 'ano',
+ 'no' : 'ne',
+ 'link' : 'Odkaz',
+ 'searcresult' : 'Výsledky hledání',
+ 'selected' : 'vybrané položky',
+ 'about' : 'O softwaru',
+ 'shortcuts' : 'Zástupci',
+ 'help' : 'Nápověda',
+ 'webfm' : 'Webový správce souborů',
+ 'ver' : 'Verze',
+ 'protocolver' : 'verze protokolu',
+ 'homepage' : 'Domovská stránka projektu',
+ 'docs' : 'Dokumentace',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Follow us on Twitter',
+ 'facebook' : 'Join us on Facebook',
+ 'team' : 'Tým',
+ 'chiefdev' : 'séf vývojářů',
+ 'developer' : 'vývojár',
+ 'contributor' : 'spolupracovník',
+ 'maintainer' : 'údržba',
+ 'translator' : 'překlad',
+ 'icons' : 'Ikony',
+ 'dontforget' : 'a nezapomeňte si vzít plavky',
+ 'shortcutsof' : 'Zástupci nejsou povoleni',
+ 'dropFiles' : 'Přetáhněte soubory sem',
+ 'or' : 'nebo',
+ 'selectForUpload' : 'Vyberte soubory',
+ 'moveFiles' : 'Přesunout sobory',
+ 'copyFiles' : 'Zkupírovat soubory',
+ 'rmFromPlaces' : 'Odstranit z míst',
+ 'untitled folder' : 'bez názvu',
+ 'untitled file.txt' : 'nepojmenovaný soubor.txt',
+ 'aspectRatio' : 'Poměr stran',
+ 'scale' : 'Měřítko',
+ 'width' : 'Šířka',
+ 'height' : 'Výška',
+ 'mode' : 'Mód',
+ 'resize' : 'Změnit vel.',
+ 'crop' : 'Ožezat',
+ 'rotate' : 'Otočit',
+ 'rotate-cw' : 'Otočit o +90 stupňů',
+ 'rotate-ccw' : 'Otočit o -90 stupňů',
+ 'degree' : ' stupňů',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Neznámý',
+ 'kindFolder' : 'Složka',
+ 'kindAlias' : 'Odkaz',
+ 'kindAliasBroken' : 'Neplatný odkaz',
+ // applications
+ 'kindApp' : 'Aplikace',
+ 'kindPostscript' : 'Dokument Postscriptu',
+ 'kindMsOffice' : 'Dokument Microsoft Office',
+ 'kindMsWord' : 'Dokument Microsoft Word',
+ 'kindMsExcel' : 'Dokument Microsoft Excel',
+ 'kindMsPP' : 'Prezentace Microsoft Powerpoint',
+ 'kindOO' : 'Otevřít dokument Office',
+ 'kindAppFlash' : 'Flash aplikace',
+ 'kindPDF' : 'PDF',
+ 'kindTorrent' : 'Soubor BitTorrent',
+ 'kind7z' : 'Archív 7z',
+ 'kindTAR' : 'Archív TAR',
+ 'kindGZIP' : 'Archív GZIP',
+ 'kindBZIP' : 'Archív BZIP',
+ 'kindZIP' : 'Archív ZIP',
+ 'kindRAR' : 'Archív RAR',
+ 'kindJAR' : 'Soubor Java JAR',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM balíček',
+ // texts
+ 'kindText' : 'Textový dokument',
+ 'kindTextPlain' : 'Čistý text',
+ 'kindPHP' : 'PHP zdrojový kód',
+ 'kindCSS' : 'Kaskádové styly',
+ 'kindHTML' : 'HTML dokument',
+ 'kindJS' : 'Javascript zdrojový kód',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C zdrojový kód',
+ 'kindCHeader' : 'C hlavička',
+ 'kindCPP' : 'C++ zdrojový kód',
+ 'kindCPPHeader' : 'C++ hlavička',
+ 'kindShell' : 'Unix shell skript',
+ 'kindPython' : 'Python zdrojový kód',
+ 'kindJava' : 'Java zdrojový kód',
+ 'kindRuby' : 'Ruby zdrojový kód',
+ 'kindPerl' : 'Perl skript',
+ 'kindSQL' : 'SQL zdrojový kód',
+ 'kindXML' : 'Dokument XML',
+ 'kindAWK' : 'AWK zdrojový kód',
+ 'kindCSV' : 'CSV',
+ 'kindDOCBOOK' : 'Docbook XML dokument',
+ // images
+ 'kindImage' : 'Obrázek',
+ 'kindBMP' : 'Obrázek BMP',
+ 'kindJPEG' : 'Obrázek JPEG',
+ 'kindGIF' : 'Obrázek GIF',
+ 'kindPNG' : 'Obrázek PNG',
+ 'kindTIFF' : 'Obrázek TIFF',
+ 'kindTGA' : 'Obrázek TGA',
+ 'kindPSD' : 'Obrázek Adobe Photoshop',
+ 'kindXBITMAP' : 'Obrázek X bitmapa',
+ 'kindPXM' : 'Obrázek Pixelmator',
+ // media
+ 'kindAudio' : 'Audio sobory',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Video sobory',
+ 'kindVideoDV' : 'DV video',
+ 'kindVideoMPEG' : 'MPEG video',
+ 'kindVideoMPEG4' : 'MPEG-4 video',
+ 'kindVideoAVI' : 'AVI video',
+ 'kindVideoMOV' : 'Quick Time video',
+ 'kindVideoWM' : 'Windows Media video',
+ 'kindVideoFlash' : 'Flash video',
+ 'kindVideoMKV' : 'Matroska video',
+ 'kindVideoOGG' : 'Ogg video'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.da.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.da.js
new file mode 100644
index 00000000..31856ed9
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.da.js
@@ -0,0 +1,354 @@
+/**
+ * elFinder translation template
+ * use this file to create new translation
+ * submit new translation via https://github.com/Studio-42/elFinder/issues
+ * or make a pull request
+ */
+
+/**
+ * Danish translation
+ * @author Mark Topper (webman.io)
+ * @version 2014-04-10
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.da = {
+ translator : 'Mark Topper (webman.io)',
+ language : 'Language of translation in Danish',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Fejl',
+ 'errUnknown' : 'Ukendt fejl.',
+ 'errUnknownCmd' : 'Ukendt kommando.',
+ 'errJqui' : 'Ugyldig jQuery UI konfiguration. Valgbare, som kan trækkes rundt og droppable komponenter skal medtages.',
+ 'errNode' : 'elFinder kræver DOM Element oprettet.',
+ 'errURL' : 'Ugyldig elFinder konfiguration! URL option er ikke sat.',
+ 'errAccess' : 'Adgang nægtet.',
+ 'errConnect' : 'Kan ikke få kontatkt med backend.',
+ 'errAbort' : 'Forbindelse afbrudt.',
+ 'errTimeout' : 'Connection timeout.',
+ 'errNotFound' : 'Backend ikke fundet.',
+ 'errResponse' : 'Ugyldigt backend svar.',
+ 'errConf' : 'Ugyldig backend konfiguration.',
+ 'errJSON' : 'PHP JSON module ikke installeret.',
+ 'errNoVolumes' : 'Læsbare volumener ikke tilgængelig.',
+ 'errCmdParams' : 'Ugyldige parametre for kommando "$1".',
+ 'errDataNotJSON' : 'Data er ikke JSON.',
+ 'errDataEmpty' : 'Data er tomt.',
+ 'errCmdReq' : 'Backend request kræver kommando navn.',
+ 'errOpen' : 'Kunne ikke åbne "$1".',
+ 'errNotFolder' : 'Objektet er ikke en mappe.',
+ 'errNotFile' : 'Objektet er ikke en fil.',
+ 'errRead' : 'Kunne ikke læse "$1".',
+ 'errWrite' : 'Kunne ikke skrive til "$1".',
+ 'errPerm' : 'Adgang nægtet.',
+ 'errLocked' : '"$1" er låst og kan ikke blive omdøbt, flyttet eller slettet.',
+ 'errExists' : 'Der findes allerede en fil ved navn "$1".',
+ 'errInvName' : 'Ugyldigt fil navn.',
+ 'errFolderNotFound' : 'Mappe ikke fundet.',
+ 'errFileNotFound' : 'Fil ikke fundet.',
+ 'errTrgFolderNotFound' : 'Mappen "$1" blev ikke fundet.',
+ 'errPopup' : 'Browseren forhindrede åbne popup-vindue. For at åbne filen aktivere popup-vinduer i browserindstillinger.',
+ 'errMkdir' : 'Kunne ikke oprette mappen "$1".',
+ 'errMkfile' : 'Kunne ikke oprette filen "$1".',
+ 'errRename' : 'Kunne ikke omdøbe "$1".',
+ 'errCopyFrom' : 'Kopiering af filer fra volumen "$1" er ikke tilladt.',
+ 'errCopyTo' : 'Kopiering af filer til volumen "$1" er ikke tilladt.',
+ 'errUploadCommon' : 'Upload fejl.',
+ 'errUpload' : 'Kunne ikke uploade "$1".',
+ 'errUploadNoFiles' : 'Ingen filer fundet til upload.',
+ 'errMaxSize' : 'Dataen overskrider den maksimalt tilladte størrelse.',
+ 'errFileMaxSize' : 'Fil overskrider den maksimalt tilladte størrelse.',
+ 'errUploadMime' : 'Fil type ikke godkendt.',
+ 'errUploadTransfer' : '"$1" overførsels fejl.',
+ 'errSave' : 'Kunne ikke gemme "$1".',
+ 'errCopy' : 'Kunne ikke kopier "$1".',
+ 'errMove' : 'Kunne ikke flytte "$1".',
+ 'errCopyInItself' : 'Kunne ikke kopier "$1" ind i sig selv.',
+ 'errRm' : 'Kunne ikke slette "$1".',
+ 'errExtract' : 'Kunne ikke udpakke filer fra "$1".',
+ 'errArchive' : 'Kunne ikke oprette arkiv.',
+ 'errArcType' : 'Arkiv typen er ikke understøttet.',
+ 'errNoArchive' : 'Filen er ikke et arkiv eller har ikke-understøttet arkiv type.',
+ 'errCmdNoSupport' : 'Backend understøtter ikke denne kommando.',
+ 'errReplByChild' : 'Mappen "$1" kan ikke erstattes af en vare, den indeholder.',
+ 'errArcSymlinks' : 'Af sikkerhedsmæssige årsager nægtede at udpakke arkiver der indeholder symlinks eller filer med ikke tilladte navne.', // edited 24.06.2012
+ 'errArcMaxSize' : 'Arkivfiler overskrider den maksimalt tilladte størrelse.',
+ 'errResize' : 'Kunne ikke ændre størrelsen på "$1".',
+ 'errUsupportType' : 'Ikke-understøttet fil type.',
+ 'errNotUTF8Content' : 'Filen "$1" er ikke i UTF-8 og kan ikke blive redigeret.', // added 9.11.2011
+ 'errNetMount' : 'Kunne ikke mounte "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : 'Ikke-understøttet protocol.', // added 17.04.2012
+ 'errNetMountFailed' : 'Mount mislykkedes.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Host krævet.', // added 18.04.2012
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Lav arkiv',
+ 'cmdback' : 'Tilbage',
+ 'cmdcopy' : 'Kopier',
+ 'cmdcut' : 'Klip',
+ 'cmddownload' : 'Download',
+ 'cmdduplicate' : 'Dupliker',
+ 'cmdedit' : 'Rediger Fil',
+ 'cmdextract' : 'Udpak filer fra arkiv',
+ 'cmdforward' : 'Frem',
+ 'cmdgetfile' : 'Vælg filer',
+ 'cmdhelp' : 'Om dette produkt',
+ 'cmdhome' : 'Hjem',
+ 'cmdinfo' : 'Information',
+ 'cmdmkdir' : 'Ny mappe',
+ 'cmdmkfile' : 'Ny tekst fil',
+ 'cmdopen' : 'Åben',
+ 'cmdpaste' : 'Indsæt',
+ 'cmdquicklook' : 'Vis',
+ 'cmdreload' : 'Reload',
+ 'cmdrename' : 'Omdøb',
+ 'cmdrm' : 'Slet',
+ 'cmdsearch' : 'Find filer',
+ 'cmdup' : 'Gå til forældre mappe',
+ 'cmdupload' : 'Upload filer',
+ 'cmdview' : 'Vis',
+ 'cmdresize' : 'Ændre størrelse',
+ 'cmdsort' : 'Sorter',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Luk',
+ 'btnSave' : 'Gem',
+ 'btnRm' : 'Slet',
+ 'btnApply' : 'Anvend',
+ 'btnCancel' : 'Annuler',
+ 'btnNo' : 'Nej',
+ 'btnYes' : 'Ja',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Åben mappe',
+ 'ntffile' : 'Åben fil',
+ 'ntfreload' : 'Reload mappe indhold',
+ 'ntfmkdir' : 'Opretter mappe',
+ 'ntfmkfile' : 'Opretter filer',
+ 'ntfrm' : 'Sletter filer',
+ 'ntfcopy' : 'Kopier filer',
+ 'ntfmove' : 'Flytter filer',
+ 'ntfprepare' : 'Forbereder kopering af filer',
+ 'ntfrename' : 'Omdøb filer',
+ 'ntfupload' : 'Uploader filer',
+ 'ntfdownload' : 'Downloader filer',
+ 'ntfsave' : 'Gemmer filer',
+ 'ntfarchive' : 'Opretter arkiv',
+ 'ntfextract' : 'Udpakker filer fra arkiv',
+ 'ntfsearch' : 'Søger filer',
+ 'ntfsmth' : 'Gør noget >_<',
+ 'ntfloadimg' : 'Loader billede',
+ 'ntfnetmount' : 'Montere netværks volume', // added 18.04.2012
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Ukendt',
+ 'Today' : 'I dag',
+ 'Yesterday' : 'I går',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'Maj',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Aug',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Okt',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dec',
+ 'January' : 'Januar',
+ 'February' : 'Februar',
+ 'March' : 'Marts',
+ 'April' : 'April',
+ 'May' : 'Maj',
+ 'June' : 'Juni',
+ 'July' : 'Juli',
+ 'August' : 'August',
+ 'September' : 'September',
+ 'October' : 'Oktober',
+ 'November' : 'November',
+ 'December' : 'December',
+ 'Sunday' : 'Søndag',
+ 'Monday' : 'Mandag',
+ 'Tuesday' : 'Tirsdag',
+ 'Wednesday' : 'Onsdag',
+ 'Thursday' : 'Torsdag',
+ 'Friday' : 'Fredag',
+ 'Saturday' : 'Lørdag',
+ 'Sun' : 'Søn',
+ 'Mon' : 'Man',
+ 'Tue' : 'Tir',
+ 'Wed' : 'Ons',
+ 'Thu' : 'Tor',
+ 'Fri' : 'Fre',
+ 'Sat' : 'Lør',
+ /******************************** sort variants ********************************/
+ 'sortname' : 'efter navn',
+ 'sortkind' : 'efter type',
+ 'sortsize' : 'efter størrelse',
+ 'sortdate' : 'efter dato',
+ 'sortFoldersFirst' : 'Mapper først', // added 22.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bekræftelse påkrævet',
+ 'confirmRm' : 'Er du sikker på du vil slette valgte filer? Dette kan ikke blive fortrudt!',
+ 'confirmRepl' : 'Erstat gammel fil med ny fil?',
+ 'apllyAll' : 'Anvend ved alle',
+ 'name' : 'Navn',
+ 'size' : 'Størrelse',
+ 'perms' : 'Rettigheder',
+ 'modify' : 'Ændret',
+ 'kind' : 'Type',
+ 'read' : 'Læse',
+ 'write' : 'Skrive',
+ 'noaccess' : 'ingen adgang',
+ 'and' : 'og',
+ 'unknown' : 'ukendt',
+ 'selectall' : 'Vælg alle filer',
+ 'selectfiles' : 'Vælg fil(er)',
+ 'selectffile' : 'Vælg første fil',
+ 'selectlfile' : 'Vælg sidste fil',
+ 'viewlist' : 'Liste visning',
+ 'viewicons' : 'Ikon visning',
+ 'places' : 'Plaseringer',
+ 'calc' : 'Udregn',
+ 'path' : 'Sti',
+ 'aliasfor' : 'Alias for',
+ 'locked' : 'Låst',
+ 'dim' : 'Størrelser',
+ 'files' : 'Filer',
+ 'folders' : 'Mapper',
+ 'items' : 'Varer',
+ 'yes' : 'ja',
+ 'no' : 'nej',
+ 'link' : 'Link',
+ 'searcresult' : 'Søge resultater',
+ 'selected' : 'valgte varer',
+ 'about' : 'Om',
+ 'shortcuts' : 'Genveje',
+ 'help' : 'Hjælp',
+ 'webfm' : 'Internet fil manager',
+ 'ver' : 'Version',
+ 'protocolver' : 'protocol version',
+ 'homepage' : 'Projeckt side',
+ 'docs' : 'Dokumentation',
+ 'github' : 'Fork os på Github',
+ 'twitter' : 'Følg os på twitter',
+ 'facebook' : 'Følg os på facebook',
+ 'team' : 'Hold',
+ 'chiefdev' : 'hovede udvikler',
+ 'developer' : 'udvikler',
+ 'contributor' : 'bidragyder',
+ 'maintainer' : 'vedligeholder',
+ 'translator' : 'oversætter',
+ 'icons' : 'Ikoner',
+ 'dontforget' : 'og glemt ikke at tag dit håndklæde',
+ 'shortcutsof' : 'Gemveje deaktiveret',
+ 'dropFiles' : 'Drop filer hertil',
+ 'or' : 'eller',
+ 'selectForUpload' : 'Vælg filer at uploade',
+ 'moveFiles' : 'Flyt filer',
+ 'copyFiles' : 'Kopier filer',
+ 'rmFromPlaces' : 'Slet fra placering',
+ 'untitled folder' : 'unavngivet mappe',
+ 'untitled file.txt' : 'unavngivet fil.txt',
+ 'aspectRatio' : 'Skærmformat',
+ 'scale' : 'Skala',
+ 'width' : 'Bredte',
+ 'height' : 'Højde',
+ 'mode' : 'Tilstand',
+ 'resize' : 'Ændre størrelse',
+ 'crop' : 'Beskær',
+ 'rotate' : 'Roter',
+ 'rotate-cw' : 'Roter 90 grader med uret',
+ 'rotate-ccw' : 'Roter 90 grader imod uret',
+ 'degree' : 'Grader',
+ 'netMountDialogTitle' : 'Monter netwærks volume', // added 18.04.2012
+ 'protocol' : 'Protokol', // added 18.04.2012
+ 'host' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'Bruger', // added 18.04.2012
+ 'pass' : 'Kodeord', // added 18.04.2012
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Ukendt',
+ 'kindFolder' : 'Mappe',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Ødelagt alias',
+ // applications
+ 'kindApp' : 'Applikation',
+ 'kindPostscript' : 'Postscript dokument',
+ 'kindMsOffice' : 'Microsoft Office dokument',
+ 'kindMsWord' : 'Microsoft Word dokument',
+ 'kindMsExcel' : 'Microsoft Excel dokument',
+ 'kindMsPP' : 'Microsoft Powerpoint præsentation',
+ 'kindOO' : 'Open Office dokument',
+ 'kindAppFlash' : 'Flash applikation',
+ 'kindPDF' : 'Flytbart Dokument Format (PDF)',
+ 'kindTorrent' : 'Bittorrent fil',
+ 'kind7z' : '7z arkiv',
+ 'kindTAR' : 'TAR arkiv',
+ 'kindGZIP' : 'GZIP arkiv',
+ 'kindBZIP' : 'BZIP arkiv',
+ 'kindZIP' : 'ZIP arkiv',
+ 'kindRAR' : 'RAR arkiv',
+ 'kindJAR' : 'Java JAR fil',
+ 'kindTTF' : 'True Type skrift',
+ 'kindOTF' : 'Open Type skrift',
+ 'kindRPM' : 'RPM pakke',
+ // texts
+ 'kindText' : 'Tekst dokument',
+ 'kindTextPlain' : 'Ren tekst',
+ 'kindPHP' : 'PHP kode',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML document',
+ 'kindJS' : 'Javascript kode',
+ 'kindRTF' : 'Rich Tekst Format',
+ 'kindC' : 'C kode',
+ 'kindCHeader' : 'C header kode',
+ 'kindCPP' : 'C++ kode',
+ 'kindCPPHeader' : 'C++ header kode',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python kode',
+ 'kindJava' : 'Java kode',
+ 'kindRuby' : 'Ruby kode',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL kode',
+ 'kindXML' : 'XML dokument',
+ 'kindAWK' : 'AWK kode',
+ 'kindCSV' : 'Komma seperaret værdier',
+ 'kindDOCBOOK' : 'Docbook XML dokument',
+ // images
+ 'kindImage' : 'Billede',
+ 'kindBMP' : 'BMP billede',
+ 'kindJPEG' : 'JPEG billede',
+ 'kindGIF' : 'GIF billede',
+ 'kindPNG' : 'PNG billede',
+ 'kindTIFF' : 'TIFF billede',
+ 'kindTGA' : 'TGA billede',
+ 'kindPSD' : 'Adobe Photoshop billede',
+ 'kindXBITMAP' : 'X bitmap billede',
+ 'kindPXM' : 'Pixelmator billede',
+ // media
+ 'kindAudio' : 'Lyd medie',
+ 'kindAudioMPEG' : 'MPEG lyd',
+ 'kindAudioMPEG4' : 'MPEG-4 lyd',
+ 'kindAudioMIDI' : 'MIDI lyd',
+ 'kindAudioOGG' : 'Ogg Vorbis lyd',
+ 'kindAudioWAV' : 'WAV lyd',
+ 'AudioPlaylist' : 'MP3 spilleliste',
+ 'kindVideo' : 'Video medie',
+ 'kindVideoDV' : 'DV video',
+ 'kindVideoMPEG' : 'MPEG video',
+ 'kindVideoMPEG4' : 'MPEG-4 video',
+ 'kindVideoAVI' : 'AVI video',
+ 'kindVideoMOV' : 'Hurtig tids video',
+ 'kindVideoWM' : 'Windows Medie video',
+ 'kindVideoFlash' : 'Flash video',
+ 'kindVideoMKV' : 'Matroska video',
+ 'kindVideoOGG' : 'Ogg video'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.de.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.de.js
new file mode 100644
index 00000000..61b6678e
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.de.js
@@ -0,0 +1,335 @@
+/**
+ * German translation
+ * @author JPG & Mace
+ * @author tora60 from pragmaMx.org
+ * @version 2013-05-01
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.de = {
+ translator : 'JPG & Mace <dev@flying-datacenter.de>, tora60 from pragmaMx.org',
+ language : 'Deutsch',
+ direction : 'ltr',
+ dateFormat : 'd. M. Y h:i', // 13. Mai 2012 05:27
+ fancyDateFormat : '$1 h:i', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Fehler',
+ 'errUnknown' : 'Unbekannter Fehler.',
+ 'errUnknownCmd' : 'Unbekannter Befehl.',
+ 'errJqui' : 'Ungültige jQuery UI Konfiguration. Die Komponenten Selectable, draggable und droppable müssen inkludiert sein.',
+ 'errNode' : 'Für elFinder muss das DOM Element erstellt werden.',
+ 'errURL' : 'Ungültige elFinder Konfiguration! Die URL Option nicht gesetzt.',
+ 'errAccess' : 'Zugriff verweigert.',
+ 'errConnect' : 'Verbindung zum Backend fehlgeschlagen',
+ 'errAbort' : 'Verbindung abgebrochen.',
+ 'errTimeout' : 'Zeitüberschreitung der Verbindung.',
+ 'errNotFound' : 'Backend nicht gefunden.',
+ 'errResponse' : 'Ungültige Backend Antwort.',
+ 'errConf' : 'Ungültige Backend Konfiguration.',
+ 'errJSON' : 'PHP JSON Modul nicht vorhanden.',
+ 'errNoVolumes' : 'Lesbare Volumes nicht vorhanden.',
+ 'errCmdParams' : 'Ungültige Parameter für Befehl: "$1".',
+ 'errDataNotJSON' : 'Daten nicht im JSON Format.',
+ 'errDataEmpty' : 'Daten sind leer.',
+ 'errCmdReq' : 'Backend Anfrage benötigt Befehl.',
+ 'errOpen' : 'Kann "$1" nicht öffnen',
+ 'errNotFolder' : 'Objekt ist kein Ordner.',
+ 'errNotFile' : 'Objekt ist keine Datei.',
+ 'errRead' : 'Kann "$1" nicht öffnen.',
+ 'errWrite' : 'Kann nicht in "$1" schreiben.',
+ 'errPerm' : 'Zugriff verweigert.',
+ 'errLocked' : '"$1" ist gelockt und kann nicht umbenannt, verschoben oder gelöscht werden.',
+ 'errExists' : 'Die Datei "$1" existiert bereits.',
+ 'errInvName' : 'Ungültiger Datei Name.',
+ 'errFolderNotFound' : 'Ordner nicht gefunden.',
+ 'errFileNotFound' : 'Datei nicht gefunden.',
+ 'errTrgFolderNotFound' : 'Zielordner "$1" nicht gefunden.',
+ 'errPopup' : 'Der Browser hat das Pop-Up-Fenster unterbunden. Um die Datei zu öffnen, Pop-Ups in den Browser Einstellungen aktivieren.',
+ 'errMkdir' : 'Kann Ordner "$1" nicht erstellen.',
+ 'errMkfile' : 'Kann Datei "$1" nicht erstellen.',
+ 'errRename' : 'Kann "$1" nicht umbenennen.',
+ 'errCopyFrom' : 'Kopieren von Dateien von "$1" nicht erlaubt.',
+ 'errCopyTo' : 'Kopieren von Dateien nach "$1" nicht erlaubt.',
+ 'errUpload' : 'Upload Fehler.',
+ 'errUploadFile' : 'Kann "$1" nicht hochladen.',
+ 'errUploadNoFiles' : 'Keine Dateien zum Hochladen gefunden.',
+ 'errUploadTotalSize' : 'Daten überschreiten die Maximalgröße.',
+ 'errUploadFileSize' : 'Die Datei überschreitet die Maximalgröße',
+ 'errUploadMime' : 'Dateityp nicht zulässig.',
+ 'errUploadTransfer' : '"$1" Transfer Fehler.',
+ 'errNotReplace' : 'Das Objekt "$1" existiert bereits an dieser Stelle und kann nicht durch ein Objekt eines anderen Typs ersetzt werden.',
+ 'errReplace' : 'Kann "$1" nicht ersetzen.',
+ 'errSave' : 'Kann "$1" nicht speichern.',
+ 'errCopy' : 'Kann "$1" nicht kopieren.',
+ 'errMove' : 'Kann "$1" nicht verschieben.',
+ 'errCopyInItself' : '"$1" kann sich nicht in sich selbst kopieren.',
+ 'errRm' : 'Kann "$1" nicht enfernen.',
+ 'errRmSrc' : 'Kann Quelldatei(en) nicht entfernen.',
+ 'errExtract' : 'Kann "$1" nicht entpacken .',
+ 'errArchive' : 'Archiv konnte nicht erstellt werden.',
+ 'errArcType' : 'Archivtyp nicht untersützt.',
+ 'errNoArchive' : 'Bei der Datei handelt es nicht um ein Archiv oder der Archivtyp nicht unterstütz.',
+ 'errCmdNoSupport' : 'Das Backend unterstütz diesen Befehl nicht.',
+ 'errReplByChild' : 'Der Ordner “$1” kann nicht durch etwas ersetzt werden, das ihn selbst enthält.',
+ 'errArcSymlinks' : 'Aus Sicherheitsgründen ist es verboten, ein Archiv mit symbolischen Links zu extrahieren.',
+ 'errArcMaxSize' : 'Die Archiv Dateien übersteigen die maximal erlaubte Größe.',
+ 'errResize' : 'Größe von "$1" kann nicht geändert werden.',
+ 'errUsupportType' : 'Nicht unterstützter Dateityp.',
+ 'errNotUTF8Content' : 'Die Datei "$1" ist nicht im UTF-8 Format und kann nicht editiert werden.',
+ 'errNetMount' : 'Verbindung mit "$1" nicht möglich.',
+ 'errNetMountNoDriver' : 'Nicht unterstütztes Protokoll.',
+ 'errNetMountFailed' : 'Verbindung fehlgeschlagen.',
+ 'errNetMountHostReq' : 'Host benötigz.',
+ 'errSessionExpires' : 'Ihre Sitzung ist aufgrund von Inaktivität abgelaufen',
+ 'errCreatingTempDir' : 'Erstellung des temporären Ordners nicht möglich: "$1"',
+ 'errFtpDownloadFile' : 'Download der Datei über FTP nicht möglich: "$1"',
+ 'errFtpUploadFile' : 'Upload der Datei zu FTP nicht möglich: "$1"',
+ 'errFtpMkdir' : 'Erstellung des Remote-Ordners auf FTP nicht möglich: "$1"',
+ 'errArchiveExec' : 'Fehler bei der Archivierung der Dateien: "$1"',
+ 'errExtractExec' : 'Fehler beim Extrahieren der Dateien: "$1"',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Archiv erstellen',
+ 'cmdback' : 'Zurück',
+ 'cmdcopy' : 'Kopieren',
+ 'cmdcut' : 'Ausschreiden',
+ 'cmddownload' : 'Herunterladen',
+ 'cmdduplicate' : 'Duplizieren',
+ 'cmdedit' : 'Datei bearbeiten',
+ 'cmdextract' : 'Archiv entpacken',
+ 'cmdforward' : 'Vorwärts',
+ 'cmdgetfile' : 'Datei auswählen',
+ 'cmdhelp' : 'über diese Software',
+ 'cmdhome' : 'Startordner',
+ 'cmdinfo' : 'Informationen',
+ 'cmdmkdir' : 'Neuer Ordner',
+ 'cmdmkfile' : 'Neue Textdatei',
+ 'cmdopen' : 'öffnen',
+ 'cmdpaste' : 'Einfügen',
+ 'cmdquicklook' : 'Vorschau',
+ 'cmdreload' : 'Neuladen',
+ 'cmdrename' : 'Umbenennen',
+ 'cmdrm' : 'Löschen',
+ 'cmdsearch' : 'Suchen',
+ 'cmdup' : 'In übergeordneten Ordner wechseln',
+ 'cmdupload' : 'Datei hochladen',
+ 'cmdview' : 'Ansehen',
+ 'cmdresize' : 'Größe ändern & drehen',
+ 'cmdsort' : 'Sortieren',
+ 'cmdnetmount' : 'Verbinde mit Netzwerkspeicher',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Schließen',
+ 'btnSave' : 'Speichern',
+ 'btnRm' : 'Entfernen',
+ 'btnApply' : 'Anwenden',
+ 'btnCancel' : 'Abbrechen',
+ 'btnNo' : 'Nein',
+ 'btnYes' : 'Ja',
+ 'btnMount' : 'Verbinden',
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'öffne Ordner',
+ 'ntffile' : 'öffne Datei',
+ 'ntfreload' : 'Ordnerinhalt neu',
+ 'ntfmkdir' : 'Erstelle Ordner',
+ 'ntfmkfile' : 'Erstelle Dateien',
+ 'ntfrm' : 'Lösche Dateien',
+ 'ntfcopy' : 'Kopiere Dateien files',
+ 'ntfmove' : 'Verschiebe Dateien',
+ 'ntfprepare' : 'Kopiervorgang initialisieren',
+ 'ntfrename' : 'Benenne Dateien um',
+ 'ntfupload' : 'Dateien hochladen',
+ 'ntfdownload' : 'Dateien herunterladen',
+ 'ntfsave' : 'Speichere Datei',
+ 'ntfarchive' : 'Erstelle Archiv',
+ 'ntfextract' : 'Entpacke Dateien',
+ 'ntfsearch' : 'Suche',
+ 'ntfresize' : 'Bildgrößen ändern',
+ 'ntfsmth' : 'Bin beschäftigt',
+ 'ntfloadimg' : 'Bild laden',
+ 'ntfnetmount' : 'Mit Netzwerkspeicher verbinden',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'unbekannt',
+ 'Today' : 'Heute',
+ 'Yesterday' : 'Gestern',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mär',
+ 'Apr' : 'Apr',
+ 'May' : 'Mai',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Aug',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Okt',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dez',
+
+ /******************************** sort variants ********************************/
+ 'sortname' : 'nach Name',
+ 'sortkind' : 'nach Typ',
+ 'sortsize' : 'nach Größe',
+ 'sortdate' : 'nach Datum',
+ 'sortFoldersFirst' : 'Ordner zuerst',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bestätigung Benötigt',
+ 'confirmRm' : 'Sollen die Dateien gelöscht werden? Dies kann nicht rückgängig gemacht werden!',
+ 'confirmRepl' : 'Datei ersetzen?',
+ 'apllyAll' : 'Alles bestätigen',
+ 'name' : 'Name',
+ 'size' : 'Größe',
+ 'perms' : 'Berechtigungen',
+ 'modify' : 'Änderungsdatum',
+ 'kind' : 'Typ',
+ 'read' : 'lesen',
+ 'write' : 'schreiben',
+ 'noaccess' : 'Kein Zugriff',
+ 'and' : 'und',
+ 'unknown' : 'unbekannt',
+ 'selectall' : 'Alle Dateien auswählen',
+ 'selectfiles' : 'Dateien auswählen',
+ 'selectffile' : 'Erste Datei auswhählen',
+ 'selectlfile' : 'Letzte Datei auswählen',
+ 'viewlist' : 'Spaltenansicht',
+ 'viewicons' : 'Symbolansicht',
+ 'places' : 'Orte',
+ 'calc' : 'Berechne',
+ 'path' : 'Pfad',
+ 'aliasfor' : 'Verknüpfund zu',
+ 'locked' : 'Gesperrt',
+ 'dim' : 'Bildgröße',
+ 'files' : 'Dateien',
+ 'folders' : 'Ordner',
+ 'items' : 'Objekte',
+ 'yes' : 'ja',
+ 'no' : 'nein',
+ 'link' : 'Link',
+ 'searcresult' : 'Suchergebnisse',
+ 'selected' : 'Objekte ausgewählt',
+ 'about' : 'über',
+ 'shortcuts' : 'Tastenkombinationen',
+ 'help' : 'Hilfe',
+ 'webfm' : 'Web Datei Manager',
+ 'ver' : 'Version',
+ 'protocolver' : 'Protokol Version',
+ 'homepage' : 'Projekt Website',
+ 'docs' : 'Dokumentation',
+ 'github' : 'Forke uns auf Github',
+ 'twitter' : 'Folge uns auf twitter',
+ 'facebook' : 'Begleite uns auf facebook',
+ 'team' : 'Team',
+ 'chiefdev' : 'Chefentwickler',
+ 'developer' : 'Entwickler',
+ 'contributor' : 'Üntersützer',
+ 'maintainer' : 'Maintainer',
+ 'translator' : 'Übersetzer',
+ 'icons' : 'Icons',
+ 'dontforget' : 'und vergiss dein Handtuch nicht',
+ 'shortcutsof' : 'Tastenkombinationen deaktiviert',
+ 'dropFiles' : 'Dateien hier ablegen',
+ 'dropFilesBrowser': 'Verschieben oder Einfügen von Dateien aus dem Browser',
+ 'or' : 'oder',
+ 'selectForUpload' : 'Dateien zum Upload auswählen',
+ 'moveFiles' : 'Dateien verschieben',
+ 'copyFiles' : 'Dateien kopieren',
+ 'rmFromPlaces' : 'Lösche von Orte',
+ 'aspectRatio' : 'Seitenverhältnis',
+ 'scale' : 'Maßstab',
+ 'width' : 'Breite',
+ 'height' : 'Höhe',
+ 'resize' : 'Größe ändern',
+ 'crop' : 'Zuschneiden',
+ 'rotate' : 'Drehen',
+ 'rotate-cw' : 'Drehe 90° im Uhrzeigersinn',
+ 'rotate-ccw' : 'Drehe 90° gegen den Uhrzeigersinn',
+ 'degree' : '°',
+ 'netMountDialogTitle' : 'verbinde Netzwerk Speicher',
+ 'protocol' : 'Protokoll',
+ 'host' : 'Host',
+ 'port' : 'Port',
+ 'user' : 'Benutzer',
+ 'pass' : 'Passwort',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Unbekannt',
+ 'kindFolder' : 'Ordner',
+ 'kindAlias' : 'Verknüpfung',
+ 'kindAliasBroken' : 'Defekte Verknüpfung',
+ // applications
+ 'kindApp' : 'Programm',
+ 'kindPostscript' : 'Postscript Dokument',
+ 'kindMsOffice' : 'Microsoft Office Dokument',
+ 'kindMsWord' : 'Microsoft Word Dokument',
+ 'kindMsExcel' : 'Microsoft Excel Dokument',
+ 'kindMsPP' : 'Microsoft Powerpoint Präsentation',
+ 'kindOO' : 'Open Office Dokument',
+ 'kindAppFlash' : 'Flash Programm',
+ 'kindPDF' : 'Portables Dokumentenformat (PDF)',
+ 'kindTorrent' : 'Bittorrent Datei',
+ 'kind7z' : '7z Archiv',
+ 'kindTAR' : 'TAR Archiv',
+ 'kindGZIP' : 'GZIP Archiv',
+ 'kindBZIP' : 'BZIP Archiv',
+ 'kindZIP' : 'ZIP Archiv',
+ 'kindRAR' : 'RAR Archiv',
+ 'kindJAR' : 'Java JAR Datei',
+ 'kindTTF' : 'True Type Schrift',
+ 'kindOTF' : 'Open Type Schrift',
+ 'kindRPM' : 'RPM Paket',
+ // texts
+ 'kindText' : 'Text Dokument',
+ 'kindTextPlain' : 'Text Dokument',
+ 'kindPHP' : 'PHP Quelltext',
+ 'kindCSS' : 'Cascading Stylesheet',
+ 'kindHTML' : 'HTML Dokument',
+ 'kindJS' : 'Javascript Quelltext',
+ 'kindRTF' : 'Formatierte Textdatei',
+ 'kindC' : 'C Quelltext',
+ 'kindCHeader' : 'C Header Quelltext',
+ 'kindCPP' : 'C++ Quelltext',
+ 'kindCPPHeader' : 'C++ Header Quelltext',
+ 'kindShell' : 'Unix-Shell-Skript',
+ 'kindPython' : 'Python Quelltext',
+ 'kindJava' : 'Java Quelltext',
+ 'kindRuby' : 'Ruby Quelltext',
+ 'kindPerl' : 'Perl Script',
+ 'kindSQL' : 'SQL Quelltext',
+ 'kindXML' : 'XML Dokument',
+ 'kindAWK' : 'AWK Quelltext',
+ 'kindCSV' : 'Komma getrennte Daten',
+ 'kindDOCBOOK' : 'Docbook XML Dokument',
+ // images
+ 'kindImage' : 'Bild',
+ 'kindBMP' : 'Bitmap Bild',
+ 'kindJPEG' : 'JPEG Bild',
+ 'kindGIF' : 'GIF Bild',
+ 'kindPNG' : 'PNG Bild',
+ 'kindTIFF' : 'TIFF Bild',
+ 'kindTGA' : 'TGA Bild',
+ 'kindPSD' : 'Adobe Photoshop Bild',
+ 'kindXBITMAP' : 'X Bitmap Bild',
+ 'kindPXM' : 'Pixelmator Bild',
+ // media
+ 'kindAudio' : 'Audiodatei',
+ 'kindAudioMPEG' : 'MPEG Audio',
+ 'kindAudioMPEG4' : 'MPEG-4 Audio',
+ 'kindAudioMIDI' : 'MIDI Audio',
+ 'kindAudioOGG' : 'Ogg Vorbis Audio',
+ 'kindAudioWAV' : 'WAV Audio',
+ 'AudioPlaylist' : 'MP3 Playlist',
+ 'kindVideo' : 'Videodatei',
+ 'kindVideoDV' : 'DV Film',
+ 'kindVideoMPEG' : 'MPEG Film',
+ 'kindVideoMPEG4' : 'MPEG-4 Film',
+ 'kindVideoAVI' : 'AVI Film',
+ 'kindVideoMOV' : 'Quick Time Film',
+ 'kindVideoWM' : 'Windows Media Film',
+ 'kindVideoFlash' : 'Flash Film',
+ 'kindVideoMKV' : 'Matroska Film',
+ 'kindVideoOGG' : 'Ogg Film'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.el.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.el.js
new file mode 100644
index 00000000..d7d298c5
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.el.js
@@ -0,0 +1,355 @@
+/**
+ * elFinder translation template
+ * use this file to create new translation
+ * submit new translation via https://github.com/Studio-42/elFinder/issues
+ * or make a pull request
+ */
+
+/**
+ * Greek translation
+ * @author yawd , Romanos
+ * @version 2014-02-09
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.el = {
+ translator : 'yawd <ingo@yawd.eu>',
+ language : 'Ελληνικά',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Πρόβλημα',
+ 'errUnknown' : 'Άγνωστο πρόβλημα.',
+ 'errUnknownCmd' : 'Άγνωστη εντολή.',
+ 'errJqui' : 'Μη έγκυρη ρύθμιση του jQuery UI. Τα components "selectable", "draggable" και "droppable" πρέπει να περιληφούν.',
+ 'errNode' : 'το elFinder χρειάζεται να έχει δημιουργηθεί το DOM Element.',
+ 'errURL' : 'Μη έγκυρες ρυθμίσεις για το elFinder! η επιλογή URL δεν έχει οριστεί.',
+ 'errAccess' : 'Απαγορεύεται η πρόσβαση.',
+ 'errConnect' : 'Δεν ήταν δυνατή η σύνδεση με το backend.',
+ 'errAbort' : 'Η σύνδεση εγκαταλείφθηκε.',
+ 'errTimeout' : 'Η σύνδεση έληξε.',
+ 'errNotFound' : 'Δε βρέθηκε το backend.',
+ 'errResponse' : 'Μή έγκυρη απάντηση από το backend.',
+ 'errConf' : 'Μη έγκυρες ρυθμίσεις για το backend.',
+ 'errJSON' : 'Το PHP JSON module δεν είναι εγκατεστημένο.',
+ 'errNoVolumes' : 'Δεν βρέθηκαν αναγνώσιμα volumes.',
+ 'errCmdParams' : 'Μη έγκυρες παράμετροι για την εντολή "$1".',
+ 'errDataNotJSON' : 'Τα δεδομένα δεν είναι JSON.',
+ 'errDataEmpty' : 'Τα δεδομένα είναι άδεια.',
+ 'errCmdReq' : 'Το Backend request χρειάζεται όνομα εντολής.',
+ 'errOpen' : 'Δεν ήταν δυνατό να ανοίξει το "$1".',
+ 'errNotFolder' : 'Το αντικείμενο δεν είναι φάκελος.',
+ 'errNotFile' : 'Το αντικείμενο δεν είναι αρχείο.',
+ 'errRead' : 'Δεν ήταν δυνατόν να διαβαστεί το "$1".',
+ 'errWrite' : 'Δεν ήταν δυνατή η εγγραφή στο "$1".',
+ 'errPerm' : 'Απαγορεύεται η πρόσβαση.',
+ 'errLocked' : '"$1" είναι κλειδωμένο και δεν μπορεί να μετονομαστεί, μετακινηθεί ή διαγραφεί.',
+ 'errExists' : 'Το αρχείο με όνομα "$1" υπάρχει ήδη.',
+ 'errInvName' : 'Μη έγκυρο όνομα αρχείου.',
+ 'errFolderNotFound' : 'Ο φάκελος δε βρέθηκε.',
+ 'errFileNotFound' : 'Το αρχείο δε βρέθηκε.',
+ 'errTrgFolderNotFound' : 'Ο φάκελος "$1" δε βρέθηκε.',
+ 'errPopup' : 'Το πρόγραμμα πλήγησης εμπόδισε το άνοιγμα αναδυόμενου παραθύρου. Για ανοίξετε το αρχείο ενεργοποιήστε το στις επιλογές του περιηγητή.',
+ 'errMkdir' : 'Η δυμιουργία του φακέλου "$1" δεν ήταν δυνατή.',
+ 'errMkfile' : 'Η δημιουργία του αρχείου "$1" δεν ήταν δυνατή.',
+ 'errRename' : 'Η μετονομασία του αρχείου "$1" δεν ήταν δυνατή.',
+ 'errCopyFrom' : 'Δεν επιτρέπεται η αντιγραφή αρχείων από το volume "$1".',
+ 'errCopyTo' : 'Δεν επιτρέπεται η αντιγραφή αρχείων στο volume "$1".',
+ 'errUploadCommon' : 'Πρόβλημα κατά το upload.',
+ 'errUpload' : 'Το αρχείο "$1" δεν μπόρεσε να γίνει upload.',
+ 'errUploadNoFiles' : 'Δεν βρέθηκαν αρχεία για upload.',
+ 'errMaxSize' : 'Τα δεδομένα υπερβαίνουν το επιτρεπόμενο μέγιστο μέγεθος δεδομένων.',
+ 'errFileMaxSize' : 'Το αρχείο υπερβαίνει το επιτρεπόμενο μέγιστο μέγεθος.',
+ 'errUploadMime' : 'Ο τύπος αρχείου δεν επιτρέπεται.',
+ 'errUploadTransfer' : 'Πρόβλημα μεταφοράς για το "$1".',
+ 'errSave' : 'Το "$1" δεν ήταν δυνατόν να αποθηκευτεί.',
+ 'errCopy' : 'Δεν ήταν δυνατή η αντιγραφή του "$1".',
+ 'errMove' : 'Δεν ήταν δυνατή η μετακίνηση του "$1".',
+ 'errCopyInItself' : 'Δεν είναι δυνατή η αντιγραφή του "$1" στον εαυτό του.',
+ 'errRm' : 'Δεν ήταν δυνατή η αφαίρεση του "$1".',
+ 'errExtract' : 'Δεν ήταν δυνατή η ανάγνωση των αρχείων από "$1".',
+ 'errArchive' : 'Δεν ήταν δυνατή η δημιουργία του αρχείου.',
+ 'errArcType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.',
+ 'errNoArchive' : 'Το αρχείο δεν είναι έγκυρο ή δεν υποστηρίζεται ο τύπος του.',
+ 'errCmdNoSupport' : 'Το backend δεν υποστηρίζει αυτή την εντολή.',
+ 'errReplByChild' : 'Ο φάκελος “$1” δεν μπορεί να αντικατασταθεί από οποιοδήποτε αρχείο περιέχεται σε αυτόν.',
+ 'errArcSymlinks' : 'Για λόγους ασφαλείας δεν είναι δυνατόν να διαβαστούν αρχεία που περιέχουν symlinks orη αρχεία με μη επιτρεπτά ονόματα.', // edited 24.06.2012
+ 'errArcMaxSize' : 'Το μέγεθος του αρχείου υπερβαίνει το μέγιστο επιτρεπτό όριο.',
+ 'errResize' : 'Δεν ήταν δυνατή η αλλαγή μεγέθους του "$1".',
+ 'errUsupportType' : 'Ο τύπος αρχείου δεν υποστηρίζεται.',
+ 'errNotUTF8Content' : 'Το αρχείο "$1" δεν είναι UTF-8 και δεν μπορεί να επεξεργασθεί.', // added 9.11.2011
+ 'errNetMount' : 'Δεν ήταν δυνατή η φόρτωση του "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : 'Μη υποστηριζόμενο πρωτόκολο.', // added 17.04.2012
+ 'errNetMountFailed' : 'Η φόρτωση απέτυχε.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Απαιτείται host εξυπηρετητής.', // added 18.04.2012
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Δημιουργία archive αρχείου',
+ 'cmdback' : 'Πίσω',
+ 'cmdcopy' : 'Αντιγραφή',
+ 'cmdcut' : 'Αφαίρεση',
+ 'cmddownload' : 'Μεταφόρτωση',
+ 'cmdduplicate' : 'Αντίγραφο',
+ 'cmdedit' : 'Επεξεργασία αρχείου',
+ 'cmdextract' : 'Εξαγωγή αρχείων από archive',
+ 'cmdforward' : 'Προώθηση',
+ 'cmdgetfile' : 'Επιλέξτε αρχεία',
+ 'cmdhelp' : 'Σχετικά με αυτό το λογισμικό',
+ 'cmdhome' : 'Home',
+ 'cmdinfo' : 'Πληροφορίες',
+ 'cmdmkdir' : 'Νέος φάκελος',
+ 'cmdmkfile' : 'Νέο αρχείο κειμένου',
+ 'cmdopen' : 'Άνοιγμα',
+ 'cmdpaste' : 'Επικόλληση',
+ 'cmdquicklook' : 'Προεπισκόπηση',
+ 'cmdreload' : 'Ανανέωση',
+ 'cmdrename' : 'Μετονομασία',
+ 'cmdrm' : 'Διαγραφή',
+ 'cmdsearch' : 'Έυρεση αρχείων',
+ 'cmdup' : 'Μετάβαση στο γονικό φάκελο',
+ 'cmdupload' : 'Ανέβασμα αρχείων',
+ 'cmdview' : 'Προβολή',
+ 'cmdresize' : 'Αλλαγή μεγέθους εικόνας',
+ 'cmdsort' : 'Ταξινόμηση',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Κλείσιμο',
+ 'btnSave' : 'Αποθήκευση',
+ 'btnRm' : 'Αφαίρεση',
+ 'btnApply' : 'Εφαρμογή',
+ 'btnCancel' : 'Ακύρωση',
+ 'btnNo' : 'Όχι',
+ 'btnYes' : 'Ναι',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Άνοιγμα φακέλου',
+ 'ntffile' : 'Άνοιγμα αρχείου',
+ 'ntfreload' : 'Ανανέωση περιεχομένων φακέλου',
+ 'ntfmkdir' : 'Δημιουργία φακέλου',
+ 'ntfmkfile' : 'Δημιουργία αρχείων',
+ 'ntfrm' : 'Διαγραφή αρχείων',
+ 'ntfcopy' : 'Αντιγραφή αρχείων',
+ 'ntfmove' : 'Μετακίνηση αρχείων',
+ 'ntfprepare' : 'Προετοιμασία αντιγραφής αρχείων',
+ 'ntfrename' : 'Μετονομασία αρχείων',
+ 'ntfupload' : 'Ανέβασμα αρχείων',
+ 'ntfdownload' : 'Μεταφόρτωση αρχείων',
+ 'ntfsave' : 'Αποθήκευση αρχείων',
+ 'ntfarchive' : 'Δημιουργία αρχείου',
+ 'ntfextract' : 'Εξαγωγή αρχείων από το archive',
+ 'ntfsearch' : 'Αναζήτηση αρχείων',
+ 'ntfsmth' : 'Σύστημα απασχολημένο>_<',
+ 'ntfloadimg' : 'Φόρτωση εικόνας',
+ 'ntfnetmount' : 'Φόρτωση δικτυακού δίσκου', // added 18.04.2012
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'άγνωστο',
+ 'Today' : 'Σήμερα',
+ 'Yesterday' : 'Χθές',
+ 'Jan' : 'Ιαν',
+ 'Feb' : 'Φεβ',
+ 'Mar' : 'Μαρ',
+ 'Apr' : 'Απρ',
+ 'May' : 'Μαϊ',
+ 'Jun' : 'Ιουν',
+ 'Jul' : 'Ιουλ',
+ 'Aug' : 'Αυγ',
+ 'Sep' : 'Σεπ',
+ 'Oct' : 'Οκτ',
+ 'Nov' : 'Νοεμ',
+ 'Dec' : 'Δεκ',
+ 'January' : 'Ιανουάριος',
+ 'February' : 'Φεβρουάριος',
+ 'March' : 'Μάρτιος',
+ 'April' : 'Απρίλιος',
+ 'May' : 'Μάϊος',
+ 'June' : 'Ιούνιος',
+ 'July' : 'Ιούλιος',
+ 'August' : 'Αύγουστος',
+ 'September' : 'Σεπτέμβριος',
+ 'October' : 'Οκτώβριος',
+ 'November' : 'Νοέμβριος',
+ 'December' : 'Δεκέμβριος',
+ 'Sunday' : 'Κυριακή',
+ 'Monday' : 'Δευτέρα',
+ 'Tuesday' : 'Τρίτη',
+ 'Wednesday' : 'Τετάρτη',
+ 'Thursday' : 'Πέμπτη',
+ 'Friday' : 'Παρασκευή',
+ 'Saturday' : 'Σάββατο',
+ 'Sun' : 'Κυρ',
+ 'Mon' : 'Δευ',
+ 'Tue' : 'Τρ',
+ 'Wed' : 'Τετ',
+ 'Thu' : 'Πεμ',
+ 'Fri' : 'Παρ',
+ 'Sat' : 'Σαβ',
+ /******************************** sort variants ********************************/
+ 'sortname' : 'κατά όνομα',
+ 'sortkind' : 'κατά είδος',
+ 'sortsize' : 'κατά μέγεθος',
+ 'sortdate' : 'κατά ημερομηνία',
+ 'sortFoldersFirst' : 'Πρώτα οι φάκελοι', // added 22.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Απαιτείται επιβεβαίωση',
+ 'confirmRm' : 'Είστε σίγουροι πως θέλετε να διαγράψετε τα αρχεία? Οι αλλαγές θα είναι μόνιμες!',
+ 'confirmRepl' : 'Αντικατάσταση του παλιού αρχείου με το νέο?',
+ 'apllyAll' : 'Εφαρμογή σε όλα',
+ 'name' : 'Όνομα',
+ 'size' : 'Μέγεθος',
+ 'perms' : 'Δικαιώματα',
+ 'modify' : 'Τροποποιήθηκε',
+ 'kind' : 'Είδος',
+ 'read' : 'ανάγνωση',
+ 'write' : 'εγγραφή',
+ 'noaccess' : 'δεν υπάρχει πρόσβαση',
+ 'and' : 'και',
+ 'unknown' : 'άγνωστο',
+ 'selectall' : 'Επιλογή όλων',
+ 'selectfiles' : 'Επιλογή αρχείων',
+ 'selectffile' : 'Επιλογή πρώτου αρχείου',
+ 'selectlfile' : 'Επιλογή τελευταίου αρχείου',
+ 'viewlist' : 'Προβολή λίστας',
+ 'viewicons' : 'Προβολή εικονιδίων',
+ 'places' : 'Τοποθεσίες',
+ 'calc' : 'Υπολογισμός',
+ 'path' : 'Διαδρομή',
+ 'aliasfor' : 'Ψευδώνυμο για',
+ 'locked' : 'Κλειδωμένο',
+ 'dim' : 'Διαστάσεις',
+ 'files' : 'Αρχεία',
+ 'folders' : 'Φάκελοι',
+ 'items' : 'Αντικείμενα',
+ 'yes' : 'ναι',
+ 'no' : 'όχι',
+ 'link' : 'Σύνδεσμος',
+ 'searcresult' : 'Αποτελέσματα αναζήτησης',
+ 'selected' : 'επιλεγμένα αντικείμενα',
+ 'about' : 'Σχετικά',
+ 'shortcuts' : 'Συντομεύσεις',
+ 'help' : 'Βοήθεια',
+ 'webfm' : 'εργαλείο διαχείρισης αρχείων από το web',
+ 'ver' : 'Έκδοση',
+ 'protocolver' : 'έκδοση πρωτοκόλλου',
+ 'homepage' : 'Σελίδα του project',
+ 'docs' : 'Τεκμηρίωση (documentation)',
+ 'github' : 'Κάντε μας fork στο Github',
+ 'twitter' : 'Ακολουθήστε μας στο twitter',
+ 'facebook' : 'Βρείτε μας στο facebook',
+ 'team' : 'Ομάδα',
+ 'chiefdev' : 'κύριος προγραμματιστής',
+ 'developer' : 'προγραμματιστής',
+ 'contributor' : 'συνεισφορά',
+ 'maintainer' : 'συντηρητής',
+ 'translator' : 'μεταφραστής',
+ 'icons' : 'Εικονίδια',
+ 'dontforget' : 'και μην ξεχάσεις την πετσέτα σου!',
+ 'shortcutsof' : 'Οι συντομεύσεις είναι απενεργοποιημένες',
+ 'dropFiles' : 'Κάντε drop τα αρχεία εδώ',
+ 'or' : 'ή',
+ 'selectForUpload' : 'Επιλογή αρχείων για ανέβασμα',
+ 'moveFiles' : 'Μετακίνηση αρχείων',
+ 'copyFiles' : 'Αντιγραφή αρχείων',
+ 'rmFromPlaces' : 'Αντιγραφή από τοποθεσίες',
+ 'untitled folder' : 'untitled folder',
+ 'untitled file.txt' : 'untitled file.txt',
+ 'aspectRatio' : 'Αναλογία διαστάσεων',
+ 'scale' : 'Κλίμακα',
+ 'width' : 'Πλάτος',
+ 'height' : 'Ύψος',
+ 'mode' : 'Κατάσταση',
+ 'resize' : 'Αλλαγή μεγέθους',
+ 'crop' : 'Crop',
+ 'rotate' : 'Περιστροφή',
+ 'rotate-cw' : 'Περιστροφή κατά 90 βαθμούς CW',
+ 'rotate-ccw' : 'Περιστροφή κατά 90 βαθμούς CCW',
+ 'degree' : 'Βαθμός',
+ 'netMountDialogTitle' : 'Φορτώστε δικτυακό δίσκο', // added 18.04.2012
+ 'protocol' : 'Πρωτόκολλο', // added 18.04.2012
+ 'host' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'Χρήστης', // added 18.04.2012
+ 'pass' : 'Κωδικός', // added 18.04.2012
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Άγνωστο',
+ 'kindFolder' : 'Φάκελος',
+ 'kindAlias' : 'Ψευδώνυμο (alias)',
+ 'kindAliasBroken' : 'Μη έγκυρο ψευδώνυμο',
+ // applications
+ 'kindApp' : 'Εφαρμογή',
+ 'kindPostscript' : 'Έγγραφο Postscript',
+ 'kindMsOffice' : 'Έγγραφο Microsoft Office',
+ 'kindMsWord' : 'Έγγραφο Microsoft Word',
+ 'kindMsExcel' : 'Έγγραφο Microsoft Excel',
+ 'kindMsPP' : 'Παρουσίαση Microsoft Powerpoint',
+ 'kindOO' : 'Έγγραφο Open Office',
+ 'kindAppFlash' : 'Εφαρμογή Flash',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Αρχείο Bittorrent',
+ 'kind7z' : 'Αρχείο 7z',
+ 'kindTAR' : 'Αρχείο TAR',
+ 'kindGZIP' : 'Αρχείο GZIP',
+ 'kindBZIP' : 'Αρχείο BZIP',
+ 'kindZIP' : 'Αρχείο ZIP',
+ 'kindRAR' : 'Αρχείο RAR',
+ 'kindJAR' : 'Αρχείο Java JAR',
+ 'kindTTF' : 'Γραμματοσειρά True Type',
+ 'kindOTF' : 'Γραμματοσειρά Open Type',
+ 'kindRPM' : 'Πακέτο RPM',
+ // texts
+ 'kindText' : 'Έγγραφο κειμένου',
+ 'kindTextPlain' : 'Απλό κείμενο',
+ 'kindPHP' : 'Κώδικας PHP',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'Έγγραφο HTML',
+ 'kindJS' : 'Κώδικας Javascript',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'Κώδικας C',
+ 'kindCHeader' : 'Κώδικας κεφαλίδας C',
+ 'kindCPP' : 'Κώδικας C++',
+ 'kindCPPHeader' : 'Κώδικας κεφαλίδας C++',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Κώδικας Python',
+ 'kindJava' : 'Κώδικας Java',
+ 'kindRuby' : 'Κώδικας Ruby',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'Κώδικας SQL',
+ 'kindXML' : 'Έγγραφο XML',
+ 'kindAWK' : 'Κώδικας AWK',
+ 'kindCSV' : 'Τιμές χωρισμένες με κόμμα',
+ 'kindDOCBOOK' : 'Έγγραφο Docbook XML',
+ // images
+ 'kindImage' : 'Εικόνα',
+ 'kindBMP' : 'Εικόνα BMP',
+ 'kindJPEG' : 'Εικόνα JPEG',
+ 'kindGIF' : 'Εικόνα GIF',
+ 'kindPNG' : 'Εικόνα PNG',
+ 'kindTIFF' : 'Εικόνα TIFF',
+ 'kindTGA' : 'Εικόνα TGA',
+ 'kindPSD' : 'Εικόνα Adobe Photoshop',
+ 'kindXBITMAP' : 'Εικόνα X bitmap',
+ 'kindPXM' : 'Εικόνα Pixelmator',
+ // media
+ 'kindAudio' : 'Αρχεία ήχου',
+ 'kindAudioMPEG' : 'Ήχος MPEG',
+ 'kindAudioMPEG4' : 'Εικόνα MPEG-4',
+ 'kindAudioMIDI' : 'Εικόνα MIDI',
+ 'kindAudioOGG' : 'Εικόνα Ogg Vorbis',
+ 'kindAudioWAV' : 'Εικόνα WAV',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Αρχεία media',
+ 'kindVideoDV' : 'Ταινία DV',
+ 'kindVideoMPEG' : 'Ταινία MPEG',
+ 'kindVideoMPEG4' : 'Ταινία MPEG-4',
+ 'kindVideoAVI' : 'Ταινία AVI',
+ 'kindVideoMOV' : 'Ταινία Quick Time',
+ 'kindVideoWM' : 'Ταινία Windows Media',
+ 'kindVideoFlash' : 'Ταινία flash',
+ 'kindVideoMKV' : 'Ταινία matroska',
+ 'kindVideoOGG' : 'Ταινία ogg'
+ }
+ }
+}
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.es.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.es.js
new file mode 100644
index 00000000..f3d4979f
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.es.js
@@ -0,0 +1,307 @@
+/**
+ * Spanish translation
+ * @author Julián Torres
+ * @author Julio Montoya - Fixing typos
+ * @version 2013-05-08
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.es = {
+ translator : 'Julián Torres <julian.torres@pabernosmatao.com>',
+ language : 'Español internacional',
+ direction : 'ltr',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Error',
+ 'errUnknown' : 'Error desconocido.',
+ 'errUnknownCmd' : 'Comando desconocido.',
+ 'errJqui' : 'Configuración no válida de jQuery UI. deben estar incluidos los componentes selectable, draggable y droppable.',
+ 'errNode' : 'elFinder necesita crear elementos DOM.',
+ 'errURL' : 'Configuración no válida de elFinder! La opción URL no está configurada.',
+ 'errAccess' : 'Acceso denegado.',
+ 'errConnect' : 'No se ha podido conectar con el backend.',
+ 'errAbort' : 'Conexión cancelada.',
+ 'errTimeout' : 'Conexión cancelada por timeout.',
+ 'errNotFound' : 'Backend no encontrado.',
+ 'errResponse' : 'Respuesta no válida del backend.',
+ 'errConf' : 'Configuración no válida del backend .',
+ 'errJSON' : 'El módulo PHP JSON no está instalado.',
+ 'errNoVolumes' : 'No hay disponibles volúmenes legibles.',
+ 'errCmdParams' : 'Parámetros no válidos para el comando "$1".',
+ 'errDataNotJSON' : 'los datos no estan en formato JSON.',
+ 'errDataEmpty' : 'No hay datos.',
+ 'errCmdReq' : 'La petición del backend necesita un nombre de comando.',
+ 'errOpen' : 'No se puede abrir "$1".',
+ 'errNotFolder' : 'El objeto no es una carpeta.',
+ 'errNotFile' : 'El objeto no es un archivo.',
+ 'errRead' : 'No se puede leer "$1".',
+ 'errWrite' : 'No se puede escribir en "$1".',
+ 'errPerm' : 'Permiso denegado.',
+ 'errLocked' : '"$1" está bloqueado y no puede ser renombrado, movido o borrado.',
+ 'errExists' : 'Ya existe un archivo llamado "$1".',
+ 'errInvName' : 'Nombre de archivo no válido.',
+ 'errFolderNotFound' : 'Carpeta no encontrada.',
+ 'errFileNotFound' : 'Archivo no encontrado.',
+ 'errTrgFolderNotFound' : 'Carpeta de destino "$1" no encontrada.',
+ 'errPopup' : 'El navegador impide abrir nuevas ventanas. Puede activarlo en las opciones del navegador.',
+ 'errMkdir' : 'No se puede crear la carpeta "$1".',
+ 'errMkfile' : 'No se puede crear el archivo "$1".',
+ 'errRename' : 'No se puede renombrar "$1".',
+ 'errCopyFrom' : 'No se permite copiar archivos desde el volumen "$1".',
+ 'errCopyTo' : 'No se permite copiar archivos al volumen "$1".',
+ 'errUploadCommon' : 'Error en el envio.',
+ 'errUpload' : 'No se puede subir "$1".',
+ 'errUploadNoFiles' : 'No hay archivos para subir.',
+ 'errMaxSize' : 'El tamaño de los datos excede el máximo permitido.',
+ 'errFileMaxSize' : 'El tamaño del archivo excede el máximo permitido.',
+ 'errUploadMime' : 'Tipo de archivo no permitido.',
+ 'errUploadTransfer' : 'Error al transferir "$1".',
+ 'errSave' : 'No se puede guardar "$1".',
+ 'errCopy' : 'No se puede copiar "$1".',
+ 'errMove' : 'No se puede mover "$1".',
+ 'errCopyInItself' : 'No se puede copiar "$1" en si mismo.',
+ 'errRm' : 'No se puede borrar "$1".',
+ 'errExtract' : 'No se puede extraer archivos desde "$1".',
+ 'errArchive' : 'No se puede crear el archivo.',
+ 'errArcType' : 'Tipo de archivo no soportado.',
+ 'errNoArchive' : 'El archivo no es de tipo archivo o es de un tipo no soportado.',
+ 'errCmdNoSupport' : 'El backend no soporta este comando.',
+ 'errReplByChild' : 'La carpeta “$1” no puede ser reemplazada por un elemento contenido en ella.',
+ 'errArcSymlinks' : 'Por razones de seguridad no se pueden descomprimir archivos que contengan symlinks.',
+ 'errArcMaxSize' : 'El tamaño del archivo excede el máximo permitido.',
+
+ 'errSessionExpires' : 'La sesión ha expirado por inactividad',
+ 'errCreatingTempDir' : 'No se ha podido crear al directorio temporal: "$1"',
+ 'errFtpDownloadFile' : 'No se ha podido descargar el archivo desde FTP: "$1"',
+ 'errFtpUploadFile' : 'No se ha podido cargar el archivo a FTP: "$1"',
+ 'errFtpMkdir' : 'No se ha podido crear el directorio remoto en FTP: "$1"',
+ 'errArchiveExec' : 'Se ha producido un error durante la archivación: "$1"',
+ 'errExtractExec' : 'Se ha producido un error durante la extracción de archivos: "$1"',
+ 'cmdsort' : 'Clasificar',
+ 'sortkind' : 'por tipo',
+ 'sortname' : 'por nombre',
+ 'sortsize' : 'por tamaño',
+ 'sortdate' : 'por fecha',
+ 'sortFoldersFirst' : 'Las carpetas en primer lugar',
+ 'errUploadFile' : 'No se ha podido cargar "$1".',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Crear archivo',
+ 'cmdback' : 'Atrás',
+ 'cmdcopy' : 'Copiar',
+ 'cmdcut' : 'Cortar',
+ 'cmddownload' : 'Descargar',
+ 'cmdduplicate' : 'Duplicar',
+ 'cmdedit' : 'Editar archivo',
+ 'cmdextract' : 'Extraer elementos del archivo',
+ 'cmdforward' : 'Adelante',
+ 'cmdgetfile' : 'Seleccionar archivos',
+ 'cmdhelp' : 'Acerca de este software',
+ 'cmdhome' : 'Inicio',
+ 'cmdinfo' : 'Obtener información',
+ 'cmdmkdir' : 'Nueva carpeta',
+ 'cmdmkfile' : 'Nuevo archivo de texto',
+ 'cmdopen' : 'Abrir',
+ 'cmdpaste' : 'Pegar',
+ 'cmdquicklook' : 'Previsualizar',
+ 'cmdreload' : 'Recargar',
+ 'cmdrename' : 'Cambiar nombre',
+ 'cmdrm' : 'Eliminar',
+ 'cmdsearch' : 'Buscar archivos',
+ 'cmdup' : 'Ir a la carpeta raíz',
+ 'cmdupload' : 'Subir archivos',
+ 'cmdview' : 'Ver',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Cerrar',
+ 'btnSave' : 'Guardar',
+ 'btnRm' : 'Eliminar',
+ 'btnCancel' : 'Cancelar',
+ 'btnNo' : 'No',
+ 'btnYes' : 'Sí',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Abrir carpeta',
+ 'ntffile' : 'Abrir archivo',
+ 'ntfreload' : 'Actualizar contenido de la carpeta',
+ 'ntfmkdir' : 'Creando directorio',
+ 'ntfmkfile' : 'Creando archivos',
+ 'ntfrm' : 'Eliminando archivos',
+ 'ntfcopy' : 'Copiar archivos',
+ 'ntfmove' : 'Mover archivos',
+ 'ntfprepare' : 'Preparar copia de archivos',
+ 'ntfrename' : 'Renombrar archivos',
+ 'ntfupload' : 'Subiendo archivos',
+ 'ntfdownload' : 'Descargando archivos',
+ 'ntfsave' : 'Guardar archivos',
+ 'ntfarchive' : 'Creando archivo',
+ 'ntfextract' : 'Extrayendo elementos del archivo',
+ 'ntfsearch' : 'Buscando archivos',
+ 'ntfsmth' : 'Haciendo algo',
+ 'ntfloadimg' : 'Cargando imagen',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'desconocida',
+ 'Today' : 'Hoy',
+ 'Yesterday' : 'Ayer',
+ 'Jan' : 'Ene',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Abr',
+ 'May' : 'May',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Ago',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Oct',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dic',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Se necesita confirmación',
+ 'confirmRm' : '¿Está seguro de querer eliminar archivos? Esto no tiene vuelta atrás!',
+ 'confirmRepl' : '¿Reemplazar el antiguo archivo con el nuevo?',
+ 'apllyAll' : 'Aplicar a todo',
+ 'name' : 'Nombre',
+ 'size' : 'Tamaño',
+ 'perms' : 'Permisos',
+ 'modify' : 'Modificado',
+ 'kind' : 'Tipo',
+ 'read' : 'lectura',
+ 'write' : 'escritura',
+ 'noaccess' : 'sin acceso',
+ 'and' : 'y',
+ 'unknown' : 'desconocido',
+ 'selectall' : 'Seleccionar todos los archivos',
+ 'selectfiles' : 'Seleccionar archivo(s)',
+ 'selectffile' : 'Seleccionar primer archivo',
+ 'selectlfile' : 'Seleccionar último archivo',
+ 'viewlist' : 'ver como lista',
+ 'viewicons' : 'Ver como iconos',
+ 'places' : 'Lugares',
+ 'calc' : 'Calcular',
+ 'path' : 'Ruta',
+ 'aliasfor' : 'Alias para',
+ 'locked' : 'Bloqueado',
+ 'dim' : 'Dimensiones',
+ 'files' : 'Archivos',
+ 'folders' : 'Carpetas',
+ 'items' : 'Elementos',
+ 'yes' : 'si',
+ 'no' : 'no',
+ 'link' : 'Enlace',
+ 'searcresult' : 'Resultados de la búsqueda',
+ 'selected' : 'elementos seleccionados',
+ 'about' : 'Acerca',
+ 'shortcuts' : 'Accesos directos',
+ 'help' : 'Ayuda',
+ 'webfm' : 'Administrador de archivos web',
+ 'ver' : 'Version',
+ 'protocolver' : 'versión del protocolo',
+ 'homepage' : 'Inicio',
+ 'docs' : 'Documentación',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Síguenos en Twitter',
+ 'facebook' : 'Únete a nosotros en Facebook',
+ 'team' : 'Equipo',
+ 'chiefdev' : 'desarrollador jefe',
+ 'developer' : 'desarrollador',
+ 'contributor' : 'contribuyente',
+ 'maintainer' : 'mantenedor',
+ 'translator' : 'traductor',
+ 'icons' : 'Iconos',
+ 'dontforget' : 'y no olvide traer su toalla',
+ 'shortcutsof' : 'Accesos directos desactivados',
+ 'dropFiles' : 'Arrastre archivos aquí',
+ 'or' : 'o',
+ 'selectForUpload' : 'Seleccione archivos para subir',
+ 'moveFiles' : 'Mover archivos',
+ 'copyFiles' : 'Copiar archivos',
+ 'rmFromPlaces' : 'Eliminar en sus ubicaciones',
+ 'untitled folder' : 'carpeta sin título',
+ 'untitled archivo.txt' : 'archivo.txt sin título',
+ 'mode' : 'Modo',
+ 'resize' : 'Redimensionar',
+ 'crop' : 'Recortar',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Desconocido',
+ 'kindFolder' : 'Carpeta',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Alias roto',
+ // applications
+ 'kindApp' : 'Aplicación',
+ 'kindPostscript' : 'Documento Postscript',
+ 'kindMsOffice' : 'Documento Microsoft Office',
+ 'kindMsWord' : 'Documento Microsoft Word',
+ 'kindMsExcel' : 'Documento Microsoft Excel',
+ 'kindMsPP' : 'Presentación Microsoft Powerpoint',
+ 'kindOO' : 'Documento Open Office',
+ 'kindAppFlash' : 'Aplicación Flash',
+ 'kindPDF' : 'Documento PDF',
+ 'kindTorrent' : 'Archivo Bittorrent',
+ 'kind7z' : 'Archivo 7z',
+ 'kindTAR' : 'Archivo TAR',
+ 'kindGZIP' : 'Archivo GZIP',
+ 'kindBZIP' : 'Archivo BZIP',
+ 'kindZIP' : 'Archivo ZIP',
+ 'kindRAR' : 'Archivo RAR',
+ 'kindJAR' : 'Archivo Java JAR',
+ 'kindTTF' : 'Fuente True Type',
+ 'kindOTF' : 'Fuente Open Type',
+ 'kindRPM' : 'Paquete RPM',
+ // texts
+ 'kindText' : 'Documento de texto',
+ 'kindTextPlain' : 'Texto plano',
+ 'kindPHP' : 'Código PHP',
+ 'kindCSS' : 'Hoja de estilo CSS',
+ 'kindHTML' : 'Documento HTML',
+ 'kindJS' : 'Código Javascript',
+ 'kindRTF' : 'Documento RTF',
+ 'kindC' : 'Código C source',
+ 'kindCHeader' : 'Código C header',
+ 'kindCPP' : 'Código C++',
+ 'kindCPPHeader' : 'Código C++ header',
+ 'kindShell' : 'Script Unix shell',
+ 'kindPython' : 'Código Python',
+ 'kindJava' : 'Código Java',
+ 'kindRuby' : 'Código Ruby',
+ 'kindPerl' : 'Código Perl',
+ 'kindSQL' : 'SCódigo QL',
+ 'kindXML' : 'Documento XML',
+ 'kindAWK' : 'Código AWK source',
+ 'kindCSV' : 'Documento CSV (valores separados por comas)',
+ 'kindDOCBOOK' : 'Documento Docbook XML',
+ // images
+ 'kindImage' : 'Imagen',
+ 'kindBMP' : 'Imagen BMP',
+ 'kindJPEG' : 'Imagen JPEG',
+ 'kindGIF' : 'Imagen GIF',
+ 'kindPNG' : 'Imagen PNG',
+ 'kindTIFF' : 'Imagen TIFF',
+ 'kindTGA' : 'Imagen TGA',
+ 'kindPSD' : 'Imagen Adobe Photoshop',
+ 'kindXBITMAP' : 'Imagen X bitmap',
+ 'kindPXM' : 'Imagen Pixelmator',
+ // media
+ 'kindAudio' : 'Audio media',
+ 'kindAudioMPEG' : 'Audio MPEG',
+ 'kindAudioMPEG4' : 'Audio MPEG-4',
+ 'kindAudioMIDI' : 'Audio MIDI',
+ 'kindAudioOGG' : 'Audio Ogg Vorbis',
+ 'kindAudioWAV' : 'Audio WAV',
+ 'AudioPlaylist' : 'Playlist MP3',
+ 'kindVideo' : 'Video media',
+ 'kindVideoDV' : 'Película DV',
+ 'kindVideoMPEG' : 'Película MPEG',
+ 'kindVideoMPEG4' : 'Película MPEG-4',
+ 'kindVideoAVI' : 'Película AVI',
+ 'kindVideoMOV' : 'Película Quick Time',
+ 'kindVideoWM' : 'Película Windows Media',
+ 'kindVideoFlash' : 'Película Flash',
+ 'kindVideoMKV' : 'Película Matroska MKV',
+ 'kindVideoOGG' : 'Película Ogg'
+ }
+ }
+}
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.fa.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.fa.js
new file mode 100644
index 00000000..70ece5c3
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.fa.js
@@ -0,0 +1,339 @@
+/**
+ * Persian-Farsi Translation
+ * @author Keyhan Mohammadpour
+ * @version 2012-04-07
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.fa = {
+ translator : 'Keyhan Mohammadpour <keyhan_universityworks@yahoo.com>',
+ language : 'فارسی',
+ direction : 'rtl',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'خطا',
+ 'errUnknown' : 'خطای ناشناخته .',
+ 'errUnknownCmd' : 'دستور ناشناخته .',
+ 'errJqui' : 'تنظیمات کتابخانه JQuery UI شما به درستی تنظیم نشده است . این کتابخانه بایستی شامل Resizable ، Draggable و Droppable باشد .',
+ 'errNode' : 'شی elfinder به درستی ایجاد نشده است .',
+ 'errURL' : 'تنظیمات elfinder شما به درستی انجام نشده است . تنظیم Url را به درستی انجام دهید .',
+ 'errAccess' : 'محدودیت سطح دسترسی',
+ 'errAbort' : 'ارتباط قطع شده است .',
+ 'errTimeout' : 'مهلت زمانی Connection شما به انتها رسیده ایت .',
+ 'errNotFound' : 'تنظیم Backend یافت نشد .',
+ 'errResponse' : 'پاسخ دریافتی از Backend صحیح نمی باشد .',
+ 'errConf' : 'تنطیمات Backend به درستی انجام نشده است .',
+ 'errJSON' : 'ماژول PHP JSON نصب نگردیده است .',
+ 'errNoVolumes' : 'درایوهای قابل خواندن یافت نشدند .',
+ 'errCmdParams' : 'پارامترهای دستور "$1" به صورت صحیح داده نشده است .',
+ 'errDataNotJSON' : 'داده ها در قالب JSON نمی باشند .',
+ 'errDataEmpty' : 'داده ها تهی می باشند .',
+ 'errCmdReq' : 'درخواست از سمت Backend نیازمند نام دستور می باشد .',
+ 'errOpen' : 'قادر به باز نمودن "$1" نمی باشد .',
+ 'errNotFolder' : 'شی به صورت پوشه نمی باشد .',
+ 'errNotFile' : 'شی به صورت فایل نمی باشد .',
+ 'errRead' : 'قادر به خواندن "$1" نمی باشد .',
+ 'errWrite' : 'قادر به نوشتن در درون "$1" نمی باشد .',
+ 'errPerm' : 'شما مجاز به انجام این عمل نمی باشید .',
+ 'errLocked' : '"$1"قفل گردیده است و شما قادر به تغییر نام ، حذف و یا جابجایی آن نمی باشید .',
+ 'errExists' : 'فایلی با نام "$1" هم اکنون وجود دارد .',
+ 'errInvName' : 'نام انتخابی شما صحیح نمی باشد .',
+ 'errFolderNotFound' : 'پوشه مورد نظر شما یافت نشد .',
+ 'errFileNotFound' : 'فایل مورد نظر شما یافت نشد .',
+ 'errTrgFolderNotFound' : 'پوشه مقصد با نام "$1" یافت نشد .',
+ 'errPopup' : 'مرورگر شما ار باز شدن پنجره popup جلوگیری می نماید ، اطفا تنطیم مربوطه را در مرورگر خود فعال نمایید .',
+ 'errMkdir' : 'قادر به ایجاد نمودن پوشه ای با نام "$1" نمی باشد .',
+ 'errMkfile' : 'قادر به ابجاد نمودن فایلی با نبم "$1" نمی باشد .',
+ 'errRename' : 'قادر به تغییر نام فایل "$1" نمی باشد .',
+ 'errCopyFrom' : 'کپی نمودن از درایو با نام "$1" امکان پذیر نمی باشد .',
+ 'errCopyTo' : 'کپی نمودن به درایو با نام "$1" امکان پذیر نمی باشد .',
+ 'errUploadCommon' : 'خطای بارگذاری ',
+ 'errUpload' : 'قادر به بارگذاری "$1" نمی باشد .',
+ 'errUploadNoFiles' : 'هیچ فایلی برای بارگذاری یافت نشد .',
+ 'errMaxSize' : 'حجم داده ها بیشتر از حد مجاز تعیین شده است .',
+ 'errFileMaxSize' : 'حجم فایل بیشتر از حد مجاز تعیین شده است .',
+ 'errUploadMime' : 'نوع فایل انتخابی شما مجاز نمی باشد .',
+ 'errUploadTransfer' : 'در تبادل "$1" خطایی رخ داده است .',
+ 'errSave' : 'قادر به دخیره کردن "$1" نمی باشد .',
+ 'errCopy' : 'قادر به کپی نمودن "$1" نمی باشد .',
+ 'errMove' : 'قادر به جابجایی "$1" نمی باشد .',
+ 'errCopyInItself' : 'قادر به کپی نمودن "$1" در درون خودش نمی باشد .',
+ 'errRm' : 'قادر به حذف نمودن "$1" نمی باشد .',
+ 'errExtract' : 'قادر به استخراج فایل فشرده "$1" نمی باشد .',
+ 'errArchive' : 'قادر به ایجاد آرشیو نمی باشد .',
+ 'errArcType' : 'نوع ناشناخته برای آرشیو .',
+ 'errNoArchive' : 'قادر به آرشیو نمودن فایل نمی باشد و یا نوع فایل در نوع های آرشیو تعیین نشده است .',
+ 'errCmdNoSupport' : 'Backend قادر به پشتیبانی از این دستور نمی باشد .',
+ 'errReplByChild' : 'پوشه با نام "$1"قادر به تغییر با محتویات درونی خود نمی باشد .',
+ 'errArcSymlinks' : 'به دلایل مسائل امنیتی قادر به استخراج آرشیو های دارای symlinks نمی باشد .',
+ 'errArcMaxSize' : 'فایل های آرشیو شده به حداکثر اندازه تعیین شده رسیده اند .',
+ 'errResize' : 'قادر به تغییر اندازه "$1" نمی باشد .',
+ 'errUsupportType' : 'نوع فایل شما قابل پشتیبانی نمی باشد .',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'ساختن آرشیو',
+ 'cmdback' : 'قبلی',
+ 'cmdcopy' : 'کپی',
+ 'cmdcut' : 'جابجایی',
+ 'cmddownload' : 'بارگیری',
+ 'cmdduplicate' : 'تکثیر نمودن',
+ 'cmdedit' : 'ویرایش فایل',
+ 'cmdextract' : 'از حالت فشرده خارج نمودن',
+ 'cmdforward' : 'بعدی',
+ 'cmdgetfile' : 'انتخاب فایل ها',
+ 'cmdhelp' : 'درباره این فایل',
+ 'cmdhome' : 'صفحه اصلی',
+ 'cmdinfo' : 'دریافت اطلاعات',
+ 'cmdmkdir' : 'پوشه جدید',
+ 'cmdmkfile' : 'فایل متنی جدید',
+ 'cmdopen' : 'باز نمودن',
+ 'cmdpaste' : 'چسباندن',
+ 'cmdquicklook' : 'پیش نمایش',
+ 'cmdreload' : 'بارگذاری مجدد',
+ 'cmdrename' : 'تغییر نام',
+ 'cmdrm' : 'حذف',
+ 'cmdsearch' : 'جستجو',
+ 'cmdup' : 'رفتن به پوشه والد',
+ 'cmdupload' : 'بارگذاری فایل ها',
+ 'cmdview' : 'نمایش',
+ 'cmdresize' : 'تغییر اندازه فایل',
+ 'cmdsort' : 'مرتب سازی',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'بستن',
+ 'btnSave' : 'ذخیره',
+ 'btnRm' : 'حذف',
+ 'btnApply' : 'اعمال',
+ 'btnCancel' : 'انصراف',
+ 'btnNo' : 'خیر',
+ 'btnYes' : 'بلی',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'باز نمودن پوشه',
+ 'ntffile' : 'باز نمدن فایل',
+ 'ntfreload' : 'بازخوانی مجدد محتویات پوشه',
+ 'ntfmkdir' : 'ساختن پوشه',
+ 'ntfmkfile' : 'ساختن فایل',
+ 'ntfrm' : 'حذف فایل',
+ 'ntfcopy' : 'کپی فایل',
+ 'ntfmove' : 'انتقال فایل',
+ 'ntfprepare' : 'آماده شدن برای کپی نمودن فایل ها',
+ 'ntfrename' : 'تغییر نام فایل',
+ 'ntfupload' : 'بارگذاری فایل',
+ 'ntfdownload' : 'بارگیری فایل',
+ 'ntfsave' : 'ذخیره نمودن فایل ها',
+ 'ntfarchive' : 'در حال ساختن آرشیو',
+ 'ntfextract' : 'استخراج فایل ها از آرشیو',
+ 'ntfsearch' : 'در حال جستجو فایل ها',
+ 'ntfsmth' : 'درحال انجام عملیات ....',
+ 'ntfloadimg' : 'در حال لود نمودن تصویر',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'ناشناخته',
+ 'Today' : 'امروز',
+ 'Yesterday' : 'دیروز',
+ 'Jan' : 'بهمن',
+ 'Feb' : 'اسفند',
+ 'Mar' : 'فروردین',
+ 'Apr' : 'اردیبهشت',
+ 'May' : 'خرداد',
+ 'Jun' : 'تیر',
+ 'Jul' : 'مرداد',
+ 'Aug' : 'شهریور',
+ 'Sep' : 'مهر',
+ 'Oct' : 'آبان',
+ 'Nov' : 'آذر',
+ 'Dec' : 'دی',
+ 'January' : 'بهمن',
+ 'February' : 'اسفند',
+ 'March' : 'فروردین',
+ 'April' : 'اردیبهشت',
+ 'May' : 'خرداد',
+ 'June' : 'تیر',
+ 'July' : 'مرداد',
+ 'August' : 'شهریور',
+ 'September' : 'مهر',
+ 'October' : 'آبان',
+ 'November' : 'آذر',
+ 'December' : 'دی',
+ 'Sunday' : 'یک شنبه',
+ 'Monday' : 'دوشنبه',
+ 'Tuesday' : 'سه شنبه',
+ 'Wednesday' : 'چهار شنبه',
+ 'Thursday' : 'پنج شنبه',
+ 'Friday' : 'جمعه',
+ 'Saturday' : 'شنبه',
+ 'Sun' : 'یک شنبه',
+ 'Mon' : 'دو شنبه',
+ 'Tue' : 'سه شنبه',
+ 'Wed' : 'چهار شنبه',
+ 'Thu' : 'پنج شنبه',
+ 'Fri' : 'جمعه',
+ 'Sat' : 'شنبه',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'بر اساس نام (پوشه ها در ابتدا قرار می گیرند ) .',
+ 'sortkindDirsFirst' : 'بر اساس نوع (پوشه ها در ابتدا قرار می گیرند ) .',
+ 'sortsizeDirsFirst' : 'بر اساس اندازه (پوشه ها در ابتدا قرار می گیرند ) .',
+ 'sortdateDirsFirst' : 'بر اساس تاریخ (پوشه ها در ابتدا قرار می گیرند ) .',
+ 'sortname' : 'بر اساس نام',
+ 'sortkind' : 'بر اساس نوع',
+ 'sortsize' : 'بر اساس اندازه',
+ 'sortdate' : 'بر اساس تاریخ',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'تاییدیه نهایی نیاز است .',
+ 'confirmRm' : 'آیا مطمثن به انجام عملیات حذف می باشید ؟ آیتم های حدف شده قابل بازیابی نمی باشند !',
+ 'confirmRepl' : 'آیا فایل قدیم با فایل جدید جایگزین شود ؟',
+ 'apllyAll' : 'اعمال تغییرات به همه',
+ 'name' : 'نام',
+ 'size' : 'اندازه',
+ 'perms' : 'مجوزها',
+ 'modify' : 'تغییر داده شده',
+ 'kind' : 'نوع',
+ 'read' : 'خواندن',
+ 'write' : 'نوشتن',
+ 'noaccess' : 'دسترسی وجود ندارد',
+ 'and' : 'و',
+ 'unknown' : 'ناشناخته',
+ 'selectall' : 'انتخاب همه فایل ها',
+ 'selectfiles' : 'انتخاب یکی یا همه فایل ها',
+ 'selectffile' : 'انتخاب اولین فایل',
+ 'selectlfile' : 'انتخاب آخرین فایل',
+ 'viewlist' : 'نمایش به صورت لیست',
+ 'viewicons' : 'نمایش با آیکون ها',
+ 'places' : 'محل ها',
+ 'calc' : 'محاسبه',
+ 'path' : 'مسیر',
+ 'aliasfor' : 'نام مستعار برای',
+ 'locked' : 'قفل شده',
+ 'dim' : 'ابعاد',
+ 'files' : 'فایل ها',
+ 'folders' : 'پوشه ها',
+ 'items' : 'آیتم ها',
+ 'yes' : 'بلی',
+ 'no' : 'خیر',
+ 'link' : 'پیوند',
+ 'searcresult' : 'جستجو در نتایج',
+ 'selected' : 'آیتم های انتخاب شده',
+ 'about' : 'درباره',
+ 'shortcuts' : 'میانبرها',
+ 'help' : 'راهنما',
+ 'webfm' : 'مدیر وب فایل',
+ 'ver' : 'نسخه',
+ 'protocol' : 'نسخه پروتکل',
+ 'homepage' : 'صفحه اصلی پروژه',
+ 'docs' : 'مستندات',
+ 'github' : 'دنبال کردن ما بر روی Github',
+ 'twitter' : 'دنبال کردن ما در Twitter',
+ 'facebook' : 'به ما در facebook بپیوندید',
+ 'team' : 'گروه',
+ 'chiefdev' : 'سازنده اصلی برنامه',
+ 'developer' : 'سازنده',
+ 'contributor' : 'همکار',
+ 'maintainer' : 'پشتیبان',
+ 'translator' : 'مترجم',
+ 'icons' : 'آیکون ها',
+ 'dontforget' : 'فراموش نشود',
+ 'shortcutsof' : 'میانبرها غیرفعال شده اند .',
+ 'dropFiles' : 'فایل های خود را در این محل رها نمایید .',
+ 'or' : 'یا',
+ 'selectForUpload' : 'انتخاب فایل ها برای بارگذاری',
+ 'moveFiles' : 'انتقال فایل ها',
+ 'copyFiles' : 'کپی فایل ها',
+ 'rmFromPlaces' : 'حدف',
+ 'untitled folder' : 'پوشه بدون نام',
+ 'untitled file.txt' : 'فایل متنی بدون نام',
+ 'aspectRatio' : 'نسبت تصویر',
+ 'scale' : 'مقیاس',
+ 'width' : 'طول',
+ 'height' : 'ارتفاع',
+ 'mode' : 'مد',
+ 'resize' : 'تغییر اندازه',
+ 'crop' : 'بریدن',
+ 'rotate' : 'چرخاندن',
+ 'rotate-cw' : 'چرخاندن 90 درجه در جهت عقربه های ساعت',
+ 'rotate-ccw' : 'چرخاندن 90 درجه در جهت خلاف عقربه های ساعت',
+ 'degree' : 'درجه',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Unknown',
+ 'kindFolder' : 'Folder',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Broken alias',
+ // applications
+ 'kindApp' : 'Application',
+ 'kindPostscript' : 'Postscript document',
+ 'kindMsOffice' : 'Microsoft Office document',
+ 'kindMsWord' : 'Microsoft Word document',
+ 'kindMsExcel' : 'Microsoft Excel document',
+ 'kindMsPP' : 'Microsoft Powerpoint presentation',
+ 'kindOO' : 'Open Office document',
+ 'kindAppFlash' : 'Flash application',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent file',
+ 'kind7z' : '7z archive',
+ 'kindTAR' : 'TAR archive',
+ 'kindGZIP' : 'GZIP archive',
+ 'kindBZIP' : 'BZIP archive',
+ 'kindZIP' : 'ZIP archive',
+ 'kindRAR' : 'RAR archive',
+ 'kindJAR' : 'Java JAR file',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM package',
+ // texts
+ 'kindText' : 'Text document',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP source',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML document',
+ 'kindJS' : 'Javascript source',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C source',
+ 'kindCHeader' : 'C header source',
+ 'kindCPP' : 'C++ source',
+ 'kindCPPHeader' : 'C++ header source',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python source',
+ 'kindJava' : 'Java source',
+ 'kindRuby' : 'Ruby source',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL source',
+ 'kindXML' : 'XML document',
+ 'kindAWK' : 'AWK source',
+ 'kindCSV' : 'Comma separated values',
+ 'kindDOCBOOK' : 'Docbook XML document',
+ // images
+ 'kindImage' : 'Image',
+ 'kindBMP' : 'BMP image',
+ 'kindJPEG' : 'JPEG image',
+ 'kindGIF' : 'GIF Image',
+ 'kindPNG' : 'PNG Image',
+ 'kindTIFF' : 'TIFF image',
+ 'kindTGA' : 'TGA image',
+ 'kindPSD' : 'Adobe Photoshop image',
+ 'kindXBITMAP' : 'X bitmap image',
+ 'kindPXM' : 'Pixelmator image',
+ // media
+ 'kindAudio' : 'Audio media',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Video media',
+ 'kindVideoDV' : 'DV movie',
+ 'kindVideoMPEG' : 'MPEG movie',
+ 'kindVideoMPEG4' : 'MPEG-4 movie',
+ 'kindVideoAVI' : 'AVI movie',
+ 'kindVideoMOV' : 'Quick Time movie',
+ 'kindVideoWM' : 'Windows Media movie',
+ 'kindVideoFlash' : 'Flash movie',
+ 'kindVideoMKV' : 'Matroska movie',
+ 'kindVideoOGG' : 'Ogg movie'
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.fr.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.fr.js
new file mode 100644
index 00000000..0693229e
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.fr.js
@@ -0,0 +1,338 @@
+/**
+ * French translation
+ * @author Régis Guyomarch , Benoit Delachaux
+ * @version 2012-08-11
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.fr = {
+ translator : 'Régis Guyomarch <regisg@gmail.com>Benoit Delachaux <benorde33@gmail.com>',
+ language : 'française',
+ direction : 'ltr',
+ dateFormat : 'd M, Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Erreur',
+ 'errUnknown' : 'Erreur inconnue.',
+ 'errUnknownCmd' : 'Commande inconnue.',
+ 'errJqui' : 'Mauvaise configuration de jQuery UI. Les composants Selectable, draggable et droppable doivent être inclus.',
+ 'errNode' : 'elFinder requiert que l\'élément DOM ait été créé.',
+ 'errURL' : 'Mauvaise configuration d\'elFinder ! L\'option URL n\a pas été définie.',
+ 'errAccess' : 'Accès refusé.',
+ 'errConnect' : 'Impossible de se connecter au backend.',
+ 'errAbort' : 'Connexion interrompue.',
+ 'errTimeout' : 'Délai de connexion dépassé.',
+ 'errNotFound' : 'Backend non trouvé.',
+ 'errResponse' : 'Mauvaise réponse du backend.',
+ 'errConf' : 'Mauvaise configuration du backend.',
+ 'errJSON' : 'Le module PHP JSON n\'est pas installé.',
+ 'errNoVolumes' : 'Aucun volume lisible.',
+ 'errCmdParams' : 'Mauvais Paramétrage de la commande "$1".',
+ 'errDataNotJSON' : 'Les données ne sont pas au format JSON.',
+ 'errDataEmpty' : 'Données inexistantes.',
+ 'errCmdReq' : 'La requête au Backend doit comporter le nom de la commande.',
+ 'errOpen' : 'Impossible d\'ouvrir "$1".',
+ 'errNotFolder' : 'Cet objet n\'est pas un dossier.',
+ 'errNotFile' : 'Cet objet n\'est pas un fichier.',
+ 'errRead' : 'Impossible de lire "$1".',
+ 'errWrite' : 'Impossible d\'écrire dans "$1".',
+ 'errPerm' : 'Permission refusée.',
+ 'errLocked' : '"$1" est verrouillé et ne peut être déplacé ou supprimé.',
+ 'errExists' : 'Un fichier nommé "$1" existe déjà.',
+ 'errInvName' : 'Nom de fichier incorrect.',
+ 'errFolderNotFound' : 'Dossier non trouvé.',
+ 'errFileNotFound' : 'Fichier non trouvé.',
+ 'errTrgFolderNotFound' : 'Dossier destination "$1" non trouvé.',
+ 'errPopup' : 'Le navigateur web a empêché l\'ouverture d\'une fenêtre "popup". Pour ouvrir le fichier, modifiez les options du navigateur web.',
+ 'errMkdir' : 'Impossible de créer le dossier "$1".',
+ 'errMkfile' : 'impossible de créer le fichier "$1".',
+ 'errRename' : 'Impossible de renommer "$1".',
+ 'errCopyFrom' : 'Interdiction de copier des fichiers depuis le volume "$1".',
+ 'errCopyTo' : 'Interdiction de copier des fichiers vers le volume "$1".',
+ 'errUpload' : 'Erreur lors de l\'envoi du fichier.',
+ 'errUploadFile' : 'Impossible d\'envoyer "$1".',
+ 'errUploadNoFiles' : 'Aucun fichier à envoyer.',
+ 'errUploadTotalSize' : 'Les données dépassent la taille maximale allouée.',
+ 'errUploadFileSize' : 'Le fichier dépasse la taille maximale allouée.',
+ 'errUploadMime' : 'Type de fichier non autorisé.',
+ 'errUploadTransfer' : '"$1" erreur transfert.',
+ 'errNotReplace' : 'L\'objet "$1" existe déjà à cet endroit et ne peut être remplacé par un objet d\'un type différent.', // new
+ 'errReplace' : 'Impossible de remplacer "$1".', // added 11.08.1013
+ 'errSave' : 'Impossible de sauvegarder "$1".',
+ 'errCopy' : 'Impossible de copier "$1".',
+ 'errMove' : 'Impossible de déplacer "$1".',
+ 'errCopyInItself' : 'Impossible de copier "$1" sur lui-même.',
+ 'errRm' : 'Impossible de supprimer "$1".',
+ 'errExtract' : 'Impossible d\'extraire les fichier de "$1".',
+ 'errExtract' : 'Imbossible d\'extraire les fichiers à partir de "$1".', // added 11.08.2012
+ 'errArchive' : 'Impossible de créer l\'archive.',
+ 'errArcType' : 'Type d\'archive non supporté.',
+ 'errNoArchive' : 'Le fichier n\'est pas une archive, ou c\'est un type d\'archive non supporté.',
+ 'errCmdNoSupport' : 'Le Backend ne prend pas en charge cette commande.',
+ 'errReplByChild' : 'Le dossier “$1” ne peut pas être remplacé par un élément qu\'il contient.',
+ 'errArcSymlinks' : 'Par mesure de sécurité, il est défendu d\'extraire une archive contenant des liens symboliques.',
+ 'errArcMaxSize' : 'Les fichiers de l\'archive excèdent la taille maximale autorisée.',
+ 'errResize' : 'Impossible de redimensionner "$1".',
+ 'errResizeDegree' : 'Degré de rotation invalide.', // added 11.8.2013
+ 'errResizeRotate' : 'L\'image ne peut pas être tournée.', // added 11.8.2013
+ 'errResizeSize' : 'Dimension de l\'image non-valide.', // added 11.8.2013
+ 'errResizeNoChange' : 'L\'image n\'est pas redimensionnable.', // added 11.8.2013
+ 'errUsupportType' : 'Type de fichier non supporté.',
+ 'errNotUTF8Content' : 'Le fichier "$1" n\'est pas en UTF-8, il ne peut être édité.', // added 9.11.2011
+ 'errNetMount' : 'Impossible de monter "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : 'Protocol non supporté.', // added 17.04.2012
+ 'errNetMountFailed' : 'Echec du montage.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Hôte requis.', // added 18.04.2012
+ 'errSessionExpires' : 'Votre session a expiré en raison de son inactivité',
+ 'errCreatingTempDir' : 'Impossible de créer le répertoire temporaire : "$1"',
+ 'errFtpDownloadFile' : 'Impossible de télécharger le file depuis l\'accès FTP : "$1"',
+ 'errFtpUploadFile' : 'Impossible d\'envoyer le fichier vers l\'accès FTP : "$1"',
+ 'errFtpMkdir' : 'Impossible de créer un répertoire distant sur l\'accès FTP :"$1"',
+ 'errArchiveExec' : 'Erreur lors de l\'archivage des fichiers : "$1"',
+ 'errExtractExec' : 'Erreur lors de l\'extraction des fichiers : "$1"',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Créer une archive',
+ 'cmdback' : 'Précédent',
+ 'cmdcopy' : 'Copier',
+ 'cmdcut' : 'Couper',
+ 'cmddownload' : 'Télécharger',
+ 'cmdduplicate' : 'Dupliquer',
+ 'cmdedit' : 'Éditer le fichier',
+ 'cmdextract' : 'Extraire les fichiers de l\'archive',
+ 'cmdforward' : 'Suivant',
+ 'cmdgetfile' : 'Sélectionner les fichiers',
+ 'cmdhelp' : 'À propos de ce logiciel',
+ 'cmdhome' : 'Accueil',
+ 'cmdinfo' : 'Informations',
+ 'cmdmkdir' : 'Nouveau dossier',
+ 'cmdmkfile' : 'Nouveau fichier texte',
+ 'cmdopen' : 'Ouvrir',
+ 'cmdpaste' : 'Coller',
+ 'cmdquicklook' : 'Prévisualiser',
+ 'cmdreload' : 'Actualiser',
+ 'cmdrename' : 'Renommer',
+ 'cmdrm' : 'Supprimer',
+ 'cmdsearch' : 'Trouver les fichiers',
+ 'cmdup' : 'Remonter au dossier parent',
+ 'cmdupload' : 'Envoyer les fichiers',
+ 'cmdview' : 'Vue',
+ 'cmdresize' : 'Redimensionner l\'image',
+ 'cmdsort' : 'Trier',
+ 'cmdnetmount' : 'Monter un volume réseau',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Fermer',
+ 'btnSave' : 'Sauvegarder',
+ 'btnRm' : 'Supprimer',
+ 'btnCancel' : 'Annuler',
+ 'btnApply' : 'Appliquer', // added 11.08.2013
+ 'btnNo' : 'Non',
+ 'btnYes' : 'Oui',
+ 'btnMount' : 'Monter', // added 18.04.2012
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Ouvrir le dossier',
+ 'ntffile' : 'Ouvrir le fichier',
+ 'ntfreload' : 'Actualiser le contenu du dossier',
+ 'ntfmkdir' : 'Création du dossier',
+ 'ntfmkfile' : 'Création des fichiers',
+ 'ntfrm' : 'Supprimer les fichiers',
+ 'ntfcopy' : 'Copier les fichiers',
+ 'ntfmove' : 'Déplacer les fichiers',
+ 'ntfprepare' : 'Préparation de la copie des fichiers',
+ 'ntfrename' : 'Renommer les fichier',
+ 'ntfupload' : 'Envoyer les fichiers',
+ 'ntfdownload' : 'Télécharger les fichiers',
+ 'ntfsave' : 'Sauvegarde des fichiers',
+ 'ntfarchive' : 'Création de l\'archive',
+ 'ntfextract' : 'Extraction des fichiers de l\'archive',
+ 'ntfsearch' : 'Recherche des fichiers',
+ 'ntfsmth' : 'Fait quelque chose',
+ 'ntfloadimg' : 'Chargement de l\' image',
+ 'ntfnetmount' : 'Monte le volume réseau', // added 18.04.2012
+ 'ntfdim' : 'Calcule la dimension de l\'image', // added 11.08.2013
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Inconnue',
+ 'Today' : 'Aujourd\'hui',
+ 'Yesterday' : 'Hier',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Fév',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Avr',
+ 'May' : 'Mai',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Aoû',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Oct',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Déc',
+
+ /******************************** sort variants ********************************/
+ 'sortname' : 'par nom',
+ 'sortkind' : 'par type',
+ 'sortsize' : 'par taille',
+ 'sortdate' : 'par date',
+ 'sortFoldersFirst' : 'Dossiers en premier',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmation requise',
+ 'confirmRm' : 'Êtes-vous certain de vouloir supprimer les fichiers? Cela ne peut être annulé!',
+ 'confirmRepl' : 'Supprimer l\'ancien fichier par le nouveau?',
+ 'apllyAll' : 'Appliquer à tous',
+ 'name' : 'Nom',
+ 'size' : 'Taille',
+ 'perms' : 'Permissions',
+ 'modify' : 'Modifié',
+ 'kind' : 'Type',
+ 'read' : 'Lecture',
+ 'write' : 'Écriture',
+ 'noaccess' : 'Pas d\'accès',
+ 'and' : 'et',
+ 'unknown' : 'inconnu',
+ 'selectall' : 'Sélectionner tous les fichiers',
+ 'selectfiles' : 'Sélectionner le(s) fichier(s)',
+ 'selectffile' : 'Sélectionner le premier fichier',
+ 'selectlfile' : 'Sélectionner le dernier fichier',
+ 'viewlist' : 'Vue listing',
+ 'viewicons' : 'Vue icônes',
+ 'places' : 'Places',
+ 'calc' : 'Calculer',
+ 'path' : 'Chemin',
+ 'aliasfor' : 'Raccourcis pour',
+ 'locked' : 'Verrouiller',
+ 'dim' : 'Dimensions',
+ 'files' : 'Fichiers',
+ 'folders' : 'Dossiers',
+ 'items' : 'Éléments',
+ 'yes' : 'oui',
+ 'no' : 'non',
+ 'link' : 'Lien',
+ 'searcresult' : 'Résultat de la recherche',
+ 'selected' : 'Éléments sélectionnés',
+ 'about' : 'À propos',
+ 'shortcuts' : 'Raccourcis',
+ 'help' : 'Aide',
+ 'webfm' : 'Gestionnaire de fichier Web',
+ 'ver' : 'Version',
+ 'protocolver' : 'Version du protocole',
+ 'homepage' : 'Page du projet',
+ 'docs' : 'Documentation',
+ 'github' : 'Forker-nous sur Github',
+ 'twitter' : 'Suivez nous sur twitter',
+ 'facebook' : 'Joignez-nous facebook',
+ 'team' : 'Équipe',
+ 'chiefdev' : 'Développeur en chef',
+ 'developer' : 'Développeur',
+ 'contributor' : 'Contributeur',
+ 'maintainer' : 'Mainteneur',
+ 'translator' : 'Traducteur',
+ 'icons' : 'Icônes',
+ 'dontforget' : 'et n\'oubliez pas votre serviette',
+ 'shortcutsof' : 'Raccourcis désactivés',
+ 'dropFiles' : 'Déposez les fichiers ici',
+ 'or' : 'ou',
+ 'selectForUpload' : 'Sélectionner les fichiers à envoyer',
+ 'moveFiles' : 'Déplacer les fichiers',
+ 'copyFiles' : 'Copier les fichiers',
+ 'rmFromPlaces' : 'Remove from places',
+ 'aspectRatio' : 'Aspect ratio',
+ 'scale' : 'Mise à l\'échelle',
+ 'width' : 'Largeur',
+ 'height' : 'Hauteur',
+ 'resize' : 'Redimensionner',
+ 'crop' : 'Recadrer',
+ 'rotate' : 'Rotation',
+ 'rotate-cw' : 'Rotation de 90 degrés horaire',
+ 'rotate-ccw' : 'Rotation de 90 degrés antihoraire',
+ 'degree' : '°',
+ 'netMountDialogTitle' : 'Monter un volume réseau', // added 18.04.2012
+ 'protocol' : 'Protocole', // added 18.04.2012
+ 'host' : 'Hôte', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'Utilisateur', // added 18.04.2012
+ 'pass' : 'Mot de passe', // added 18.04.2012
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Inconnu',
+ 'kindFolder' : 'Dossier',
+ 'kindAlias' : 'Raccourci',
+ 'kindAliasBroken' : 'Raccourci cassé',
+ // applications
+ 'kindApp' : 'Application',
+ 'kindPostscript' : 'Document Postscript',
+ 'kindMsOffice' : 'Document Microsoft Office',
+ 'kindMsWord' : 'Document Microsoft Word',
+ 'kindMsExcel' : 'Document Microsoft Excel',
+ 'kindMsPP' : 'Présentation Microsoft PowerPoint',
+ 'kindOO' : 'Document OpenOffice',
+ 'kindAppFlash' : 'Application Flash',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Fichier BitTorrent',
+ 'kind7z' : 'Archive 7z',
+ 'kindTAR' : 'Archive TAR',
+ 'kindGZIP' : 'Archive GZIP',
+ 'kindBZIP' : 'Archive BZIP',
+ 'kindZIP' : 'Archive ZIP',
+ 'kindRAR' : 'Archive RAR',
+ 'kindJAR' : 'Fichier Java JAR',
+ 'kindTTF' : 'Police True Type',
+ 'kindOTF' : 'Police Open Type',
+ 'kindRPM' : 'Package RPM',
+ // texts
+ 'kindText' : 'Document Text',
+ 'kindTextPlain' : 'Texte non formaté',
+ 'kindPHP' : 'Source PHP',
+ 'kindCSS' : 'Feuille de style en cascade',
+ 'kindHTML' : 'Document HTML',
+ 'kindJS' : 'Source JavaScript',
+ 'kindRTF' : 'Format de texte enrichi (Rich Text Format)',
+ 'kindC' : 'Source C',
+ 'kindCHeader' : 'Source header C',
+ 'kindCPP' : 'Source C++',
+ 'kindCPPHeader' : 'Source header C++',
+ 'kindShell' : 'Shell script Unix',
+ 'kindPython' : 'Source Python',
+ 'kindJava' : 'Source Java',
+ 'kindRuby' : 'Source Ruby',
+ 'kindPerl' : 'Script Perl',
+ 'kindSQL' : 'Source SQL',
+ 'kindXML' : 'Document XML',
+ 'kindAWK' : 'Source AWK',
+ 'kindCSV' : 'CSV',
+ 'kindDOCBOOK' : 'Document Docbook XML',
+ // images
+ 'kindImage' : 'Image',
+ 'kindBMP' : 'Image BMP',
+ 'kindJPEG' : 'Image JPEG',
+ 'kindGIF' : 'Image GIF',
+ 'kindPNG' : 'Image PNG',
+ 'kindTIFF' : 'Image TIFF',
+ 'kindTGA' : 'Image TGA',
+ 'kindPSD' : 'Image Adobe Photoshop',
+ 'kindXBITMAP' : 'Image X bitmap',
+ 'kindPXM' : 'Image Pixelmator',
+ // media
+ 'kindAudio' : 'Son',
+ 'kindAudioMPEG' : 'Son MPEG',
+ 'kindAudioMPEG4' : 'Son MPEG-4',
+ 'kindAudioMIDI' : 'Son MIDI',
+ 'kindAudioOGG' : 'Son Ogg Vorbis',
+ 'kindAudioWAV' : 'Son WAV',
+ 'AudioPlaylist' : 'Liste de lecture audio',
+ 'kindVideo' : 'Vidéo',
+ 'kindVideoDV' : 'Vidéo DV',
+ 'kindVideoMPEG' : 'Vidéo MPEG',
+ 'kindVideoMPEG4' : 'Vidéo MPEG-4',
+ 'kindVideoAVI' : 'Vidéo AVI',
+ 'kindVideoMOV' : 'Vidéo Quick Time',
+ 'kindVideoWM' : 'Vidéo Windows Media',
+ 'kindVideoFlash' : 'Vidéo Flash',
+ 'kindVideoMKV' : 'Vidéo Matroska',
+ 'kindVideoOGG' : 'Vidéo Ogg'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.hu.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.hu.js
new file mode 100644
index 00000000..463857c7
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.hu.js
@@ -0,0 +1,280 @@
+/**
+ * Hungarian translation
+ * @author Gáspár Lajos
+ * @version 2011-09-10
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.hu = {
+ translator : 'Gáspár Lajos <info@glsys.eu>',
+ language : 'magyar',
+ direction : 'ltr',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Hiba',
+ 'errUnknown' : 'Ismeretlen hiba.',
+ 'errUnknownCmd' : 'Ismeretlen parancs.',
+ 'errJqui' : 'Hibás jQuery UI konfiguráció. A "selectable", "draggable" és a "droppable" komponensek szükségesek.',
+ 'errNode' : 'elFinder requires DOM Element to be created.',
+ 'errURL' : 'Hibás elFinder konfiguráció! "URL" paraméter nincs megadva.',
+ 'errAccess' : 'Hozzáférés megtagadva.',
+ 'errConnect' : 'Nem sikerült csatlakozni a kiszolgálóhoz.',
+ 'errAbort' : 'Kapcsolat megszakítva.',
+ 'errTimeout' : 'Kapcsolat időtúllépés.',
+ 'errNotFound' : 'A backend nem elérhető.',
+ 'errResponse' : 'Hibás backend válasz.',
+ 'errConf' : 'Invalid backend configuration.',
+ 'errJSON' : 'PHP JSON module not installed.',
+ 'errNoVolumes' : 'Readable volumes not available.',
+ 'errCmdParams' : 'Invalid parameters for command "$1".',
+ 'errDataNotJSON' : 'A válasz nem JSON típusú adat.',
+ 'errDataEmpty' : 'Nem érkezett adat.',
+ 'errCmdReq' : 'Backend request requires command name.',
+ 'errOpen' : '"$1" megnyitása nem sikerült.',
+ 'errNotFolder' : 'Object is not a folder.',
+ 'errNotFile' : 'Object is not a file.',
+ 'errRead' : 'Unable to read "$1".',
+ 'errWrite' : 'Unable to write into "$1".',
+ 'errPerm' : 'Engedély megtagadva.',
+ 'errLocked' : '"$1" is locked and can not be renamed, moved or removed.',
+ 'errExists' : 'File named "$1" already exists.',
+ 'errInvName' : 'Invalid file name.',
+ 'errFolderNotFound' : 'Folder not found.',
+ 'errFileNotFound' : 'File not found.',
+ 'errTrgFolderNotFound' : 'Target folder "$1" not found.',
+ 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.',
+ 'errMkdir' : 'Unable to create folder "$1".',
+ 'errMkfile' : 'Unable to create file "$1".',
+ 'errRename' : 'Unable to rename "$1".',
+ 'errCopyFrom' : 'Copying files from volume "$1" not allowed.',
+ 'errCopyTo' : 'Copying files to volume "$1" not allowed.',
+ 'errUploadCommon' : 'Feltöltési hiba.',
+ 'errUpload' : 'Nem sikerült a fájlt feltölteni. ($1)',
+ 'errUploadNoFiles' : 'No files found for upload.',
+ 'errMaxSize' : 'Data exceeds the maximum allowed size.',
+ 'errFileMaxSize' : 'File exceeds maximum allowed size.',
+ 'errUploadMime' : 'File type not allowed.',
+ 'errUploadTransfer' : '"$1" transfer error.',
+ 'errSave' : '"$1" mentése nem sikerült.',
+ 'errCopy' : '"$1" másolása nem sikerült.',
+ 'errMove' : '"$1" áthelyezése nem sikerült.',
+ 'errCopyInItself' : '"$1" nem másolható saját magára.',
+ 'errRm' : '"$1" törlése nem sikerült.',
+ 'errExtract' : 'Unable to extract files from "$1".',
+ 'errArchive' : 'Unable to create archive.',
+ 'errArcType' : 'Nem támogatott archívum típus.',
+ 'errNoArchive' : 'File is not archive or has unsupported archive type.',
+ 'errCmdNoSupport' : 'Backend does not support this command.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Archívum létrehozása',
+ 'cmdback' : 'Vissza',
+ 'cmdcopy' : 'Másolás',
+ 'cmdcut' : 'Kivágás',
+ 'cmddownload' : 'Letöltés',
+ 'cmdduplicate' : 'Másolat készítés',
+ 'cmdedit' : 'Szerkesztés',
+ 'cmdextract' : 'Kibontás',
+ 'cmdforward' : 'Előre',
+ 'cmdgetfile' : 'Fájlok kijelölése',
+ 'cmdhelp' : 'Erről a programról...',
+ 'cmdhome' : 'Főkönyvtár',
+ 'cmdinfo' : 'Tulajdonságok',
+ 'cmdmkdir' : 'Új mappa',
+ 'cmdmkfile' : 'Új szöveges dokumentum',
+ 'cmdopen' : 'Megnyitás',
+ 'cmdpaste' : 'Beillesztés',
+ 'cmdquicklook' : 'Előnézet',
+ 'cmdreload' : 'Frissítés',
+ 'cmdrename' : 'Átnevezés',
+ 'cmdrm' : 'Törlés',
+ 'cmdsearch' : 'Keresés',
+ 'cmdup' : 'Ugrás a szülőmappába',
+ 'cmdupload' : 'Feltöltés',
+ 'cmdview' : 'View',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Bezár',
+ 'btnSave' : 'Ment',
+ 'btnRm' : 'Töröl',
+ 'btnCancel' : 'Mégsem',
+ 'btnNo' : 'Nem',
+ 'btnYes' : 'Igen',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Mappa megnyitás',
+ 'ntffile' : 'Fájl megnyitás',
+ 'ntfreload' : 'Reload folder content',
+ 'ntfmkdir' : 'Mappa létrehozása',
+ 'ntfmkfile' : 'Creating files',
+ 'ntfrm' : 'Fájlok törélse',
+ 'ntfcopy' : 'Fájlok másolása',
+ 'ntfmove' : 'Fájlok áthelyezése',
+ 'ntfprepare' : 'Prepare to copy files',
+ 'ntfrename' : 'Fájlok átnevezése',
+ 'ntfupload' : 'Fájlok feltöltése',
+ 'ntfdownload' : 'Fájlok letöltése',
+ 'ntfsave' : 'Fájlok mentése',
+ 'ntfarchive' : 'Archívum létrehozása',
+ 'ntfextract' : 'Kibontás archívumból',
+ 'ntfsearch' : 'Fájlok keresése',
+ 'ntfsmth' : 'Doing something >_<',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Ismeretlen',
+ 'Today' : 'Ma',
+ 'Yesterday' : 'Tegnap',
+ 'Jan' : 'jan',
+ 'Feb' : 'febr',
+ 'Mar' : 'márc',
+ 'Apr' : 'ápr',
+ 'May' : 'máj',
+ 'Jun' : 'jún',
+ 'Jul' : 'júl',
+ 'Aug' : 'aug',
+ 'Sep' : 'szept',
+ 'Oct' : 'okt',
+ 'Nov' : 'nov',
+ 'Dec' : 'dec',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmation required',
+ 'confirmRm' : 'Valóban törölni akarja a kijelölt adatokat? Ez később nem fordítható vissza!',
+ 'confirmRepl' : 'Replace old file with new one?',
+ 'apllyAll' : 'Apply to all',
+ 'name' : 'Név',
+ 'size' : 'Méret',
+ 'perms' : 'Jogok',
+ 'modify' : 'Módosítva',
+ 'kind' : 'Típus',
+ 'read' : 'olvasás',
+ 'write' : 'írás',
+ 'noaccess' : '-',
+ 'and' : 'és',
+ 'unknown' : 'ismeretlen',
+ 'selectall' : 'Összes kijelölése',
+ 'selectfiles' : 'Fájlok kijelölése',
+ 'selectffile' : 'Első fájl kijelölése',
+ 'selectlfile' : 'Utolsó fájl kijelölése',
+ 'viewlist' : 'Lista nézet',
+ 'viewicons' : 'Ikon nézet',
+ 'places' : 'Helyek',
+ 'calc' : 'Calculate',
+ 'path' : 'Útvonal',
+ 'aliasfor' : 'Cél',
+ 'locked' : 'Zárolt',
+ 'dim' : 'Méretek',
+ 'files' : 'Fájlok',
+ 'folders' : 'Mappák',
+ 'items' : 'Elemek',
+ 'yes' : 'igen',
+ 'no' : 'nem',
+ 'link' : 'Parancsikon',
+ 'searcresult' : 'Keresés eredménye',
+ 'selected' : 'kijelölt elemek',
+ 'about' : 'Névjegy',
+ 'shortcuts' : 'Gyorsbillenytyűk',
+ 'help' : 'Súgó',
+ 'webfm' : 'Web file manager',
+ 'ver' : 'Verzió',
+ 'protocolver' : 'protokol verzió',
+ 'homepage' : 'Projekt honlap',
+ 'docs' : 'Dokumentáció',
+ 'github' : 'Hozz létre egy új verziót a Github-on',
+ 'twitter' : 'Kövess minket a twitter-en',
+ 'facebook' : 'Csatlakozz hozzánk a facebook-on',
+ 'team' : 'Csapat',
+ 'chiefdev' : 'vezető fejlesztő',
+ 'developer' : 'fejlesztő',
+ 'contributor' : 'külsős hozzájáruló',
+ 'maintainer' : 'karbantartó',
+ 'translator' : 'fordító',
+ 'icons' : 'Ikonok',
+ 'dontforget' : 'törölközőt ne felejts el hozni!',
+ 'shortcutsof' : 'Shortcuts disabled',
+ 'dropFiles' : 'Fájlok dobása ide',
+ 'or' : 'vagy',
+ 'selectForUpload' : 'fájlok böngészése',
+ 'moveFiles' : 'Fájlok áthelyezése',
+ 'copyFiles' : 'Fájlok másolása',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Ismeretlen',
+ 'kindFolder' : 'Mappa',
+ 'kindAlias' : 'Parancsikon',
+ 'kindAliasBroken' : 'Hibás parancsikon',
+ // applications
+ 'kindApp' : 'Alkalmazás',
+ 'kindPostscript' : 'Postscript dokumentum',
+ 'kindMsOffice' : 'Microsoft Office dokumentum',
+ 'kindMsWord' : 'Microsoft Word dokumentum',
+ 'kindMsExcel' : 'Microsoft Excel dokumentum',
+ 'kindMsPP' : 'Microsoft Powerpoint bemutató',
+ 'kindOO' : 'Open Office dokumentum',
+ 'kindAppFlash' : 'Flash alkalmazás',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent fájl',
+ 'kind7z' : '7z archívum',
+ 'kindTAR' : 'TAR archívum',
+ 'kindGZIP' : 'GZIP archívum',
+ 'kindBZIP' : 'BZIP archívum',
+ 'kindZIP' : 'ZIP archívum',
+ 'kindRAR' : 'RAR archívum',
+ 'kindJAR' : 'Java JAR fájl',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM csomag',
+ // texts
+ 'kindText' : 'Szöveges dokumentum',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP forráskód',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML dokumentum',
+ 'kindJS' : 'Javascript forráskód',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C forráskód',
+ 'kindCHeader' : 'C header forráskód',
+ 'kindCPP' : 'C++ forráskód',
+ 'kindCPPHeader' : 'C++ header forráskód',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python forráskód',
+ 'kindJava' : 'Java forráskód',
+ 'kindRuby' : 'Ruby forráskód',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL forráskód',
+ 'kindXML' : 'XML dokumentum',
+ 'kindAWK' : 'AWK forráskód',
+ 'kindCSV' : 'Comma separated values',
+ 'kindDOCBOOK' : 'Docbook XML dokumentum',
+ // images
+ 'kindImage' : 'Kép',
+ 'kindBMP' : 'BMP kép',
+ 'kindJPEG' : 'JPEG kép',
+ 'kindGIF' : 'GIF kép',
+ 'kindPNG' : 'PNG kép',
+ 'kindTIFF' : 'TIFF kép',
+ 'kindTGA' : 'TGA kép',
+ 'kindPSD' : 'Adobe Photoshop kép',
+ 'kindXBITMAP' : 'X bitmap image',
+ 'kindPXM' : 'Pixelmator image',
+ // media
+ 'kindAudio' : 'Hangfájl',
+ 'kindAudioMPEG' : 'MPEG hangfájl',
+ 'kindAudioMPEG4' : 'MPEG-4 hangfájl',
+ 'kindAudioMIDI' : 'MIDI hangfájl',
+ 'kindAudioOGG' : 'Ogg Vorbis hangfájl',
+ 'kindAudioWAV' : 'WAV hangfájl',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Film',
+ 'kindVideoDV' : 'DV film',
+ 'kindVideoMPEG' : 'MPEG film',
+ 'kindVideoMPEG4' : 'MPEG-4 film',
+ 'kindVideoAVI' : 'AVI film',
+ 'kindVideoMOV' : 'Quick Time film',
+ 'kindVideoWM' : 'Windows Media film',
+ 'kindVideoFlash' : 'Flash film',
+ 'kindVideoMKV' : 'Matroska film',
+ 'kindVideoOGG' : 'Ogg film'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.it.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.it.js
new file mode 100644
index 00000000..01c6e404
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.it.js
@@ -0,0 +1,340 @@
+/**
+ * Italian translation
+ * @author Alberto Tocci
+ * @version 2012-05-09
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.it = {
+ translator : 'Alberto Tocci (alberto.tocci@gmail.com)',
+ language : 'Italiano',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Errore',
+ 'errUnknown' : 'Errore sconosciuto.',
+ 'errUnknownCmd' : 'Comando sconosciuto.',
+ 'errJqui' : 'Configurazione JQuery UI non valida. Devono essere inclusi i plugin Selectable, Draggable e Droppable.',
+ 'errNode' : 'elFinder necessita dell\'elemento DOM per essere inizializzato.',
+ 'errURL' : 'Configurazione non valida.Il parametro URL non è settato.',
+ 'errAccess' : 'Accesso non consentito.',
+ 'errConnect' : 'Impossibile collegarsi al backend.',
+ 'errAbort' : 'Connessione terminata.',
+ 'errTimeout' : 'Timeout di connessione.',
+ 'errNotFound' : 'Backend non trovato.',
+ 'errResponse' : 'Risposta non valida dal backend.',
+ 'errConf' : 'Configurazione backend non valida.',
+ 'errJSON' : 'Modulo PHP JSON non installato.',
+ 'errNoVolumes' : 'Non è stato possibile leggere i volumi.',
+ 'errCmdParams' : 'Parametri non validi per il comando "$1".',
+ 'errDataNotJSON' : 'I dati non sono nel formato JSON.',
+ 'errDataEmpty' : 'Stringa vuota.',
+ 'errCmdReq' : 'Backend request requires command name.',
+ 'errOpen' : 'Impossibile aprire "$1".',
+ 'errNotFolder' : 'L\'oggetto non è una cartella..',
+ 'errNotFile' : 'L\'oggetto non è un file.',
+ 'errRead' : 'Impossibile leggere "$1".',
+ 'errWrite' : 'Non è possibile scrivere in "$1".',
+ 'errPerm' : 'Permesso negato.',
+ 'errLocked' : '"$1" è bloccato e non può essere rinominato, spostato o eliminato.',
+ 'errExists' : 'Il file "$1" è già esistente.',
+ 'errInvName' : 'Nome file non valido.',
+ 'errFolderNotFound' : 'Cartella non trovata.',
+ 'errFileNotFound' : 'File non trovato.',
+ 'errTrgFolderNotFound' : 'La cartella di destinazione"$1" non è stata trovata.',
+ 'errPopup' : 'Il tuo Browser non consente di aprire finestre di pop-up. Per aprire il file abilita questa opzione nelle impostazioni del tuo Browser.',
+ 'errMkdir' : 'Impossibile creare la cartella "$1".',
+ 'errMkfile' : 'Impossibile creare il file "$1".',
+ 'errRename' : 'Impossibile rinominare "$1".',
+ 'errCopyFrom' : 'Non è possibile copiare file da "$1".',
+ 'errCopyTo' : 'Non è possibile copiare file in "$1".',
+ 'errUploadCommon' : 'Errore di Caricamento.',
+ 'errUpload' : 'Impossibile Caricare "$1".',
+ 'errUploadNoFiles' : 'Non sono stati specificati file da caricare.',
+ 'errMaxSize' : 'La dimensione totale dei file supera il limite massimo consentito.',
+ 'errFileMaxSize' : 'Le dimensioni del file superano il massimo consentito.',
+ 'errUploadMime' : 'FileType non consentito.',
+ 'errUploadTransfer' : 'Trasferimento errato del file "$1".',
+ 'errSave' : 'Impossibile salvare "$1".',
+ 'errCopy' : 'Impossibile copiare "$1".',
+ 'errMove' : 'Impossibile spostare "$1".',
+ 'errCopyInItself' : 'Sorgente e destinazione risultato essere uguali.',
+ 'errRm' : 'Impossibile rimuovere "$1".',
+ 'errExtract' : 'Impossibile estrarre file da "$1".',
+ 'errArchive' : 'Impossibile creare archivio.',
+ 'errArcType' : 'Tipo di archivio non supportato.',
+ 'errNoArchive' : 'Il file non è un archivio o contiene file non supportati.',
+ 'errCmdNoSupport' : 'Il Backend non supporta questo comando.',
+ 'errReplByChild' : 'La cartella $1 non può essere sostituita da un oggetto in essa contenuto.',
+ 'errArcSymlinks' : 'Per questioni di sicurezza non è possibile estrarre archivi che contengono collegamenti..',
+ 'errArcMaxSize' : 'La dimensione dell\'archivio supera le massime dimensioni consentite.',
+ 'errResize' : 'Impossibile ridimensionare "$1".',
+ 'errUsupportType' : 'FileType non supportato.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Crea Archivio',
+ 'cmdback' : 'Indietro',
+ 'cmdcopy' : 'Copia',
+ 'cmdcut' : 'Taglia',
+ 'cmddownload' : 'Download',
+ 'cmdduplicate' : 'Duplica',
+ 'cmdedit' : 'Modifica File',
+ 'cmdextract' : 'Estrai Archivio',
+ 'cmdforward' : 'Avanti',
+ 'cmdgetfile' : 'Seleziona File',
+ 'cmdhelp' : 'About',
+ 'cmdhome' : 'Home',
+ 'cmdinfo' : 'Informazioni',
+ 'cmdmkdir' : 'Nuova cartella',
+ 'cmdmkfile' : 'Nuovo file di testo',
+ 'cmdopen' : 'Apri',
+ 'cmdpaste' : 'Incolla',
+ 'cmdquicklook' : 'Anteprima',
+ 'cmdreload' : 'Ricarica',
+ 'cmdrename' : 'Rinomina',
+ 'cmdrm' : 'Cancella',
+ 'cmdsearch' : 'Ricerca file',
+ 'cmdup' : 'Vai alla directory padre',
+ 'cmdupload' : 'Carica File',
+ 'cmdview' : 'Visualizza',
+ 'cmdresize' : 'Ridimensiona Immagine',
+ 'cmdsort' : 'Ordina',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Chiudi',
+ 'btnSave' : 'Salva',
+ 'btnRm' : 'Rimuovi',
+ 'btnApply' : 'Applica',
+ 'btnCancel' : 'Cancella',
+ 'btnNo' : 'No',
+ 'btnYes' : 'Si',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Apri cartella',
+ 'ntffile' : 'Apri file',
+ 'ntfreload' : 'Ricarica il contenuto della cartella',
+ 'ntfmkdir' : 'Creazione delle directory in corso',
+ 'ntfmkfile' : 'Creazione dei files in corso',
+ 'ntfrm' : 'Cancellazione files in corso',
+ 'ntfcopy' : 'Copia file in corso',
+ 'ntfmove' : 'Spostamento file in corso',
+ 'ntfprepare' : 'Inizializzando la copia dei file.',
+ 'ntfrename' : 'Sto rinominando i file',
+ 'ntfupload' : 'Caricamento file in corso',
+ 'ntfdownload' : 'Downloading file in corso',
+ 'ntfsave' : 'Salvataggio file in corso',
+ 'ntfarchive' : 'Creazione archivio in corso',
+ 'ntfextract' : 'Estrazione file dall\'archivio in corso',
+ 'ntfsearch' : 'Ricerca files in corso',
+ 'ntfsmth' : 'Operazione in corso. Attendere...',
+ 'ntfloadimg' : 'Caricamento immagine in corso',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'sconosciuto',
+ 'Today' : 'Oggi',
+ 'Yesterday' : 'Ieri',
+ 'Jan' : 'Gen',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'Mag',
+ 'Jun' : 'Giu',
+ 'Jul' : 'Lug',
+ 'Aug' : 'Ago',
+ 'Sep' : 'Set',
+ 'Oct' : 'Ott',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dic',
+ 'January' : 'Gennaio',
+ 'February' : 'Febbraio',
+ 'March' : 'Marzo',
+ 'April' : 'Aprile',
+ 'May' : 'Maggio',
+ 'June' : 'Giugno',
+ 'July' : 'Luglio',
+ 'August' : 'Agosto',
+ 'September' : 'Settembre',
+ 'October' : 'Ottobre',
+ 'November' : 'Novembre',
+ 'December' : 'Dicembre',
+ 'Sunday' : 'Domenica',
+ 'Monday' : 'Lunedì',
+ 'Tuesday' : 'Martedì',
+ 'Wednesday' : 'Mercoledì',
+ 'Thursday' : 'Giovedì',
+ 'Friday' : 'Venerdì',
+ 'Saturday' : 'Sabato',
+ 'Sun' : 'Dom',
+ 'Mon' : 'Lun',
+ 'Tue' : 'Mar',
+ 'Wed' : 'Mer',
+ 'Thu' : 'Gio',
+ 'Fri' : 'Ven',
+ 'Sat' : 'Sab',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'per nome (cartelle in testa)',
+ 'sortkindDirsFirst' : 'per tipo (cartelle in testa)',
+ 'sortsizeDirsFirst' : 'per dimensione (cartelle in testa)',
+ 'sortdateDirsFirst' : 'per data (cartelle in testa)',
+ 'sortname' : 'per nome',
+ 'sortkind' : 'per tipo',
+ 'sortsize' : 'per dimensione',
+ 'sortdate' : 'per data',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Conferma richiesta',
+ 'confirmRm' : 'Sei sicuro di voler rimuovere i file? L\'operazione non è reversibile!',
+ 'confirmRepl' : 'Sostituire i file ?',
+ 'apllyAll' : 'Applica a tutti',
+ 'name' : 'Nome',
+ 'size' : 'Dimensione',
+ 'perms' : 'Permessi',
+ 'modify' : 'Modificato il',
+ 'kind' : 'Tipo',
+ 'read' : 'lettura',
+ 'write' : 'scrittura',
+ 'noaccess' : 'nessun accesso',
+ 'and' : 'e',
+ 'unknown' : 'sconosciuto',
+ 'selectall' : 'Seleziona tutti i file',
+ 'selectfiles' : 'Seleziona file',
+ 'selectffile' : 'Seleziona il primo file',
+ 'selectlfile' : 'Seleziona l\'ultimo file',
+ 'viewlist' : 'Visualizza Elenco',
+ 'viewicons' : 'Visualizza Icone',
+ 'places' : 'Places',
+ 'calc' : 'Calcola',
+ 'path' : 'Percorso',
+ 'aliasfor' : 'Alias per',
+ 'locked' : 'Bloccato',
+ 'dim' : 'Dimensioni',
+ 'files' : 'File',
+ 'folders' : 'Cartelle',
+ 'items' : 'Oggetti',
+ 'yes' : 'si',
+ 'no' : 'no',
+ 'link' : 'Collegamento',
+ 'searcresult' : 'Risultati ricerca',
+ 'selected' : 'oggetti selezionati',
+ 'about' : 'About',
+ 'shortcuts' : 'Scorciatoie',
+ 'help' : 'Help',
+ 'webfm' : 'Web file manager',
+ 'ver' : 'Versione',
+ 'protocol' : 'versione protocollo',
+ 'homepage' : 'Home del progetto',
+ 'docs' : 'Documentazione',
+ 'github' : 'Seguici su Github',
+ 'twitter' : 'Seguici su Twitter',
+ 'facebook' : 'Seguici su Facebook',
+ 'team' : 'Team',
+ 'chiefdev' : 'sviluppatore capo',
+ 'developer' : 'sviluppatore',
+ 'contributor' : 'collaboratore',
+ 'maintainer' : 'maintainer',
+ 'translator' : 'traduttore',
+ 'icons' : 'Icone',
+ 'dontforget' : 'e non dimenticate di portare l\'asciugamano',
+ 'shortcutsof' : 'Scorciatoie disabilitate',
+ 'dropFiles' : 'Trascina i file qui',
+ 'or' : 'o',
+ 'selectForUpload' : 'Seleziona file da caricare',
+ 'moveFiles' : 'Sposta file',
+ 'copyFiles' : 'Copia file',
+ 'rmFromPlaces' : 'Rimuovi da places',
+ 'untitled folder' : 'cartella senza titolo',
+ 'untitled file.txt' : 'file senza titolo.txt',
+ 'aspectRatio' : 'Proporzioni',
+ 'scale' : 'Scala',
+ 'width' : 'Larghezza',
+ 'height' : 'Altezza',
+ 'mode' : 'Modalità',
+ 'resize' : 'Ridimensione',
+ 'crop' : 'Ritaglia',
+ 'rotate' : 'Ruota',
+ 'rotate-cw' : 'Ruota di 90° in senso orario',
+ 'rotate-ccw' : 'Ruota di 90° in senso antiorario',
+ 'degree' : 'Gradi',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Sconosciuto',
+ 'kindFolder' : 'Cartella',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Alias guasto',
+ // applications
+ 'kindApp' : 'Applicazione',
+ 'kindPostscript' : 'Documento Postscript',
+ 'kindMsOffice' : 'Documento Microsoft Office',
+ 'kindMsWord' : 'Documento Microsoft Word',
+ 'kindMsExcel' : 'Documento Microsoft Excel',
+ 'kindMsPP' : 'Presentazione Microsoft Powerpoint',
+ 'kindOO' : 'Documento Open Office',
+ 'kindAppFlash' : 'Applicazione Flash',
+ 'kindPDF' : 'Documento PDF',
+ 'kindTorrent' : 'File Bittorrent',
+ 'kind7z' : 'Archivio 7z',
+ 'kindTAR' : 'Archivio TAR',
+ 'kindGZIP' : 'Archivio GZIP',
+ 'kindBZIP' : 'Archivio BZIP',
+ 'kindZIP' : 'Archivio ZIP',
+ 'kindRAR' : 'Archivio RAR',
+ 'kindJAR' : 'File Java JAR',
+ 'kindTTF' : 'Font True Type',
+ 'kindOTF' : 'Font Open Type',
+ 'kindRPM' : 'Pacchetto RPM',
+ // texts
+ 'kindText' : 'Documento di testo',
+ 'kindTextPlain' : 'Testo Semplice',
+ 'kindPHP' : 'File PHP',
+ 'kindCSS' : 'File CSS (Cascading Style Sheet)',
+ 'kindHTML' : 'Documento HTML',
+ 'kindJS' : 'File Javascript',
+ 'kindRTF' : 'File RTF (Rich Text Format)',
+ 'kindC' : 'File C',
+ 'kindCHeader' : 'File C (header)',
+ 'kindCPP' : 'File C++',
+ 'kindCPPHeader' : 'File C++ (header)',
+ 'kindShell' : 'Script Unix shell',
+ 'kindPython' : 'File Python',
+ 'kindJava' : 'File Java',
+ 'kindRuby' : 'File Ruby',
+ 'kindPerl' : 'File Perl',
+ 'kindSQL' : 'File SQL',
+ 'kindXML' : 'File XML',
+ 'kindAWK' : 'File AWK',
+ 'kindCSV' : 'File CSV (Comma separated values)',
+ 'kindDOCBOOK' : 'File Docbook XML',
+ // images
+ 'kindImage' : 'Immagine',
+ 'kindBMP' : 'Immagine BMP',
+ 'kindJPEG' : 'Immagine JPEG',
+ 'kindGIF' : 'Immagine GIF',
+ 'kindPNG' : 'Immagine PNG',
+ 'kindTIFF' : 'Immagine TIFF',
+ 'kindTGA' : 'Immagine TGA',
+ 'kindPSD' : 'Immagine Adobe Photoshop',
+ 'kindXBITMAP' : 'Immagine X bitmap',
+ 'kindPXM' : 'Immagine Pixelmator',
+ // media
+ 'kindAudio' : 'File Audio',
+ 'kindAudioMPEG' : 'Audio MPEG',
+ 'kindAudioMPEG4' : 'Audio MPEG-4',
+ 'kindAudioMIDI' : 'Audio MIDI',
+ 'kindAudioOGG' : 'Audio Ogg Vorbis',
+ 'kindAudioWAV' : 'Audio WAV',
+ 'AudioPlaylist' : 'Playlist MP3',
+ 'kindVideo' : 'File Video',
+ 'kindVideoDV' : 'Filmato DV',
+ 'kindVideoMPEG' : 'Filmato MPEG',
+ 'kindVideoMPEG4' : 'Filmato MPEG-4',
+ 'kindVideoAVI' : 'Filmato AVI',
+ 'kindVideoMOV' : 'Filmato Quick Time',
+ 'kindVideoWM' : 'Filmato Windows Media',
+ 'kindVideoFlash' : 'Filmato Flash',
+ 'kindVideoMKV' : 'Filmato Matroska',
+ 'kindVideoOGG' : 'Filmato Ogg'
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.jp.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.jp.js
new file mode 100644
index 00000000..470fc13e
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.jp.js
@@ -0,0 +1,353 @@
+/**
+ * Japanese translation
+ * @author Tomoaki Yoshida
+ * @author Naoki Sawada
+ * @version 2014-04-08
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.jp = {
+ translator : 'Tomoaki Yoshida <info@yoshida-studio.jp>, Naoki Sawada <hypweb@gmail.com>',
+ language : 'Japanese',
+ direction : 'ltr',
+ dateFormat : 'Y/m/d h:i A', // 2012/04/11 05:27 PM
+ fancyDateFormat : '$1 h:i A', // will produce smth like: 今日 12:25 PM
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'エラー',
+ 'errUnknown' : '不明なエラーです',
+ 'errUnknownCmd' : '不明なコマンドです',
+ 'errJqui' : '無効なjQuery UI コンフィグレーションです。セレクタブルコンポーネント、ドラッガブルコンポーネント、ドロッパブルコンポーネントがあるかを確認して下さい',
+ 'errNode' : 'elFinderはDOM Elementが必要です',
+ 'errURL' : '無効なelFinder コンフィグレーションです! URLを設定してください',
+ 'errAccess' : 'アクセスが拒否されました',
+ 'errConnect' : 'バックエンドとの接続ができません',
+ 'errAbort' : '接続が中断されました',
+ 'errTimeout' : '接続がタイムアウトしました.',
+ 'errNotFound' : 'バックエンドが見つかりません',
+ 'errResponse' : '無効なバックエンドコンフィグレーションです',
+ 'errConf' : '無効なバックエンドコンフィグレーションです',
+ 'errJSON' : 'PHP JSON モジュールがインストールされていません',
+ 'errNoVolumes' : '読み込み可能なボリュームが入手できません',
+ 'errCmdParams' : 'コマンド "$1"のパラメーターが無効です',
+ 'errDataNotJSON' : 'JSONデータではありません',
+ 'errDataEmpty' : '空のデータです',
+ 'errCmdReq' : 'バックエンドリクエストがコマンド名を要求しています',
+ 'errOpen' : '"$1"を開くことができません',
+ 'errNotFolder' : 'オブジェクトがフォルダーではありません',
+ 'errNotFile' : 'オブジェクトがファイルではありません',
+ 'errRead' : '"$1"を読むことができません',
+ 'errWrite' : '"$1"に書きこむことができません',
+ 'errPerm' : '権限がありません',
+ 'errLocked' : '"$1" はロックされているので名前の変更、移動、削除ができません',
+ 'errExists' : '"$1"というファイル名はすでに存在しています',
+ 'errInvName' : '無効なファイル名です',
+ 'errFolderNotFound' : 'フォルダーが見つかりません',
+ 'errFileNotFound' : 'ファイルが見つかりません',
+ 'errTrgFolderNotFound' : 'ターゲットとするフォルダー "$1" が見つかりません',
+ 'errPopup' : 'ポップアップウィンドウが開けません。ファイルを開くにはブラウザの設定を変更してください',
+ 'errMkdir' : '"$1"フォルダーを作成することができません',
+ 'errMkfile' : '"$1"ファイルを作成することができません',
+ 'errRename' : '"$1"の名前を変更することができません',
+ 'errCopyFrom' : '"$1"からのファイルコピーが許可されていません',
+ 'errCopyTo' : '"$1"へのファイルコピーが許可されていません',
+ 'errUpload' : 'アップロードエラー', // old name - errUploadCommon
+ 'errUploadFile' : '"$1"がアップロードできません', // old name - errUpload
+ 'errUploadNoFiles' : 'アップロードされたファイルがありません',
+ 'errUploadTotalSize' : 'データが許容サイズを超えています', // old name - errMaxSize
+ 'errUploadFileSize' : 'ファイルが許容サイズを超えています', // old name - errFileMaxSize
+ 'errUploadMime' : '許可されていないファイル形式です',
+ 'errUploadTransfer' : '"$1" 転送エラーです',
+ 'errNotReplace' : 'アイテム "$1" は、すでにこの場所にありますがアイテムのタイプが違うので置き換えることはできません', // new
+ 'errReplace' : '"$1"を置き換えることができません',
+ 'errSave' : '"$1"を保存することができません',
+ 'errCopy' : '"$1"をコピーすることができません',
+ 'errMove' : '"$1"を移動することができません',
+ 'errCopyInItself' : '"$1"をそれ自身の中にコピーすることはできません',
+ 'errRm' : '"$1"を削除することができません',
+ 'errRmSrc' : 'Unable remove source file(s).',
+ 'errExtract' : '"$1"を解凍することができません',
+ 'errArchive' : 'アーカイブを作成することができません',
+ 'errArcType' : 'サポート外のアーカイブ形式です',
+ 'errNoArchive' : 'アーカイブでないかサポートされていないアーカイブ形式です',
+ 'errCmdNoSupport' : 'サポートされていないコマンドです',
+ 'errReplByChild' : 'フォルダ "$1" に含まれてるアイテムを置き換えることはできません',
+ 'errArcSymlinks' : 'シンボリックリンクまたは許容されないファイル名を含むアーカイブはセキュリティ上、解凍できません', // edited 25.06.2012
+ 'errArcMaxSize' : 'アーカイブが許容されたサイズを超えています',
+ 'errResize' : '"$1"をリサイズできません',
+ 'errResizeDegree' : 'イメージの回転角度が不正です', // added 7.3.2013
+ 'errResizeRotate' : 'イメージの回転ができません', // added 7.3.2013
+ 'errResizeSize' : '指定されたイメージサイズが不正です', // added 7.3.2013
+ 'errResizeNoChange' : 'イメージサイズなどの変更がありません', // added 7.3.2013
+ 'errUsupportType' : 'このファイルタイプはサポートされません',
+ 'errNotUTF8Content' : 'ファイル "$1" には UTF-8 以外の文字が含まれているので編集できません', // added 9.11.2011
+ 'errNetMount' : '"$1"をマウントできません', // added 17.04.2012
+ 'errNetMountNoDriver' : 'サポートされていないプロトコルです', // added 17.04.2012
+ 'errNetMountFailed' : 'マウントに失敗しました', // added 17.04.2012
+ 'errNetMountHostReq' : 'ホスト名は必須です', // added 18.04.2012
+ 'errSessionExpires' : 'アクションがなかったため、セッションが期限切れになりました',
+ 'errCreatingTempDir' : '一時ディレクトリを作成できません:"$1"',
+ 'errFtpDownloadFile' : 'FTP からファイルをダウンロードできません:"$1"',
+ 'errFtpUploadFile' : 'FTP へファイルをアップロードできません:"$1"',
+ 'errFtpMkdir' : 'FTP にリモートディレクトリを作成できません:"$1"',
+ 'errArchiveExec' : 'ファイルのアーカイブ中にエラーが発生しました:"$1"',
+ 'errExtractExec' : 'ファイルの抽出中にエラーが発生しました:"$1"',
+ 'errNetUnMount' : 'アンマウントできません', // added 30.04.2012
+ 'errConvUTF8' : 'UTF-8 に変換できませんでした', // added 08.04.2014
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'アーカイブ作成',
+ 'cmdback' : '戻る',
+ 'cmdcopy' : 'コピー',
+ 'cmdcut' : 'カット',
+ 'cmddownload' : 'ダウンロード',
+ 'cmdduplicate' : '複製',
+ 'cmdedit' : 'ファイル編集',
+ 'cmdextract' : 'アーカイブを解凍',
+ 'cmdforward' : '進む',
+ 'cmdgetfile' : 'ファイル選択',
+ 'cmdhelp' : 'このソフトウェアについて',
+ 'cmdhome' : 'ホーム',
+ 'cmdinfo' : '情報',
+ 'cmdmkdir' : '新規フォルダー',
+ 'cmdmkfile' : '新規テキストファイル',
+ 'cmdopen' : '開く',
+ 'cmdpaste' : 'ペースト',
+ 'cmdquicklook' : 'プレビュー',
+ 'cmdreload' : 'リロード',
+ 'cmdrename' : 'リネーム',
+ 'cmdrm' : '削除',
+ 'cmdsearch' : 'ファイルを探す',
+ 'cmdup' : '親ディレクトリーへ移動',
+ 'cmdupload' : 'ファイルアップロード',
+ 'cmdview' : 'ビュー',
+ 'cmdresize' : 'リサイズと回転',
+ 'cmdsort' : 'ソート',
+ 'cmdnetmount' : 'ネットワークボリュームをマウント', // added 18.04.2012
+ 'cmdnetunmount': 'アンマウント', // added 30.04.2012
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : '閉じる',
+ 'btnSave' : '保存',
+ 'btnRm' : '削除',
+ 'btnApply' : '適用',
+ 'btnCancel' : 'キャンセル',
+ 'btnNo' : 'いいえ',
+ 'btnYes' : 'はい',
+ 'btnMount' : 'マウント', // added 18.04.2012
+ 'btnApprove': '$1へ行き認可する', // added 26.04.2012
+ 'btnUnmount': 'アンマウント', // added 30.04.2012
+ 'btnConv' : '変換', // added 08.04.2014
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'フォルダーを開いています',
+ 'ntffile' : 'ファイルを開いています',
+ 'ntfreload' : 'フォルダーを再読込しています',
+ 'ntfmkdir' : 'ディレクトリーを作成しています',
+ 'ntfmkfile' : 'ファイルを作成しています',
+ 'ntfrm' : 'ファイルを削除しています',
+ 'ntfcopy' : 'ファイルをコピーしています',
+ 'ntfmove' : 'ファイルを移動しています',
+ 'ntfprepare' : 'ファイルコピーを準備しています',
+ 'ntfrename' : 'ファイル名を変更しています',
+ 'ntfupload' : 'ファイルをアップロードしています',
+ 'ntfdownload' : 'ファイルをダウンロードしています',
+ 'ntfsave' : 'ファイルを保存しています',
+ 'ntfarchive' : 'アーカイブ作成しています',
+ 'ntfextract' : 'アーカイブを解凍しています',
+ 'ntfsearch' : 'ファイル検索中',
+ 'ntfresize' : 'リサイズしています',
+ 'ntfsmth' : '処理をしています',
+ 'ntfloadimg' : 'イメージを読み込んでいます',
+ 'ntfnetmount' : 'ネットワークボリュームをマウントしています', // added 18.04.2012
+ 'ntfnetunmount': 'ネットワークボリュームをアンマウントしています', // added 30.04.2012
+ 'ntfdim' : '画像サイズを取得しています', // added 20.05.2013
+ 'ntfreaddir' : 'ホルダ情報を読み取っています', // added 01.07.2013
+ 'ntfurl' : 'リンクURLを取得しています', // added 11.03.2014
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : '不明',
+ 'Today' : '今日',
+ 'Yesterday' : '昨日',
+ 'Jan' : '1月',
+ 'Feb' : '2月',
+ 'Mar' : '3月',
+ 'Apr' : '4月',
+ 'May' : '5月',
+ 'Jun' : '6月',
+ 'Jul' : '7月',
+ 'Aug' : '8月',
+ 'Sep' : '9月',
+ 'Oct' : '10月',
+ 'Nov' : '11月',
+ 'Dec' : '12月',
+
+ /******************************** sort variants ********************************/
+ 'sortname' : '名前順',
+ 'sortkind' : '種類順',
+ 'sortsize' : 'サイズ順',
+ 'sortdate' : '日付順',
+ 'sortFoldersFirst' : 'フォルダ優先', // added 21.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : '処理を実行しますか?',
+ 'confirmRm' : '本当にファイルを削除しますか? この操作は取り消せません!',
+ 'confirmRepl' : '古いファイルを新しいファイルで上書きしますか?',
+ 'confirmConvUTF8' : 'UTF-8 以外の文字が含まれています。 UTF-8 に変換しますか? 変換後の保存でコンテンツは UTF-8 になります。', // added 08.04.2014
+ 'apllyAll' : '全てに適用します',
+ 'name' : '名前',
+ 'size' : 'サイズ',
+ 'perms' : '権限',
+ 'modify' : '更新',
+ 'kind' : '種類',
+ 'read' : '読み取り',
+ 'write' : '書き込み',
+ 'noaccess' : 'アクセス禁止',
+ 'and' : ',',
+ 'unknown' : '不明',
+ 'selectall' : '全てのファイルを選択',
+ 'selectfiles' : 'ファイル選択',
+ 'selectffile' : '最初のファイルを選択',
+ 'selectlfile' : '最後のファイルを選択',
+ 'viewlist' : 'リスト形式で見る',
+ 'viewicons' : 'アイコン形式で見る',
+ 'places' : 'Places',
+ 'calc' : '計算',
+ 'path' : 'パス',
+ 'aliasfor' : 'エイリアス',
+ 'locked' : 'ロックされています',
+ 'dim' : 'サイズ',
+ 'files' : 'ファイル',
+ 'folders' : 'フォルダー',
+ 'items' : 'アイテム',
+ 'yes' : 'はい',
+ 'no' : 'いいえ',
+ 'link' : 'リンク',
+ 'searcresult' : '検索結果',
+ 'selected' : '選択されたアイテム',
+ 'about' : 'アバウト',
+ 'shortcuts' : 'ショートカット',
+ 'help' : 'ヘルプ',
+ 'webfm' : 'ウェブファイルマネージャー',
+ 'ver' : 'バージョン',
+ 'protocolver' : 'プロトコルバージョン',
+ 'homepage' : 'プロジェクトホーム',
+ 'docs' : 'ドキュメンテーション',
+ 'github' : 'Github でフォーク',
+ 'twitter' : 'Twitter でフォロー',
+ 'facebook' : 'Facebookグループ に参加',
+ 'team' : 'チーム',
+ 'chiefdev' : 'チーフデベロッパー',
+ 'developer' : 'デベロッパー',
+ 'contributor' : 'コントリビュータ',
+ 'maintainer' : 'メインテナー',
+ 'translator' : '翻訳者',
+ 'icons' : 'アイコン',
+ 'dontforget' : 'タオル忘れちゃだめよー。',
+ 'shortcutsof' : 'ショートカットは利用できません',
+ 'dropFiles' : 'ここにファイルをドロップ',
+ 'or' : 'または',
+ 'selectForUpload' : 'アップロードするファイルを選択',
+ 'moveFiles' : 'ファイルを移動',
+ 'copyFiles' : 'ファイルをコピー',
+ 'rmFromPlaces' : 'ここから削除',
+ 'aspectRatio' : '縦横比維持',
+ 'scale' : '表示縮尺',
+ 'width' : '幅',
+ 'height' : '高さ',
+ 'resize' : 'リサイズ',
+ 'crop' : '切り抜き',
+ 'rotate' : '回転',
+ 'rotate-cw' : '90度左回転',
+ 'rotate-ccw' : '90度右回転',
+ 'degree' : '度',
+ 'netMountDialogTitle' : 'ネットワークボリュームのマウント', // added 18.04.2012
+ 'protocol' : 'プロトコル', // added 18.04.2012
+ 'host' : 'ホスト名', // added 18.04.2012
+ 'port' : 'ポート', // added 18.04.2012
+ 'user' : 'ユーザー名', // added 18.04.2012
+ 'pass' : 'パスワード', // added 18.04.2012
+ 'confirmUnmount' : '$1をアンマウントしますか?', // added 30.04.2012
+ 'dropFilesBrowser': 'ブラウザからファイルをドロップまたは貼り付け', // added 30.05.2012
+ 'dropPasteFiles' : 'ここにファイルをドロップまたは貼り付け', // added 07.04.2014
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : '不明',
+ 'kindFolder' : 'フォルダー',
+ 'kindAlias' : '別名',
+ 'kindAliasBroken' : '宛先不明の別名',
+ // applications
+ 'kindApp' : 'アプリケーション',
+ 'kindPostscript' : 'Postscript ドキュメント',
+ 'kindMsOffice' : 'Microsoft Office ドキュメント',
+ 'kindMsWord' : 'Microsoft Word ドキュメント',
+ 'kindMsExcel' : 'Microsoft Excel ドキュメント',
+ 'kindMsPP' : 'Microsoft Powerpoint プレゼンテーション',
+ 'kindOO' : 'Open Office ドキュメント',
+ 'kindAppFlash' : 'Flash アプリケーション',
+ 'kindPDF' : 'PDF',
+ 'kindTorrent' : 'Bittorrent ファイル',
+ 'kind7z' : '7z アーカイブ',
+ 'kindTAR' : 'TAR アーカイブ',
+ 'kindGZIP' : 'GZIP アーカイブ',
+ 'kindBZIP' : 'BZIP アーカイブ',
+ 'kindZIP' : 'ZIP アーカイブ',
+ 'kindRAR' : 'RAR アーカイブ',
+ 'kindJAR' : 'Java JAR ファイル',
+ 'kindTTF' : 'True Type フォント',
+ 'kindOTF' : 'Open Type フォント',
+ 'kindRPM' : 'RPM パッケージ',
+ // texts
+ 'kindText' : 'Text ドキュメント',
+ 'kindTextPlain' : 'プレインテキスト',
+ 'kindPHP' : 'PHP ソース',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML ドキュメント',
+ 'kindJS' : 'Javascript ソース',
+ 'kindRTF' : 'Rich Text フォーマット',
+ 'kindC' : 'C ソース',
+ 'kindCHeader' : 'C ヘッダーソース',
+ 'kindCPP' : 'C++ ソース',
+ 'kindCPPHeader' : 'C++ ヘッダーソース',
+ 'kindShell' : 'Unix shell スクリプト',
+ 'kindPython' : 'Python ソース',
+ 'kindJava' : 'Java ソース',
+ 'kindRuby' : 'Ruby ソース',
+ 'kindPerl' : 'Perl スクリプト',
+ 'kindSQL' : 'SQL ソース',
+ 'kindXML' : 'XML ドキュメント',
+ 'kindAWK' : 'AWK ソース',
+ 'kindCSV' : 'CSV',
+ 'kindDOCBOOK' : 'Docbook XML ドキュメント',
+ // images
+ 'kindImage' : 'イメージ',
+ 'kindBMP' : 'BMP イメージ',
+ 'kindJPEG' : 'JPEG イメージ',
+ 'kindGIF' : 'GIF イメージ',
+ 'kindPNG' : 'PNG イメージ',
+ 'kindTIFF' : 'TIFF イメージ',
+ 'kindTGA' : 'TGA イメージ',
+ 'kindPSD' : 'Adobe Photoshop イメージ',
+ 'kindXBITMAP' : 'X bitmap イメージ',
+ 'kindPXM' : 'Pixelmator イメージ',
+ // media
+ 'kindAudio' : 'オーディオメディア',
+ 'kindAudioMPEG' : 'MPEG オーディオ',
+ 'kindAudioMPEG4' : 'MPEG-4 オーディオ',
+ 'kindAudioMIDI' : 'MIDI オーディオ',
+ 'kindAudioOGG' : 'Ogg Vorbis オーディオ',
+ 'kindAudioWAV' : 'WAV オーディオ',
+ 'AudioPlaylist' : 'MP3 プレイリスト',
+ 'kindVideo' : 'ビデオメディア',
+ 'kindVideoDV' : 'DV ムービー',
+ 'kindVideoMPEG' : 'MPEG ムービー',
+ 'kindVideoMPEG4' : 'MPEG-4 ムービー',
+ 'kindVideoAVI' : 'AVI ムービー',
+ 'kindVideoMOV' : 'Quick Time ムービー',
+ 'kindVideoWM' : 'Windows Media ムービー',
+ 'kindVideoFlash' : 'Flash ムービー',
+ 'kindVideoMKV' : 'Matroska ムービー',
+ 'kindVideoOGG' : 'Ogg ムービー'
+ }
+ };
+}
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ko.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ko.js
new file mode 100644
index 00000000..07cc1282
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ko.js
@@ -0,0 +1,340 @@
+/**
+ * Korean translation
+ * @author Hwang Ahreum 황아름
+ * @version 2012-06-27
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.ko = {
+ translator : 'Hwang Ahreum; <luckmagic@naver.com>',
+ language : 'Korea-한국어',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : '에러',
+ 'errUnknown' : '알 수 없는 에러',
+ 'errUnknownCmd' : '알 수 없는 명령어',
+ 'errJqui' : 'jQuery UI 환경설정이 올바르지 않습니다. 선택,드래그앤드롭 컴포넌트가 포함되어야합니다',
+ 'errNode' : 'elFinder를 생성하기 위해서는 DOM Element를 요구합니다',
+ 'errURL' : 'elFinder 환경설정이 올바르지 않습니다! URL 옵션이 설정되지 않았습니다',
+ 'errAccess' : '액세스 할 수 없습니다',
+ 'errConnect' : 'Backend에 연결할 수 없습니다',
+ 'errAbort' : '연결 실패',
+ 'errTimeout' : '연결시간 초과',
+ 'errNotFound' : 'Backend를 찾을 수 없습니다',
+ 'errResponse' : 'Backend가 응답하지 않습니다',
+ 'errConf' : 'Backend 환경설정이 올바르지 않습니다',
+ 'errJSON' : 'PHP JSON 모듈이 설치되지 않았습니다',
+ 'errNoVolumes' : '읽기 가능한 볼률이 없습니다',
+ 'errCmdParams' : ' "$1" 명령어는 잘못된 인수입니다',
+ 'errDataNotJSON' : '데이터는 JSON이 아닙니다',
+ 'errDataEmpty' : '빈 데이터 입니다',
+ 'errCmdReq' : 'Backend는 필요한 명령어 이름을 요청합니다',
+ 'errOpen' : ' "$1" 열 수 없습니다',
+ 'errNotFolder' : '폴더가 아닙니다',
+ 'errNotFile' : '파일이 아닙니다',
+ 'errRead' : ' "$1" 읽을 수 없습니다',
+ 'errWrite' : ' "$1" 쓸 수 없습니다',
+ 'errPerm' : '권한이 없습니다',
+ 'errLocked' : ' "$1" 잠겨 있습니다, 이동,삭제가 불가능합니다',
+ 'errExists' : ' "$1" 존재합니다',
+ 'errInvName' : '이름에 올바르지 않은 문자가 포함되었습니다',
+ 'errFolderNotFound' : '폴더를 찾을 수 없습니다',
+ 'errFileNotFound' : '파일을 찾을 수 없습니다',
+ 'errTrgFolderNotFound' : ' "$1" 폴더를 찾을 수 없습니다',
+ 'errPopup' : '브라우저에서 팝업을 차단하였습니다.팝업을 허용하려면 브라우저 옵션을 변경하세요',
+ 'errMkdir' : ' "$1" 폴더를 생성할 수 없습니다',
+ 'errMkfile' : ' "$1" 파일을 생성할 수 없습니다',
+ 'errRename' : ' "$1" 이름을 변경할 수 없습니다',
+ 'errCopyFrom' : '볼률 "$1" 로부터 파일을 복사할 수 없습니다',
+ 'errCopyTo' : '볼률 "$1" 에 파일을 복사할 수 없습니다',
+ 'errUploadCommon' : '업로드 에러',
+ 'errUpload' : ' "$1" 업로드할 수 없습니다',
+ 'errUploadNoFiles' : '업로드할 파일이 없습니다',
+ 'errMaxSize' : '데이터가 허용된 최대크기를 초과하였습니다',
+ 'errFileMaxSize' : '파일이 허용된 최대크기를 초과하였습니다',
+ 'errUploadMime' : '잘못된 파일형식입니다',
+ 'errUploadTransfer' : ' "$1" 전송 에러',
+ 'errSave' : ' "$1" 저장할 수 없습니다',
+ 'errCopy' : ' "$1" 복사할 수 없습니다',
+ 'errMove' : ' "$1" 이동할 수 없습니다',
+ 'errCopyInItself' : ' "$1" 이곳에 복사 할 수 없습니다',
+ 'errRm' : ' "$1" 이름을 변경할 수 없습니다',
+ 'errExtract' : ' "$1" 에 압축을 풀 수 없습니다',
+ 'errArchive' : '압축파일을 생성할 수 없습니다',
+ 'errArcType' : '지원하지 않는 압축파일 형식입니다',
+ 'errNoArchive' : '압축파일이 아니거나 지원하지 않는 압축파일 형식입니다',
+ 'errCmdNoSupport' : '이 명령어는 Backend를 지원하지 않습니다',
+ 'errReplByChild' : ' "$1" 폴더에 덮어쓸수 없습니다',
+ 'errArcSymlinks' : '보안을 위해 시스템 호출을 포함한 압축파일인지를 분석합니다',
+ 'errArcMaxSize' : '압축파일이 허용된 최대크기를 초과하였습니다',
+ 'errResize' : ' "$1" 크기 변경을 할 수 없습니다',
+ 'errUsupportType' : '지원하지 않는 파일 형식',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : '압축파일생성',
+ 'cmdback' : '뒤로',
+ 'cmdcopy' : '복사',
+ 'cmdcut' : '자르기',
+ 'cmddownload' : '다운로드',
+ 'cmdduplicate' : '사본',
+ 'cmdedit' : '편집',
+ 'cmdextract' : '압축풀기',
+ 'cmdforward' : '앞으로',
+ 'cmdgetfile' : '선택',
+ 'cmdhelp' : '이 소프트웨어는',
+ 'cmdhome' : '홈',
+ 'cmdinfo' : '파일정보',
+ 'cmdmkdir' : '새 폴더',
+ 'cmdmkfile' : '새 텍스트파일',
+ 'cmdopen' : '열기',
+ 'cmdpaste' : '붙여넣기',
+ 'cmdquicklook' : '미리보기',
+ 'cmdreload' : '새로고침',
+ 'cmdrename' : '이름바꾸기',
+ 'cmdrm' : '삭제',
+ 'cmdsearch' : '파일찾기',
+ 'cmdup' : '상위폴더',
+ 'cmdupload' : '업로드',
+ 'cmdview' : '보기',
+ 'cmdresize' : '이미지 사이즈변경',
+ 'cmdsort' : '정렬',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : '닫기',
+ 'btnSave' : '저장',
+ 'btnRm' : '삭제',
+ 'btnApply' : '적용',
+ 'btnCancel' : '취소',
+ 'btnNo' : '아니오',
+ 'btnYes' : '예',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : '폴더 열기',
+ 'ntffile' : '파일 열기',
+ 'ntfreload' : '새로고침',
+ 'ntfmkdir' : '폴더 생성',
+ 'ntfmkfile' : '파일 생성',
+ 'ntfrm' : '삭제',
+ 'ntfcopy' : '복사',
+ 'ntfmove' : '이동',
+ 'ntfprepare' : '복사 준비',
+ 'ntfrename' : '이름바꾸기',
+ 'ntfupload' : '업로드',
+ 'ntfdownload' : '다운로드',
+ 'ntfsave' : '저장하기',
+ 'ntfarchive' : '압축파일만들기',
+ 'ntfextract' : '압축풀기',
+ 'ntfsearch' : '검색',
+ 'ntfsmth' : '작업중 >_<',
+ 'ntfloadimg' : '이미지 불러오기',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : '알수없음',
+ 'Today' : '오늘',
+ 'Yesterday' : '내일',
+ 'Jan' : '1월',
+ 'Feb' : '2월',
+ 'Mar' : '3월',
+ 'Apr' : '4월',
+ 'May' : '5월',
+ 'Jun' : '6월',
+ 'Jul' : '7월',
+ 'Aug' : '8월',
+ 'Sep' : '9월',
+ 'Oct' : '10월',
+ 'Nov' : '11월',
+ 'Dec' : '12월',
+ 'January' : '1월',
+ 'February' : '2월',
+ 'March' : '3월',
+ 'April' : '4월',
+ 'May' : '5월',
+ 'June' : '6월',
+ 'July' : '7월',
+ 'August' : '8월',
+ 'September' : '9월',
+ 'October' : '10월',
+ 'November' : '11월',
+ 'December' : '12월',
+ 'Sunday' : '일요일',
+ 'Monday' : '월요일',
+ 'Tuesday' : '화요일',
+ 'Wednesday' : '수요일',
+ 'Thursday' : '목요일',
+ 'Friday' : '금요일',
+ 'Saturday' : '토요일',
+ 'Sun' : '일',
+ 'Mon' : '월',
+ 'Tue' : '화',
+ 'Wed' : '수',
+ 'Thu' : '목',
+ 'Fri' : '금',
+ 'Sat' : '토',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : '이름 (폴더 먼저)',
+ 'sortkindDirsFirst' : '종류 (폴더 먼저)',
+ 'sortsizeDirsFirst' : '크기 (폴더 먼저)',
+ 'sortdateDirsFirst' : '날짜 (폴더 먼저)',
+ 'sortname' : '이름',
+ 'sortkind' : '종류',
+ 'sortsize' : '크기',
+ 'sortdate' : '날짜',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : '확인',
+ 'confirmRm' : '이 파일을 정말 삭제 하겠습니까? 실행 후 되돌릴 수 없습니다!',
+ 'confirmRepl' : '파일을 덮어쓰겠습니까?',
+ 'apllyAll' : '모두 적용',
+ 'name' : '이름',
+ 'size' : '크기',
+ 'perms' : '권한',
+ 'modify' : '수정된 시간',
+ 'kind' : '종류',
+ 'read' : '읽기',
+ 'write' : '쓰기',
+ 'noaccess' : '액세스 불가',
+ 'and' : '와',
+ 'unknown' : '알 수 없음',
+ 'selectall' : '모든 파일 선택',
+ 'selectfiles' : '파일 선택',
+ 'selectffile' : '첫번째 파일 선택',
+ 'selectlfile' : '마지막 파일 선택',
+ 'viewlist' : '리스트 보기',
+ 'viewicons' : '아이콘 보기',
+ 'places' : '위치',
+ 'calc' : '계산',
+ 'path' : '경로',
+ 'aliasfor' : '별명',
+ 'locked' : '잠금',
+ 'dim' : '크기',
+ 'files' : '파일',
+ 'folders' : '폴더',
+ 'items' : '아이템',
+ 'yes' : '예',
+ 'no' : '아니오',
+ 'link' : '링크',
+ 'searcresult' : '검색 결과',
+ 'selected' : '아이템 선택',
+ 'about' : 'About',
+ 'shortcuts' : '단축아이콘',
+ 'help' : '도움말',
+ 'webfm' : '웹 파일매니저',
+ 'ver' : '버전',
+ 'protocol' : '프로토콜 버전',
+ 'homepage' : '홈페이지',
+ 'docs' : '문서',
+ 'github' : 'Fork us on Github',
+ 'twitter' : '트위터따라가기',
+ 'facebook' : '페이스북 가입하기',
+ 'team' : '팀',
+ 'chiefdev' : '개발팀장',
+ 'developer' : '개발자',
+ 'contributor' : '공헌자',
+ 'maintainer' : '관리자',
+ 'translator' : '번역',
+ 'icons' : '아이콘',
+ 'dontforget' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : '단축아이콘 사용불가',
+ 'dropFiles' : '여기로 이동하기',
+ 'or' : '또는',
+ 'selectForUpload' : '업로드 파일 선택',
+ 'moveFiles' : '파일 이동',
+ 'copyFiles' : '파일 복사',
+ 'rmFromPlaces' : '현재 폴더에서 삭제하기',
+ 'untitled folder' : '새 폴더',
+ 'untitled file.txt' : '새 텍스트.txt',
+ 'aspectRatio' : '화면비율',
+ 'scale' : '크기',
+ 'width' : '가로',
+ 'height' : '세로',
+ 'mode' : '모드',
+ 'resize' : '사이즈 변경',
+ 'crop' : '자르기',
+ 'rotate' : '회전',
+ 'rotate-cw' : '반시계방향 90도 회전',
+ 'rotate-ccw' : '시계방향 90도 회전',
+ 'degree' : '각도',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : '알수없음',
+ 'kindFolder' : '폴더',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : '손상된 Alias',
+ // applications
+ 'kindApp' : '응용프로그램',
+ 'kindPostscript' : 'Postscript 문서',
+ 'kindMsOffice' : 'Microsoft Office 문서',
+ 'kindMsWord' : 'Microsoft Word 문서',
+ 'kindMsExcel' : 'Microsoft Excel 문서',
+ 'kindMsPP' : 'Microsoft Powerpoint',
+ 'kindOO' : 'Office 문서 열기',
+ 'kindAppFlash' : '플래쉬',
+ 'kindPDF' : 'PDF(PDF)',
+ 'kindTorrent' : 'Bittorrent 파일',
+ 'kind7z' : '7z 압축파일',
+ 'kindTAR' : 'TAR 압축파일',
+ 'kindGZIP' : 'GZIP 압축파일',
+ 'kindBZIP' : 'BZIP 압축파일',
+ 'kindZIP' : 'ZIP 압축파일',
+ 'kindRAR' : 'RAR 압축파일',
+ 'kindJAR' : 'Java JAR 파일',
+ 'kindTTF' : '트루타입 글꼴',
+ 'kindOTF' : '오픈타입 글꼴',
+ 'kindRPM' : 'RPM 패키지',
+ // texts
+ 'kindText' : 'Text 문서',
+ 'kindTextPlain' : '보통 텍스트',
+ 'kindPHP' : 'PHP 소스',
+ 'kindCSS' : 'CSS 문서',
+ 'kindHTML' : 'HTML 문서',
+ 'kindJS' : '자바스크립트 소스',
+ 'kindRTF' : 'RTF 형식',
+ 'kindC' : 'C 소스',
+ 'kindCHeader' : 'C 헤더소스',
+ 'kindCPP' : 'C++ 소스',
+ 'kindCPPHeader' : 'C++ 헤더소스',
+ 'kindShell' : 'Unix shell 스크립트',
+ 'kindPython' : 'Python 소스',
+ 'kindJava' : 'Java 소스',
+ 'kindRuby' : 'Ruby 소스',
+ 'kindPerl' : 'Perl 스크립트',
+ 'kindSQL' : 'SQL 소스',
+ 'kindXML' : 'XML 문서',
+ 'kindAWK' : 'AWK 소스',
+ 'kindCSV' : 'CSV 형식',
+ 'kindDOCBOOK' : 'XML 닥북 문서',
+ // images
+ 'kindImage' : '이미지',
+ 'kindBMP' : 'BMP 이미지',
+ 'kindJPEG' : 'JPEG 이미지',
+ 'kindGIF' : 'GIF 이미지',
+ 'kindPNG' : 'PNG 이미지',
+ 'kindTIFF' : 'TIFF 이미지',
+ 'kindTGA' : 'TGA 이미지',
+ 'kindPSD' : 'Adobe Photoshop 이미지',
+ 'kindXBITMAP' : 'X bitmap 이미지',
+ 'kindPXM' : 'Pixelmator 이미지',
+ // media
+ 'kindAudio' : '오디오 미디어',
+ 'kindAudioMPEG' : 'MPEG 오디오',
+ 'kindAudioMPEG4' : 'MPEG-4 오디오',
+ 'kindAudioMIDI' : 'MIDI 오디오',
+ 'kindAudioOGG' : 'Ogg Vorbis 오디오',
+ 'kindAudioWAV' : 'WAV 오디오',
+ 'AudioPlaylist' : 'MP3 플레이 리스트',
+ 'kindVideo' : 'Video 미디어',
+ 'kindVideoDV' : 'DV 동영상',
+ 'kindVideoMPEG' : 'MPEG 동영상',
+ 'kindVideoMPEG4' : 'MPEG-4 동영상',
+ 'kindVideoAVI' : 'AVI 동영상',
+ 'kindVideoMOV' : '퀵타임 동영상',
+ 'kindVideoWM' : '윈도우 미디어 플레이어 동영상',
+ 'kindVideoFlash' : '플래쉬 동영상',
+ 'kindVideoMKV' : 'Matroska 동영상',
+ 'kindVideoOGG' : 'Ogg 동영상'
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.nl.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.nl.js
new file mode 100644
index 00000000..c2f4c38a
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.nl.js
@@ -0,0 +1,361 @@
+/**
+ * Dutch translation
+ * @author Barry vd. Heuvel
+ * @version 2012-04-02
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.nl = {
+ translator : 'Barry vd. Heuvel <barry@fruitcakestudio.nl>',
+ language : 'Nederlands',
+ direction : 'ltr',
+ dateFormat : 'd-m-Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Fout',
+ 'errUnknown' : 'Onbekend fout.',
+ 'errUnknownCmd' : 'Onbekend commando.',
+ 'errJqui' : 'Ongeldige jQuery UI configuratie. Selectable, draggable en droppable componenten moeten aanwezig zijn.',
+ 'errNode' : 'Voor elFinder moet een DOM Element gemaakt worden.',
+ 'errURL' : 'Ongeldige elFinder configuratie! URL optie is niet ingesteld.',
+ 'errAccess' : 'Toegang geweigerd.',
+ 'errConnect' : 'Kan geen verbinding met de backend maken.',
+ 'errAbort' : 'Verbinding afgebroken.',
+ 'errTimeout' : 'Verbinding time-out.',
+ 'errNotFound' : 'Backend niet gevonden.',
+ 'errResponse' : 'Ongeldige reactie van de backend.',
+ 'errConf' : 'Ongeldige backend configuratie.',
+ 'errJSON' : 'PHP JSON module niet geïnstalleerd.',
+ 'errNoVolumes' : 'Leesbaar volume is niet beschikbaar.',
+ 'errCmdParams' : 'Ongeldige parameters voor commando "$1".',
+ 'errDataNotJSON' : 'Data is niet JSON.',
+ 'errDataEmpty' : 'Data is leeg.',
+ 'errCmdReq' : 'Backend verzoek heeft een commando naam nodig.',
+ 'errOpen' : 'Kan "$1" niet openen.',
+ 'errNotFolder' : 'Object is geen map.',
+ 'errNotFile' : 'Object is geen bestand.',
+ 'errRead' : 'Kan "$1" niet lezen.',
+ 'errWrite' : 'Kan niet schrijven in "$1".',
+ 'errPerm' : 'Toegang geweigerd.',
+ 'errLocked' : '"$1" is vergrendeld en kan niet hernoemd, verplaats of verwijderd worden.',
+ 'errExists' : 'Bestand "$1" bestaat al.',
+ 'errInvName' : 'Ongeldige bestandsnaam.',
+ 'errFolderNotFound' : 'Map niet gevonden.',
+ 'errFileNotFound' : 'Bestand niet gevonden.',
+ 'errTrgFolderNotFound' : 'Doelmap"$1" niet gevonden.',
+ 'errPopup' : 'De browser heeft voorkomen dat de pop-up is geopend. Pas de browser instellingen aan om de popup te kunnen openen.',
+ 'errMkdir' : 'Kan map "$1" niet aanmaken.',
+ 'errMkfile' : 'Kan bestand "$1" niet aanmaken.',
+ 'errRename' : 'Kan "$1" niet hernoemen.',
+ 'errCopyFrom' : 'Bestanden kopiëren van "$1" is niet toegestaan.',
+ 'errCopyTo' : 'Bestanden kopiëren naar "$1" is niet toegestaan.',
+ 'errUploadCommon' : 'Upload fout.',
+ 'errUpload' : 'Kan "$1" niet uploaden.',
+ 'errUploadNoFiles' : 'Geen bestanden gevonden om te uploaden.',
+ 'errMaxSize' : 'Data overschrijdt de maximale grootte.',
+ 'errFileMaxSize' : 'Bestand overschrijdt de maximale grootte.',
+ 'errUploadMime' : 'Bestandstype niet toegestaan.',
+ 'errUploadTransfer' : '"$1" overdrachtsfout.',
+ 'errSave' : 'Kan "$1" niet opslaan.',
+ 'errCopy' : 'Kan "$1" niet kopiëren.',
+ 'errMove' : 'Kan "$1" niet verplaatsen.',
+ 'errCopyInItself' : 'Kan "$1" niet in zichzelf kopiëren.',
+ 'errRm' : 'Kan "$1" niet verwijderen.',
+ 'errExtract' : 'Kan de bestanden van "$1" niet uitpakken.',
+ 'errArchive' : 'Kan het archief niet maken.',
+ 'errArcType' : 'Archief type is niet ondersteund.',
+ 'errNoArchive' : 'Bestand is geen archief of geen ondersteund archief type.',
+ 'errCmdNoSupport' : 'Backend ondersteund dit commando niet.',
+ 'errReplByChild' : 'De map "$1" kan niet vervangen worden door een item uit die map.',
+ 'errArcSymlinks' : 'Om veiligheidsredenen kan een bestand met symlinks of bestanden met niet toegestane namen niet worden uitgepakt .',
+ 'errArcMaxSize' : 'Archief overschrijdt de maximale bestandsgrootte.',
+ 'errResize' : 'Kan het formaat van "$1" niet wijzigen.',
+ 'errUsupportType' : 'Bestandstype wordt niet ondersteund.',
+ 'errNotUTF8Content' : 'Bestand "$1" is niet in UTF-8 and kan niet aangepast worden.',
+ 'errNetMount' : 'Kan "$1" niet mounten.',
+ 'errNetMountNoDriver' : 'Niet ondersteund protocol.',
+ 'errNetMountFailed' : 'Mount mislukt.',
+ 'errNetMountHostReq' : 'Host is verplicht.',
+ 'errSessionExpires' : 'Uw sessie is verlopen vanwege inactiviteit.',
+ 'errCreatingTempDir' : 'Kan de tijdelijke map niet aanmaken: "$1" ',
+ 'errFtpDownloadFile' : 'Kan het bestand niet downloaden vanaf FTP: "$1"',
+ 'errFtpUploadFile' : 'Kan het bestand niet uploaden naar FTP: "$1"',
+ 'errFtpMkdir' : 'Kan het externe map niet aanmaken op de FTP-server: "$1"',
+ 'errArchiveExec' : 'Er is een fout opgetreden bij het archivering van de bestanden: "$1" ',
+ 'errExtractExec' : 'Er is een fout opgetreden bij het uitpakken van de bestanden: "$1" ',
+ 'errUploadFile' : 'Kan "$1" niet uploaden',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Maak archief',
+ 'cmdback' : 'Vorige',
+ 'cmdcopy' : 'Kopieer',
+ 'cmdcut' : 'Knip',
+ 'cmddownload' : 'Download',
+ 'cmdduplicate' : 'Dupliceer',
+ 'cmdedit' : 'Pas bestand aan',
+ 'cmdextract' : 'Bestanden uit archief uitpakken',
+ 'cmdforward' : 'Volgende',
+ 'cmdgetfile' : 'Kies bestanden',
+ 'cmdhelp' : 'Over deze software',
+ 'cmdhome' : 'Home',
+ 'cmdinfo' : 'Bekijk info',
+ 'cmdmkdir' : 'Nieuwe map',
+ 'cmdmkfile' : 'Nieuw tekstbestand',
+ 'cmdopen' : 'Open',
+ 'cmdpaste' : 'Plak',
+ 'cmdquicklook' : 'Voorbeeld',
+ 'cmdreload' : 'Vernieuwen',
+ 'cmdrename' : 'Naam wijzigen',
+ 'cmdrm' : 'Verwijder',
+ 'cmdsearch' : 'Zoek bestanden',
+ 'cmdup' : 'Ga een map hoger',
+ 'cmdupload' : 'Upload bestanden',
+ 'cmdview' : 'Bekijk',
+ 'cmdresize' : 'Formaat wijzigen',
+ 'cmdsort' : 'Sorteren',
+ 'cmdnetmount' : 'Mount netwerk volume',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Sluit',
+ 'btnSave' : 'Opslaan',
+ 'btnRm' : 'Verwijder',
+ 'btnApply' : 'Toepassen',
+ 'btnCancel' : 'Annuleren',
+ 'btnNo' : 'Nee',
+ 'btnYes' : 'Ja',
+ 'btnMount' : 'Mount',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Bezig met openen van map',
+ 'ntffile' : 'Bezig met openen bestand',
+ 'ntfreload' : 'Herladen map inhoud',
+ 'ntfmkdir' : 'Bezig met map maken',
+ 'ntfmkfile' : 'Bezig met Bestanden maken',
+ 'ntfrm' : 'Verwijderen bestanden',
+ 'ntfcopy' : 'Kopieer bestanden',
+ 'ntfmove' : 'Verplaats bestanden',
+ 'ntfprepare' : 'Voorbereiden kopiëren',
+ 'ntfrename' : 'Hernoem bestanden',
+ 'ntfupload' : 'Bestanden uploaden actief',
+ 'ntfdownload' : 'Bestanden downloaden actief',
+ 'ntfsave' : 'Bestanden opslaan',
+ 'ntfarchive' : 'Archief aan het maken',
+ 'ntfextract' : 'Bestanden uitpakken actief',
+ 'ntfsearch' : 'Zoeken naar bestanden',
+ 'ntfsmth' : 'Iets aan het doen',
+ 'ntfloadimg' : 'Laden van plaatje',
+ 'ntfnetmount' : 'Verhogen netwerk volume',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'onbekend',
+ 'Today' : 'Vandaag',
+ 'Yesterday' : 'Gisteren',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'Mei',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Aug',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Okt',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dec',
+ 'January' : 'Januari',
+ 'February' : 'Februari',
+ 'March' : 'Maart',
+ 'April' : 'April',
+ 'May' : 'Mei',
+ 'June' : 'Juni',
+ 'July' : 'Juli',
+ 'August' : 'Augustus',
+ 'September' : 'September',
+ 'October' : 'Oktober',
+ 'November' : 'November',
+ 'December' : 'December',
+ 'Sunday' : 'Zondag',
+ 'Monday' : 'Maandag',
+ 'Tuesday' : 'Dinsdag',
+ 'Wednesday' : 'Woensdag',
+ 'Thursday' : 'Donderdag',
+ 'Friday' : 'Vrijdag',
+ 'Saturday' : 'Zaterdag',
+ 'Sun' : 'Zo',
+ 'Mon' : 'Ma',
+ 'Tue' : 'Di',
+ 'Wed' : 'Wo',
+ 'Thu' : 'Do',
+ 'Fri' : 'Vr',
+ 'Sat' : 'Za',
+
+ /******************************** sort variants ********************************/
+ 'sortname' : 'op naam',
+ 'sortkind' : 'op type',
+ 'sortsize' : 'op grootte',
+ 'sortdate' : 'op datum',
+ 'sortFoldersFirst' : 'Mappen eerst',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bevestiging nodig',
+ 'confirmRm' : 'Weet u zeker dat u deze bestanden wil verwijderen? Deze actie kan niet ongedaan gemaakt worden!',
+ 'confirmRepl' : 'Oud bestand vervangen door het nieuwe bestand?',
+ 'apllyAll' : 'Toepassen op alles',
+ 'name' : 'Naam',
+ 'size' : 'Grootte',
+ 'perms' : 'Rechten',
+ 'modify' : 'Aangepast',
+ 'kind' : 'Type',
+ 'read' : 'lees',
+ 'write' : 'schrijf',
+ 'noaccess' : 'geen toegang',
+ 'and' : 'en',
+ 'unknown' : 'onbekend',
+ 'selectall' : 'Selecteer alle bestanden',
+ 'selectfiles' : 'Selecteer bestand(en)',
+ 'selectffile' : 'Selecteer eerste bestand',
+ 'selectlfile' : 'Selecteer laatste bestand',
+ 'viewlist' : 'Lijst weergave',
+ 'viewicons' : 'Icoon weergave',
+ 'places' : 'Plaatsen',
+ 'calc' : 'Bereken',
+ 'path' : 'Pad',
+ 'aliasfor' : 'Alias voor',
+ 'locked' : 'Vergrendeld',
+ 'dim' : 'Dimensies',
+ 'files' : 'Bestanden',
+ 'folders' : 'Mappen',
+ 'items' : 'Items',
+ 'yes' : 'ja',
+ 'no' : 'nee',
+ 'link' : 'Link',
+ 'searcresult' : 'Zoek resultaten',
+ 'selected' : 'geselecteerde items',
+ 'about' : 'Over',
+ 'shortcuts' : 'Snelkoppelingen',
+ 'help' : 'Help',
+ 'webfm' : 'Web bestandsmanager',
+ 'ver' : 'Versie',
+ 'protocolver' : 'protocol versie',
+ 'homepage' : 'Project home',
+ 'docs' : 'Documentatie',
+ 'github' : 'Fork ons op Github',
+ 'twitter' : 'Volg ons op twitter',
+ 'facebook' : 'Wordt lid op facebook',
+ 'team' : 'Team',
+ 'chiefdev' : 'Hoofd ontwikkelaar',
+ 'developer' : 'ontwikkelaar',
+ 'contributor' : 'bijdrager',
+ 'maintainer' : 'onderhouder',
+ 'translator' : 'vertaler',
+ 'icons' : 'Iconen',
+ 'dontforget' : 'En vergeet je handdoek niet!',
+ 'shortcutsof' : 'Snelkoppelingen uitgeschakeld',
+ 'dropFiles' : 'Sleep hier uw bestanden heen',
+ 'or' : 'of',
+ 'selectForUpload' : 'Selecteer bestanden om te uploaden',
+ 'moveFiles' : 'Verplaats bestanden',
+ 'copyFiles' : 'Kopieer bestanden',
+ 'rmFromPlaces' : 'Verwijder uit Plaatsen',
+ 'untitled folder' : 'Nieuwe map',
+ 'untitled file.txt' : 'nieuw bestand.txt',
+ 'aspectRatio' : 'Aspect ratio',
+ 'scale' : 'Schaal',
+ 'width' : 'Breedte',
+ 'height' : 'Hoogte',
+ 'mode' : 'Modus',
+ 'resize' : 'Verkleinen', //Or: Vergroten/verkleinen
+ 'crop' : 'Bijsnijden',
+ 'rotate' : 'Draaien',
+ 'rotate-cw' : 'Draai 90 graden rechtsom',
+ 'rotate-ccw' : 'Draai 90 graden linksom',
+ 'degree' : '°',
+ 'netMountDialogTitle' : 'Mount network volume',
+ 'protocol' : 'Protocol',
+ 'host' : 'Host',
+ 'port' : 'Poort',
+ 'user' : 'Gebruikersnaams',
+ 'pass' : 'Wachtwoord',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Onbekend',
+ 'kindFolder' : 'Map',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Kapot alias',
+ // applications
+ 'kindApp' : 'Applicatie',
+ 'kindPostscript' : 'Postscript document',
+ 'kindMsOffice' : 'Microsoft Office document',
+ 'kindMsWord' : 'Microsoft Word document',
+ 'kindMsExcel' : 'Microsoft Excel document',
+ 'kindMsPP' : 'Microsoft Powerpoint presentation',
+ 'kindOO' : 'Open Office document',
+ 'kindAppFlash' : 'Flash applicatie',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent bestand',
+ 'kind7z' : '7z archief',
+ 'kindTAR' : 'TAR archief',
+ 'kindGZIP' : 'GZIP archief',
+ 'kindBZIP' : 'BZIP archief',
+ 'kindZIP' : 'ZIP archief',
+ 'kindRAR' : 'RAR archief',
+ 'kindJAR' : 'Java JAR bestand',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM package',
+ // texts
+ 'kindText' : 'Tekst bestand',
+ 'kindTextPlain' : 'Tekst',
+ 'kindPHP' : 'PHP bronbestand',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML document',
+ 'kindJS' : 'Javascript bronbestand',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C bronbestand',
+ 'kindCHeader' : 'C header bronbestand',
+ 'kindCPP' : 'C++ bronbestand',
+ 'kindCPPHeader' : 'C++ header bronbestand',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python bronbestand',
+ 'kindJava' : 'Java bronbestand',
+ 'kindRuby' : 'Ruby bronbestand',
+ 'kindPerl' : 'Perl bronbestand',
+ 'kindSQL' : 'SQL bronbestand',
+ 'kindXML' : 'XML document',
+ 'kindAWK' : 'AWK bronbestand',
+ 'kindCSV' : 'Komma gescheiden waardes',
+ 'kindDOCBOOK' : 'Docbook XML document',
+ // images
+ 'kindImage' : 'Afbeelding',
+ 'kindBMP' : 'BMP afbeelding',
+ 'kindJPEG' : 'JPEG afbeelding',
+ 'kindGIF' : 'GIF afbeelding',
+ 'kindPNG' : 'PNG afbeelding',
+ 'kindTIFF' : 'TIFF afbeelding',
+ 'kindTGA' : 'TGA afbeelding',
+ 'kindPSD' : 'Adobe Photoshop afbeelding',
+ 'kindXBITMAP' : 'X bitmap afbeelding',
+ 'kindPXM' : 'Pixelmator afbeelding',
+ // media
+ 'kindAudio' : 'Audio media',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Video media',
+ 'kindVideoDV' : 'DV video',
+ 'kindVideoMPEG' : 'MPEG video',
+ 'kindVideoMPEG4' : 'MPEG-4 video',
+ 'kindVideoAVI' : 'AVI video',
+ 'kindVideoMOV' : 'Quick Time video',
+ 'kindVideoWM' : 'Windows Media video',
+ 'kindVideoFlash' : 'Flash video',
+ 'kindVideoMKV' : 'Matroska video',
+ 'kindVideoOGG' : 'Ogg video'
+ }
+ }
+}
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.no.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.no.js
new file mode 100644
index 00000000..87ec5988
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.no.js
@@ -0,0 +1,280 @@
+/**
+ * Norwegian translation
+ * @author Stian Jacobsen
+ * @version 2012-07-03
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.no = {
+ translator : 'Stian Jacobsen <stian@promonorge.no>',
+ language : 'Norwegian Bokmål',
+ direction : 'ltr',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Feil',
+ 'errUnknown' : 'Ukjent feil.',
+ 'errUnknownCmd' : 'Ukjent kommando.',
+ 'errJqui' : 'Ugyldig jQuery UI konfigurasjon. Selectable, draggable og droppable komponentene må være inkludert.',
+ 'errNode' : 'elFinder påkrever at DOM Elementer kan opprettes.',
+ 'errURL' : 'Ugyldig elFinder konfigurasjon! URL-valget er ikke satt.',
+ 'errAccess' : 'Ingen adgang.',
+ 'errConnect' : 'Kunne ikke koble til.',
+ 'errAbort' : 'Tilkoblingen avbrutt.',
+ 'errTimeout' : 'Tilkoblingen tidsavbrudd.',
+ 'errNotFound' : 'Backend ble ikke funnet',
+ 'errResponse' : 'Ugyldig backend respons.',
+ 'errConf' : 'Ugyldig backend konfigurasjon.',
+ 'errJSON' : 'PHP JSON modul er ikke installert.',
+ 'errNoVolumes' : 'Lesbar volum er ikke tilgjennelig.',
+ 'errCmdParams' : 'Ugyldig parameter for kommando "$1".',
+ 'errDataNotJSON' : 'Innhold er ikke JSON.',
+ 'errDataEmpty' : 'Innholdet er tomt.',
+ 'errCmdReq' : 'Backend spørringen påkrever kommando.',
+ 'errOpen' : 'Kunne ikke åpne "$1".',
+ 'errNotFolder' : 'Objektet er ikke en mappe.',
+ 'errNotFile' : 'Objektet er ikke en fil.',
+ 'errRead' : 'Kunne ikke lese "$1".',
+ 'errWrite' : 'Kunne ikke skrive til "$1".',
+ 'errPerm' : 'Du har ikke rettigheter.',
+ 'errLocked' : '"$1" er låst og kan ikke flyttes, slettes eller endres',
+ 'errExists' : 'Filen "$1" finnes allerede.',
+ 'errInvName' : 'Ugyldig filnavn.',
+ 'errFolderNotFound' : 'Mappen finnes ikke.',
+ 'errFileNotFound' : 'Filen finnes ikke.',
+ 'errTrgFolderNotFound' : 'Målmappen "$1" ble ikke funnet.',
+ 'errPopup' : 'Nettleseren din blokkerte et pop-up vindu. For å åpne filen må du aktivere pop-up i din nettlesers innstillinger.',
+ 'errMkdir' : 'Kunne ikke opprette mappen "$1".',
+ 'errMkfile' : 'Kunne ikke opprette filen "$1".',
+ 'errRename' : 'Kunne ikke gi nytt navn til "$1".',
+ 'errCopyFrom' : 'Kopiere filer fra "$1" er ikke tillatt.',
+ 'errCopyTo' : 'Kopiere filer til "$1" er ikke tillatt.',
+ 'errUploadCommon' : 'Feil under opplasting.',
+ 'errUpload' : 'Kunne ikke laste opp "$1".',
+ 'errUploadNoFiles' : 'Ingen filer funnet til opplasting.',
+ 'errMaxSize' : 'Innholdet overgår maksimum tillatt størrelse.',
+ 'errFileMaxSize' : 'Filen vergår maksimum tillatt størrelse.',
+ 'errUploadMime' : 'Filtypen ikke tillatt.',
+ 'errUploadTransfer' : '"$1" overførings feil.',
+ 'errSave' : 'Kunne ikke lagre "$1".',
+ 'errCopy' : 'Kunne ikke kopiere "$1".',
+ 'errMove' : 'Kunne ikke flytte "$1".',
+ 'errCopyInItself' : 'Kunne ikke kopiere "$1" til seg selv.',
+ 'errRm' : 'Kunne ikke slette "$1".',
+ 'errExtract' : 'Kunne ikke pakke ut filer fra "$1".',
+ 'errArchive' : 'Kunne ikke opprette arkiv.',
+ 'errArcType' : 'akriv-typen er ikke støttet.',
+ 'errNoArchive' : 'Filen er ikke et arkiv eller et arkiv som ikke er støttet.',
+ 'errCmdNoSupport' : 'Backend støtter ikke denne kommandoen.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Opprett arkiv',
+ 'cmdback' : 'Tilbake',
+ 'cmdcopy' : 'Kopier',
+ 'cmdcut' : 'Klipp ut',
+ 'cmddownload' : 'Last ned',
+ 'cmdduplicate' : 'Dupliser',
+ 'cmdedit' : 'Rediger fil',
+ 'cmdextract' : 'Pakk ut filer fra arkiv',
+ 'cmdforward' : 'Frem',
+ 'cmdgetfile' : 'Velg filer',
+ 'cmdhelp' : 'Om',
+ 'cmdhome' : 'Hjem',
+ 'cmdinfo' : 'Vis info',
+ 'cmdmkdir' : 'Ny mappe',
+ 'cmdmkfile' : 'Ny tekst-fil',
+ 'cmdopen' : 'Åpne',
+ 'cmdpaste' : 'Lim inn',
+ 'cmdquicklook' : 'Forhåndsvis',
+ 'cmdreload' : 'Last inn på nytt',
+ 'cmdrename' : 'Gi nytt navn',
+ 'cmdrm' : 'Slett',
+ 'cmdsearch' : 'Find filer',
+ 'cmdup' : 'Opp et nivå',
+ 'cmdupload' : 'Last opp filer',
+ 'cmdview' : 'Vis',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Lukk',
+ 'btnSave' : 'Lagre',
+ 'btnRm' : 'Slett',
+ 'btnCancel' : 'Avbryt',
+ 'btnNo' : 'Nei',
+ 'btnYes' : 'Ja',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Åpne mappe',
+ 'ntffile' : 'Åpne fil',
+ 'ntfreload' : 'Last inn mappen på nytt',
+ 'ntfmkdir' : 'Oppretter mappe',
+ 'ntfmkfile' : 'Oppretter filer',
+ 'ntfrm' : 'Sletter filer',
+ 'ntfcopy' : 'Kopierer filer',
+ 'ntfmove' : 'Flytter filer',
+ 'ntfprepare' : 'Gjør klar til kopiering av filer',
+ 'ntfrename' : 'Gir nytt navn til filer',
+ 'ntfupload' : 'Laster opp filer',
+ 'ntfdownload' : 'Laster ned filer',
+ 'ntfsave' : 'Lagrer filer',
+ 'ntfarchive' : 'Oppretter arkiv',
+ 'ntfextract' : 'Pakker ut filer fra arkiv',
+ 'ntfsearch' : 'Søker i filer',
+ 'ntfsmth' : 'Gjør noe... >_<',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Ukjent',
+ 'Today' : 'I dag',
+ 'Yesterday' : 'I går',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'Mai',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Aug',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Okt',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Des',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bekreftelse nødvendig',
+ 'confirmRm' : 'Er du sikker på at du ønsker å slette filene?',
+ 'confirmRepl' : 'Erstatt fil?',
+ 'apllyAll' : 'Apply to all',
+ 'name' : 'Navn',
+ 'size' : 'Størrelse',
+ 'perms' : 'Rettigheter',
+ 'modify' : 'Endret',
+ 'kind' : 'Type',
+ 'read' : 'les',
+ 'write' : 'skriv',
+ 'noaccess' : 'ingen adgang',
+ 'and' : 'og',
+ 'unknown' : 'ukjent',
+ 'selectall' : 'Velg alle filene',
+ 'selectfiles' : 'Velg fil(er)',
+ 'selectffile' : 'Velg første fil',
+ 'selectlfile' : 'Velg siste fil',
+ 'viewlist' : 'Listevisning',
+ 'viewicons' : 'Ikoner',
+ 'places' : 'Områder',
+ 'calc' : 'Beregn',
+ 'path' : 'Bane',
+ 'aliasfor' : 'Alias for',
+ 'locked' : 'Låst',
+ 'dim' : 'Størrelser',
+ 'files' : 'Filer',
+ 'folders' : 'Mapper',
+ 'items' : 'objekter',
+ 'yes' : 'ja',
+ 'no' : 'nei',
+ 'link' : 'Link',
+ 'searcresult' : 'Søkeresultater',
+ 'selected' : 'valgte filer',
+ 'about' : 'Om',
+ 'shortcuts' : 'Snarveier',
+ 'help' : 'Hjelp',
+ 'webfm' : 'Web-filbehandler',
+ 'ver' : 'Versjon',
+ 'protocolver' : 'protokol versjon',
+ 'homepage' : 'Project home',
+ 'docs' : 'dokumentasjon',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Follow us on twitter',
+ 'facebook' : 'Join us on facebook',
+ 'team' : 'Team',
+ 'chiefdev' : 'chief developer',
+ 'developer' : 'developer',
+ 'contributor' : 'contributor',
+ 'maintainer' : 'maintainer',
+ 'translator' : 'translator',
+ 'icons' : 'Ikoner',
+ 'dontforget' : 'and don\'t forget to bring a towel',
+ 'shortcutsof' : 'Snarveier avslått',
+ 'dropFiles' : 'Slipp filer her',
+ 'or' : 'eller',
+ 'selectForUpload' : 'Velg filer til opplasting',
+ 'moveFiles' : 'Flytt filer',
+ 'copyFiles' : 'Kopier filer',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Ukjent',
+ 'kindFolder' : 'Mappe',
+ 'kindAlias' : 'Snarvei',
+ 'kindAliasBroken' : 'Ugyldig snarvei',
+ // applications
+ 'kindApp' : 'Programfil',
+ 'kindPostscript' : 'Postscript dokument',
+ 'kindMsOffice' : 'Microsoft Office dokument',
+ 'kindMsWord' : 'Microsoft Word dokument',
+ 'kindMsExcel' : 'Microsoft Excel dokument',
+ 'kindMsPP' : 'Microsoft Powerpoint presentation',
+ 'kindOO' : 'Open Office dokument',
+ 'kindAppFlash' : 'Flash',
+ 'kindPDF' : 'Portabelt dokument (PDF)',
+ 'kindTorrent' : 'Bittorrent file',
+ 'kind7z' : '7z arkiv',
+ 'kindTAR' : 'TAR arkiv',
+ 'kindGZIP' : 'GZIP arkiv',
+ 'kindBZIP' : 'BZIP arkiv',
+ 'kindZIP' : 'ZIP arkiv',
+ 'kindRAR' : 'RAR ar',
+ 'kindJAR' : 'Java JAR file',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM package',
+ // texts
+ 'kindText' : 'Tekst dokument',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP kilde',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML dokument',
+ 'kindJS' : 'Javascript',
+ 'kindRTF' : 'Rikt Tekst Format',
+ 'kindC' : 'C kilde',
+ 'kindCHeader' : 'C header kilde',
+ 'kindCPP' : 'C++ kilde',
+ 'kindCPPHeader' : 'C++ header kilde',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python kilde',
+ 'kindJava' : 'Java kilde',
+ 'kindRuby' : 'Ruby kilde',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL skilde',
+ 'kindXML' : 'XML dokument',
+ 'kindAWK' : 'AWK kilde',
+ 'kindCSV' : 'Comma separated values',
+ 'kindDOCBOOK' : 'Docbook XML dokument',
+ // Images
+ 'kindimage' : 'Bilde',
+ 'kindBMP' : 'BMP bilde',
+ 'kindJPEG' : 'JPEG bilde',
+ 'kindGIF' : 'GIF bilde',
+ 'kindPNG' : 'PNG bilde',
+ 'kindTIFF' : 'TIFF bilde',
+ 'kindTGA' : 'TGA bilde',
+ 'kindPSD' : 'Adobe Photoshop bilde',
+ 'kindXBITMAP' : 'X bitmap bilde',
+ 'kindPXM' : 'Pixelmator bilde',
+ // media
+ 'kindAudio' : 'Audio media',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 spilleliste',
+ 'kindVideo' : 'Video media',
+ 'kindVideoDV' : 'DV film',
+ 'kindVideoMPEG' : 'MPEG film',
+ 'kindVideoMPEG4' : 'MPEG-4 film',
+ 'kindVideoAVI' : 'AVI film',
+ 'kindVideoMOV' : 'Quick Time film',
+ 'kindVideoWM' : 'Windows Media film',
+ 'kindVideoFlash' : 'Flash film',
+ 'kindVideoMKV' : 'Matroska film',
+ 'kindVideoOGG' : 'Ogg film'
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.pl.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.pl.js
new file mode 100644
index 00000000..ad01c7a2
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.pl.js
@@ -0,0 +1,343 @@
+/**
+ * Polish translation
+ * @author Marcin Mikołajczyk
+ * @author Wojciech Jabłoński
+ * @version 2013-01-28
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.pl = {
+ translator : 'Marcin Mikołajczyk <marcin@pjwstk.edu.pl>, Wojciech Jabłoński <www.jablonski@gmail.com>',
+ language : 'Polski',
+ direction : 'ltr',
+ dateFormat : 'd M Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Błąd',
+ 'errUnknown' : 'Nieznany błąd.',
+ 'errUnknownCmd' : 'Nieznane polecenie.',
+ 'errJqui' : 'Niepoprawna konfiguracja jQuery UI. Muszą być zawarte komponenty selectable, draggable i droppable.',
+ 'errNode' : 'elFinder wymaga utworzenia obiektu DOM.',
+ 'errURL' : 'Niepoprawna konfiguracja elFinder! Pole URL nie jest ustawione.',
+ 'errAccess' : 'Dostęp zabroniony.',
+ 'errConnect' : 'Błąd połączenia z backend.',
+ 'errAbort' : 'Połączenie zostało przerwane.',
+ 'errTimeout' : 'Upłynął czas oczekiwania na połączenie.',
+ 'errNotFound' : 'Backend nie został znaleziony.',
+ 'errResponse' : 'Nieprawidłowa odpowiedź backend.',
+ 'errConf' : 'Niepoprawna konfiguracja backend.',
+ 'errJSON' : 'Moduł PHP JSON nie jest zainstalowany.',
+ 'errNoVolumes' : 'Brak możliwości odczytu katalogów.',
+ 'errCmdParams' : 'Nieprawidłowe parametry dla polecenia "$1".',
+ 'errDataNotJSON' : 'Dane nie są JSON.',
+ 'errDataEmpty' : 'Dane są puste.',
+ 'errCmdReq' : 'Backend wymaga podania nazwy polecenia.',
+ 'errOpen' : 'Nie można otworzyć "$1".',
+ 'errNotFolder' : 'Obiekt nie jest folderem.',
+ 'errNotFile' : 'Obiekt nie jest plikiem.',
+ 'errRead' : 'Nie można odczytać "$1".',
+ 'errWrite' : 'Nie można zapisać do "$1".',
+ 'errPerm' : 'Brak uprawnień.',
+ 'errLocked' : '"$1" jest zablokowany i nie może zostać zmieniony, przeniesiony lub usunięty.',
+ 'errExists' : 'Plik "$1" już istnieje.',
+ 'errInvName' : 'Nieprawidłowa nazwa pliku.',
+ 'errFolderNotFound' : 'Katalog nie został znaleziony.',
+ 'errFileNotFound' : 'Plik nie został znaleziony.',
+ 'errTrgFolderNotFound' : 'Katalog docelowy "$1" nie został znaleziony.',
+ 'errPopup' : 'Przeglądarka zablokowała otwarcie nowego okna. Aby otworzyć plik, zmień ustawienia przeglądarki.',
+ 'errMkdir' : 'Nie można utworzyć katalogu "$1".',
+ 'errMkfile' : 'Nie można utworzyć pliku "$1".',
+ 'errRename' : 'Nie można zmienić nazwy "$1".',
+ 'errCopyFrom' : 'Kopiowanie z katalogu "$1" nie jest możliwe.',
+ 'errCopyTo' : 'Kopiowanie do katalogu "$1" nie jest możliwe.',
+ 'errUploadCommon' : 'Błąd wysyłania.',
+ 'errUpload' : 'Nie można wysłać "$1".',
+ 'errUploadNoFiles' : 'Nie znaleziono plików do wysłania.',
+ 'errMaxSize' : 'Przekroczono dopuszczalny rozmiar wysyłanych plików.',
+ 'errFileMaxSize' : 'Plik przekracza dopuszczalny rozmiar.',
+ 'errUploadMime' : 'Niedozwolony typ pliku.',
+ 'errUploadTransfer' : 'Błąd przesyłania "$1".',
+ 'errSave' : 'Nie można zapisać "$1".',
+ 'errCopy' : 'Nie można skopiować "$1".',
+ 'errMove' : 'Nie można przenieść "$1".',
+ 'errCopyInItself' : 'Nie można skopiować "$1" w miejsce jego samego.',
+ 'errRm' : 'Nie można usunąć "$1".',
+ 'errExtract' : 'Nie można wypakować plików z "$1".',
+ 'errArchive' : 'Nie można utworzyć archiwum.',
+ 'errArcType' : 'Nieobsługiwany typ archiwum.',
+ 'errNoArchive' : 'Plik nie jest prawidłowym typem archiwum.',
+ 'errCmdNoSupport' : 'Backend nie obsługuje tego polecenia.',
+ 'errReplByChild' : 'Nie można zastąpić katalogu "$1" elementem w nim zawartym',
+ 'errArcSymlinks' : 'Ze względów bezpieczeństwa rozpakowywanie archiwów zawierających dowiązania symboliczne (symlinks) jest niedozwolone.',
+ 'errArcMaxSize' : 'Archiwum przekracza maksymalny dopuszczalny rozmiar.',
+ 'errResize' : 'Nie można zmienić rozmiaru "$1".',
+ 'errUsupportType' : 'Nieobsługiwany typ pliku.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Utwórz archiwum',
+ 'cmdback' : 'Wstecz',
+ 'cmdcopy' : 'Kopiuj',
+ 'cmdcut' : 'Wytnij',
+ 'cmddownload' : 'Pobierz',
+ 'cmdduplicate' : 'Duplikuj',
+ 'cmdedit' : 'Edytuj plik',
+ 'cmdextract' : 'Wypakuj pliki z archiwum',
+ 'cmdforward' : 'Dalej',
+ 'cmdgetfile' : 'Wybierz pliki',
+ 'cmdhelp' : 'Informacje o programie',
+ 'cmdhome' : 'Katalog główny',
+ 'cmdinfo' : 'Właściwości',
+ 'cmdmkdir' : 'Nowy folder',
+ 'cmdmkfile' : 'Nowy plik tekstowy',
+ 'cmdopen' : 'Otwórz',
+ 'cmdpaste' : 'Wklej',
+ 'cmdquicklook' : 'Podgląd',
+ 'cmdreload' : 'Odśwież',
+ 'cmdrename' : 'Zmień nazwę',
+ 'cmdrm' : 'Usuń',
+ 'cmdsearch' : 'Wyszukaj pliki',
+ 'cmdup' : 'W górę',
+ 'cmdupload' : 'Wyślij pliki',
+ 'cmdview' : 'Widok',
+ 'cmdresize' : 'Zmień rozmiar obrazu',
+ 'cmdsort' : 'Sortuj',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Zamknij',
+ 'btnSave' : 'Zapisz',
+ 'btnRm' : 'Usuń',
+ 'btnApply' : 'Zastosuj',
+ 'btnCancel' : 'Anuluj',
+ 'btnNo' : 'Nie',
+ 'btnYes' : 'Tak',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Otwórz folder',
+ 'ntffile' : 'Otwórz plik',
+ 'ntfreload' : 'Odśwież zawartość folderu',
+ 'ntfmkdir' : 'Tworzenie katalogu',
+ 'ntfmkfile' : 'Tworzenie plików',
+ 'ntfrm' : 'Usuwanie plików',
+ 'ntfcopy' : 'Kopiowanie plików',
+ 'ntfmove' : 'Przenoszenie plików',
+ 'ntfprepare' : 'Przygotowanie do kopiowania plików',
+ 'ntfrename' : 'Zmiana nazw plików',
+ 'ntfupload' : 'Wysyłanie plików',
+ 'ntfdownload' : 'Pobieranie plików',
+ 'ntfsave' : 'Zapisywanie plików',
+ 'ntfarchive' : 'Tworzenie archiwum',
+ 'ntfextract' : 'Wypakowywanie plików z archiwum',
+ 'ntfsearch' : 'Wyszukiwanie plików',
+ 'ntfsmth' : 'Robienie czegoś >_<',
+ 'ntfloadimg' : 'Ładowanie obrazu',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'nieznana',
+ 'Today' : 'Dzisiaj',
+ 'Yesterday' : 'Wczoraj',
+ 'Jan' : 'sty',
+ 'Feb' : 'lut',
+ 'Mar' : 'mar',
+ 'Apr' : 'kwi',
+ 'May' : 'maj',
+ 'Jun' : 'cze',
+ 'Jul' : 'lip',
+ 'Aug' : 'sie',
+ 'Sep' : 'wrz',
+ 'Oct' : 'paź',
+ 'Nov' : 'lis',
+ 'Dec' : 'gru',
+ 'January' : 'Styczeń',
+ 'February' : 'Luty',
+ 'March' : 'Marzec',
+ 'April' : 'Kwiecień',
+ 'May' : 'Maj',
+ 'June' : 'Czerwiec',
+ 'July' : 'Lipiec',
+ 'August' : 'Sierpień',
+ 'September' : 'Wrzesień',
+ 'October' : 'Październik',
+ 'November' : 'Listopad',
+ 'December' : 'Grudzień',
+ 'Sunday' : 'niedziela',
+ 'Monday' : 'poniedziałek',
+ 'Tuesday' : 'wtorek',
+ 'Wednesday' : 'środa',
+ 'Thursday' : 'czwartek',
+ 'Friday' : 'piątek',
+ 'Saturday' : 'sobota',
+ 'Sun' : 'nie',
+ 'Mon' : 'pon',
+ 'Tue' : 'wto',
+ 'Wed' : 'śro',
+ 'Thu' : 'czw',
+ 'Fri' : 'pią',
+ 'Sat' : 'sob',
+
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'po nazwie (foldery pierwsze)',
+ 'sortkindDirsFirst' : 'po typie (foldery pierwsze)',
+ 'sortsizeDirsFirst' : 'po rozmiarze (foldery pierwsze)',
+ 'sortdateDirsFirst' : 'po dacie (foldery pierwsze)',
+ 'sortname' : 'po nazwie',
+ 'sortkind' : 'po typie',
+ 'sortsize' : 'po rozmiarze',
+ 'sortdate' : 'po dacie',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Wymagane potwierdzenie',
+ 'confirmRm' : 'Czy na pewno chcesz usunąć pliki? Tej operacji nie można cofnąć!',
+ 'confirmRepl' : 'Zastąpić stary plik nowym?',
+ 'apllyAll' : 'Zastosuj do wszystkich',
+ 'name' : 'Nazwa',
+ 'size' : 'Rozmiar',
+ 'perms' : 'Uprawnienia',
+ 'modify' : 'Zmodyfikowany',
+ 'kind' : 'Typ',
+ 'read' : 'odczyt',
+ 'write' : 'zapis',
+ 'noaccess' : 'brak dostępu',
+ 'and' : 'i',
+ 'unknown' : 'nieznany',
+ 'selectall' : 'Zaznacz wszystkie pliki',
+ 'selectfiles' : 'Zaznacz plik(i)',
+ 'selectffile' : 'Zaznacz pierwszy plik',
+ 'selectlfile' : 'Zaznacz ostatni plik',
+ 'viewlist' : 'Widok listy',
+ 'viewicons' : 'Widok ikon',
+ 'places' : 'Ulubione',
+ 'calc' : 'Oblicz',
+ 'path' : 'Ścieżka',
+ 'aliasfor' : 'Alias do',
+ 'locked' : 'Zablokowany',
+ 'dim' : 'Wymiary',
+ 'files' : 'Pliki',
+ 'folders' : 'Foldery',
+ 'items' : 'Elementy',
+ 'yes' : 'tak',
+ 'no' : 'nie',
+ 'link' : 'Odnośnik',
+ 'searcresult' : 'Wyniki wyszukiwania',
+ 'selected' : 'Zaznaczonych obiektów',
+ 'about' : 'Informacje o programie',
+ 'shortcuts' : 'Skróty klawiaturowe',
+ 'help' : 'Pomoc',
+ 'webfm' : 'Menedżer plików sieciowych',
+ 'ver' : 'Wersja',
+ 'protocol' : 'wersja wydania',
+ 'homepage' : 'Strona główna projektu',
+ 'docs' : 'Dokumentacja',
+ 'github' : 'Obserwuj rozwój projektu na Github',
+ 'twitter' : 'Śledź nas na Twitterze',
+ 'facebook' : 'Dołącz do nas na Facebooku',
+ 'team' : 'Autorzy',
+ 'chiefdev' : 'główny programista',
+ 'developer' : 'programista',
+ 'contributor' : 'współautor',
+ 'maintainer' : 'koordynator',
+ 'translator' : 'tłumacz',
+ 'icons' : 'Ikony',
+ 'dontforget' : 'i nie zapomnij zabrać ręcznika',
+ 'shortcutsof' : 'Skróty klawiaturowe są wyłączone',
+ 'dropFiles' : 'Upuść pliki tutaj',
+ 'or' : 'lub',
+ 'selectForUpload' : 'Wybierz pliki do wysłania',
+ 'moveFiles' : 'Przenieś pliki',
+ 'copyFiles' : 'Kopiuj pliki',
+ 'rmFromPlaces' : 'Usuń z ulubionych',
+ 'untitled folder' : 'nowy folder',
+ 'untitled file.txt' : 'nowy plik.txt',
+ 'aspectRatio' : 'Zachowaj proporcje',
+ 'scale' : 'Skala',
+ 'width' : 'Szerokość',
+ 'height' : 'Wysokość',
+ 'mode' : 'Tryb',
+ 'resize' : 'Zmień rozmiar',
+ 'crop' : 'Przytnij',
+ 'rotate' : 'Obróć',
+ 'rotate-cw' : 'Obróć 90° w lewo',
+ 'rotate-ccw' : 'Obróć 90° w prawo',
+ 'degree' : '°',
+
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Nieznany',
+ 'kindFolder' : 'Folder',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Utracony alias',
+ // applications
+ 'kindApp' : 'Aplikacja',
+ 'kindPostscript' : 'Dokument Postscript',
+ 'kindMsOffice' : 'Dokument Office',
+ 'kindMsWord' : 'Dokument Word',
+ 'kindMsExcel' : 'Dokument Excel',
+ 'kindMsPP' : 'Prezentacja PowerPoint',
+ 'kindOO' : 'Dokument OpenOffice',
+ 'kindAppFlash' : 'Aplikacja Flash',
+ 'kindPDF' : 'Dokument przenośny PDF',
+ 'kindTorrent' : 'Plik BitTorrent',
+ 'kind7z' : 'Archiwum 7z',
+ 'kindTAR' : 'Archiwum TAR',
+ 'kindGZIP' : 'Archiwum GZIP',
+ 'kindBZIP' : 'Archiwum BZIP',
+ 'kindZIP' : 'Archiwum ZIP',
+ 'kindRAR' : 'Archiwum RAR',
+ 'kindJAR' : 'Java JAR file',
+ 'kindTTF' : 'Czcionka TrueType',
+ 'kindOTF' : 'Czcionka OpenType',
+ 'kindRPM' : 'Pakiet RPM',
+ // texts
+ 'kindText' : 'Dokument tekstowy',
+ 'kindTextPlain' : 'Zwykły tekst',
+ 'kindPHP' : 'Kod źródłowy PHP',
+ 'kindCSS' : 'Kaskadowe arkusze stylów',
+ 'kindHTML' : 'Dokument HTML',
+ 'kindJS' : 'Kod źródłowy Javascript',
+ 'kindRTF' : 'Tekst sformatowany RTF',
+ 'kindC' : 'Kod źródłowy C',
+ 'kindCHeader' : 'Plik nagłówka C',
+ 'kindCPP' : 'Kod źródłowy C++',
+ 'kindCPPHeader' : 'Plik nagłówka C++',
+ 'kindShell' : 'Skrypt powłoki Unix',
+ 'kindPython' : 'Kod źródłowy Python',
+ 'kindJava' : 'Kod źródłowy Java',
+ 'kindRuby' : 'Kod źródłowy Ruby',
+ 'kindPerl' : 'Skrypt Perl',
+ 'kindSQL' : 'Kod źródłowy SQL',
+ 'kindXML' : 'Dokument XML',
+ 'kindAWK' : 'Kod źródłowy AWK',
+ 'kindCSV' : 'Tekst rozdzielany przecinkami CSV',
+ 'kindDOCBOOK' : 'Dokument Docbook XML',
+ // images
+ 'kindImage' : 'Obraz',
+ 'kindBMP' : 'Obraz BMP',
+ 'kindJPEG' : 'Obraz JPEG',
+ 'kindGIF' : 'Obraz GIF',
+ 'kindPNG' : 'Obraz PNG',
+ 'kindTIFF' : 'Obraz TIFF',
+ 'kindTGA' : 'Obraz TGA',
+ 'kindPSD' : 'Obraz Adobe Photoshop',
+ 'kindXBITMAP' : 'Obraz X BitMap',
+ 'kindPXM' : 'Obraz Pixelmator',
+ // media
+ 'kindAudio' : 'Plik dźwiękowy',
+ 'kindAudioMPEG' : 'Plik dźwiękowy MPEG',
+ 'kindAudioMPEG4' : 'Plik dźwiękowy MPEG-4',
+ 'kindAudioMIDI' : 'Plik dźwiękowy MIDI',
+ 'kindAudioOGG' : 'Plik dźwiękowy Ogg Vorbis',
+ 'kindAudioWAV' : 'Plik dźwiękowy WAV',
+ 'AudioPlaylist' : 'Lista odtwarzania MP3',
+ 'kindVideo' : 'Plik wideo',
+ 'kindVideoDV' : 'Plik wideo DV',
+ 'kindVideoMPEG' : 'Plik wideo MPEG',
+ 'kindVideoMPEG4' : 'Plik wideo MPEG-4',
+ 'kindVideoAVI' : 'Plik wideo AVI',
+ 'kindVideoMOV' : 'Plik wideo Quick Time',
+ 'kindVideoWM' : 'Plik wideo Windows Media',
+ 'kindVideoFlash' : 'Plik wideo Flash',
+ 'kindVideoMKV' : 'Plik wideo Matroska',
+ 'kindVideoOGG' : 'Plik wideo Ogg'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.pt_BR.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.pt_BR.js
new file mode 100644
index 00000000..0cf0b10f
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.pt_BR.js
@@ -0,0 +1,331 @@
+/**
+ * Brazilian Portuguese translation
+ * @author Leandro Carvalho
+ * @version 2013-01-22
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.pt_BR = {
+ translator : 'Leandro Carvalho <contato@leandrowebdev.net>',
+ language : 'Português',
+ direction : 'ltr',
+ dateFormat : 'd M Y H:i', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i', // will produce smth like: Today 12:25 PM
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Erro',
+ 'errUnknown' : 'Erro desconhecido.',
+ 'errUnknownCmd' : 'Comando desconhecido.',
+ 'errJqui' : 'Configuração inválida do JQuery UI. Verifique os componentes selectable, draggable e droppable incluidos.',
+ 'errNode' : 'elFinder requer um elemento DOM para ser criado.',
+ 'errURL' : 'Configuração inválida do elFinder! Você deve setar a opção da URL.',
+ 'errAccess' : 'Acesso negado.',
+ 'errConnect' : 'Incapaz de conectar ao backend.',
+ 'errAbort' : 'Conexão abortada.',
+ 'errTimeout' : 'Connection timeout.',
+ 'errNotFound' : 'Backend não encontrado.',
+ 'errResponse' : 'Resposta inválida do backend.',
+ 'errConf' : 'Configuração inválida do backend.',
+ 'errJSON' : 'Módulo PHP JSON não está instalado.',
+ 'errNoVolumes' : 'Não existe nenhum volume legível disponivel.',
+ 'errCmdParams' : 'Parâmetro inválido para o comando "$1".',
+ 'errDataNotJSON' : 'Dados não estão no formato JSON.',
+ 'errDataEmpty' : 'Dados vazios.',
+ 'errCmdReq' : 'Requisição do Backend requer nome de comando.',
+ 'errOpen' : 'Incapaz de abrir "$1".',
+ 'errNotFolder' : 'Objeto não é uma pasta.',
+ 'errNotFile' : 'Objeto não é um arquivo.',
+ 'errRead' : 'Incapaz de ler "$1".',
+ 'errWrite' : 'Incapaz de escrever em "$1".',
+ 'errPerm' : 'Permissão negada.',
+ 'errLocked' : '"$1" está bloqueado e não pode ser renomeado, movido ou removido.',
+ 'errExists' : 'O nome do arquivo "$1" já existe neste local.',
+ 'errInvName' : 'Nome do arquivo inválido.',
+ 'errFolderNotFound' : 'Pasta não encontrada.',
+ 'errFileNotFound' : 'Arquivo não encontrado.',
+ 'errTrgFolderNotFound' : 'Pasta de destino "$1" não encontrada.',
+ 'errPopup' : 'Navegador impediu abertura da janela popup, Para abrir o arquivo desabilite está opção no navegador.',
+ 'errMkdir' : 'Incapaz de criar a pasta "$1".',
+ 'errMkfile' : 'Incapaz de criar o arquivo "$1".',
+ 'errRename' : 'Incapaz de renomear "$1".',
+ 'errCopyFrom' : 'Copia dos arquivos do volume "$1" não permitida.',
+ 'errCopyTo' : 'Copia dos arquivos para o volume "$1" não permitida.',
+ 'errUploadCommon' : 'Erro no upload.',
+ 'errUpload' : 'Incapaz de fazer o upload de "$1".',
+ 'errUploadNoFiles' : 'Não foi encontrado nenhum arquivo para upload.',
+ 'errMaxSize' : 'Os dados excedem o tamanho máximo permitido.',
+ 'errFileMaxSize' : 'Arquivo excede o tamanho máximo permitido.',
+ 'errUploadMime' : 'Tipo de arquivo não permitido.',
+ 'errUploadTransfer' : '"$1" erro na transferência.',
+ 'errSave' : 'Incapaz de salvar "$1".',
+ 'errCopy' : 'Incapaz de copiar "$1".',
+ 'errMove' : 'Incapaz de mover "$1".',
+ 'errCopyInItself' : 'Incapaz de copiar "$1" nele mesmo.',
+ 'errRm' : 'Incapaz de remover "$1".',
+ 'errExtract' : 'Incapaz de extrair os arquivos de "$1".',
+ 'errArchive' : 'Incapaz de criar o arquivo.',
+ 'errArcType' : 'Tipo de arquivo não suportado.',
+ 'errNoArchive' : 'Arquivo inválido ou é um tipo sem suporte.',
+ 'errCmdNoSupport' : 'Backend não suporta este comando.',
+ 'errNotUTF8Content' : 'Arquivo "$1" não está em UTF-8 e não pode ser editado.', // added 9.11.2011
+ 'errNetMount' : 'Habilitar montagem "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : 'Protocolo não suportado.', // added 17.04.2012
+ 'errNetMountFailed' : 'Monagem falhou.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Servidor requerido.', // added 18.04.2012
+ 'errSessionExpires' : 'Sua sessão expirou por inatividade',
+ 'errCreatingTempDir' : 'Não foi possível criar um diretório temporário: "$1"',
+ 'errFtpDownloadFile' : 'Não foi possível fazer o download do arquivo do FTP: "$1"',
+ 'errFtpUploadFile' : 'Não foi possível fazer o upload do arquivo para o FTP: "$1"',
+ 'errFtpMkdir' : 'Não foi possível criar um diretório remoto no FTP: "$1"',
+ 'errArchiveExec' : 'Erro no arquivamento: "$1"',
+ 'errExtractExec' : 'Erro na extração dos arquivos: "$1"',
+ 'cmdsort' : 'Ordenar',
+ 'sortkind' : 'por tipo',
+ 'sortname' : 'por nome',
+ 'sortsize' : 'por tamanho',
+ 'sortdate' : 'por data',
+ 'sortFoldersFirst' : 'Pastas primeiro',
+ 'errUploadFile' : 'Não foi possível fazer o upload "$1".',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Criar arquivo',
+ 'cmdback' : 'Voltar',
+ 'cmdcopy' : 'Copiar',
+ 'cmdcut' : 'Cortar',
+ 'cmddownload' : 'Baixar',
+ 'cmdduplicate' : 'Duplicar',
+ 'cmdedit' : 'Editar arquivo',
+ 'cmdextract' : 'Extrair arquivo de ficheiros',
+ 'cmdforward' : 'Avançar',
+ 'cmdgetfile' : 'Selecionar arquivos',
+ 'cmdhelp' : 'Sobre este software',
+ 'cmdhome' : 'Home',
+ 'cmdinfo' : 'propriedades',
+ 'cmdmkdir' : 'Nova pasta',
+ 'cmdmkfile' : 'Novo arquivo de texto',
+ 'cmdopen' : 'Abrir',
+ 'cmdpaste' : 'Colar',
+ 'cmdquicklook' : 'Pré-vizualização',
+ 'cmdreload' : 'Recarregar',
+ 'cmdrename' : 'Renomear',
+ 'cmdrm' : 'Deletar',
+ 'cmdsearch' : 'Achar arquivos',
+ 'cmdup' : 'Ir para o diretório pai',
+ 'cmdupload' : 'Fazer upload de arquivo',
+ 'cmdview' : 'Vizualizar',
+ 'cmdresize' : 'Redimencionar & Rodar',
+ 'cmdsort' : 'Ordenar',
+ 'cmdnetmount' : 'Montar unidade de rede', // added 18.04.2012
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Fechar',
+ 'btnSave' : 'Salvar',
+ 'btnRm' : 'Remover',
+ 'btnCancel' : 'Cancelar',
+ 'btnNo' : 'Não',
+ 'btnYes' : 'Sim',
+ 'btnMount' : 'Montar', // added 18.04.2012
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Abrir Pasta',
+ 'ntffile' : 'Abrir arquivo',
+ 'ntfreload' : 'Recarregar conteudo da pasta',
+ 'ntfmkdir' : 'Criar diretório',
+ 'ntfmkfile' : 'Criar arquivos',
+ 'ntfrm' : 'Deletar arquivos',
+ 'ntfcopy' : 'Copiar arquivos',
+ 'ntfmove' : 'Mover arquivos',
+ 'ntfprepare' : 'Preparando para copiar',
+ 'ntfrename' : 'Renomear arquivos',
+ 'ntfupload' : 'Subindo arquivos',
+ 'ntfdownload' : 'Baixando os arquivos',
+ 'ntfsave' : 'Slvando os arquivos',
+ 'ntfarchive' : 'Criando os arquivos',
+ 'ntfextract' : 'Extraindo arquivos',
+ 'ntfsearch' : 'Procurando arquivos',
+ 'ntfsmth' : 'Fazendo alguma coisa',
+ 'ntfnetmount' : 'Montando unidade de rede', // added 18.04.2012
+
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Desconhecido',
+ 'Today' : 'Hoje',
+ 'Yesterday' : 'Ontem',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Fev',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Abr',
+ 'May' : 'Mai',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Ago',
+ 'Sep' : 'Set',
+ 'Oct' : 'Out',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dez',
+
+ /******************************** sort variants ********************************/
+ 'sortname' : 'por nome',
+ 'sortkind' : 'por tipo',
+ 'sortsize' : 'por tam.',
+ 'sortdate' : 'por data',
+ 'sortFoldersFirst' : 'Pastas primeiro',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmação requerida',
+ 'confirmRm' : 'Você tem certeza que quer remover os arquivos? Isto não pode ser desfeito!',
+ 'confirmRepl' : 'Substituir arquivo velho com este novo?',
+ 'apllyAll' : 'Aplicar a todos',
+ 'name' : 'Nome',
+ 'size' : 'Tamanho',
+ 'perms' : 'Permissões',
+ 'modify' : 'Modificado',
+ 'kind' : 'Tipo',
+ 'read' : 'Ler',
+ 'write' : 'Escrever',
+ 'noaccess' : 'Inacessível',
+ 'and' : 'e',
+ 'unknown' : 'Desconhecido',
+ 'selectall' : 'Selecionar todos arquivos',
+ 'selectfiles' : 'Selecionar arquivo(s)',
+ 'selectffile' : 'Selecionar primeiro arquivo',
+ 'selectlfile' : 'Slecionar último arquivo',
+ 'viewlist' : 'Exibir como lista',
+ 'viewicons' : 'Exibir como ícones',
+ 'places' : 'Lugares',
+ 'calc' : 'Calcular',
+ 'path' : 'Caminho',
+ 'aliasfor' : 'Alias para',
+ 'locked' : 'Bloqueado',
+ 'dim' : 'Dimesões',
+ 'files' : 'Arquivos',
+ 'folders' : 'Pastas',
+ 'items' : 'Itens',
+ 'yes' : 'sim',
+ 'no' : 'não',
+ 'link' : 'Link',
+ 'searcresult' : 'resultados da pesquisa',
+ 'selected' : 'itens selecionados',
+ 'about' : 'Sobre',
+ 'shortcuts' : 'Atalhos',
+ 'help' : 'Ajuda',
+ 'webfm' : 'Gerenciador de arquivos web',
+ 'ver' : 'Versão',
+ 'protocolver' : 'Versão do protocolo',
+ 'homepage' : 'Home do projeto',
+ 'docs' : 'Documentação',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Siga-nos no twitter',
+ 'facebook' : 'Junte-se a nós no Facebook',
+ 'team' : 'Time',
+ 'chiefdev' : 'Desenvolvedor chefe',
+ 'developer' : 'Desenvolvedor',
+ 'contributor' : 'Contribuinte',
+ 'maintainer' : 'Mantenedor',
+ 'translator' : 'Tradutor',
+ 'icons' : 'Ícones',
+ 'dontforget' : 'e não se esqueça de levar sua toalha',
+ 'shortcutsof' : 'Atalhos desabilitados',
+ 'dropFiles' : 'Solte os arquivos aqui',
+ 'or' : 'ou',
+ 'selectForUpload' : 'Selecione arquivos para upload',
+ 'moveFiles' : 'Mover arquivos',
+ 'copyFiles' : 'Copiar arquivos',
+ 'rmFromPlaces' : 'Remover de Lugares',
+ 'aspectRatio' : 'Manter aspecto',
+ 'scale' : 'Tamanho',
+ 'width' : 'Largura',
+ 'height' : 'Altura',
+ 'resize' : 'Redimencionar',
+ 'crop' : 'Cortar',
+ 'rotate' : 'Rotacionar',
+ 'rotate-cw' : 'Girar 90 graus CW',
+ 'rotate-ccw' : 'Girar 90 graus CCW',
+ 'degree' : '°',
+ 'netMountDialogTitle' : 'Montar Unidade de rede', // added 18.04.2012
+ 'protocol' : 'Protocolo', // added 18.04.2012
+ 'host' : 'Servidor', // added 18.04.2012
+ 'port' : 'Porta', // added 18.04.2012
+ 'user' : 'Usuário', // added 18.04.2012
+ 'pass' : 'Senha', // added 18.04.2012
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Desconhecio',
+ 'kindFolder' : 'Pasta',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Alias inválido',
+ // applications
+ 'kindApp' : 'Aplicação',
+ 'kindPostscript' : 'Documento Postscript',
+ 'kindMsOffice' : 'Documento Microsoft Office',
+ 'kindMsWord' : 'Documento Microsoft Word',
+ 'kindMsExcel' : 'Documento Microsoft Excel',
+ 'kindMsPP' : 'Apresentação Microsoft Powerpoint',
+ 'kindOO' : 'Documento Open Office',
+ 'kindAppFlash' : 'Aplicação Flash',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Arquivo Bittorrent',
+ 'kind7z' : 'Arquivo 7z',
+ 'kindTAR' : 'Arquivo TAR',
+ 'kindGZIP' : 'Arquivo GZIP',
+ 'kindBZIP' : 'Arquivo BZIP',
+ 'kindZIP' : 'Arquivo ZIP',
+ 'kindRAR' : 'Arquivo RAR',
+ 'kindJAR' : 'Arquivo JAR',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'Pacote RPM',
+ // texts
+ 'kindText' : 'Arquivo de texto',
+ 'kindTextPlain' : 'Texto simples',
+ 'kindPHP' : 'PHP',
+ 'kindCSS' : 'CSS',
+ 'kindHTML' : 'Documento HTML',
+ 'kindJS' : 'Javascript',
+ 'kindRTF' : 'Formato Rich Text',
+ 'kindC' : 'C',
+ 'kindCHeader' : 'C cabeçalho',
+ 'kindCPP' : 'C++',
+ 'kindCPPHeader' : 'C++ cabeçalho',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python',
+ 'kindJava' : 'Java',
+ 'kindRuby' : 'Ruby',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL',
+ 'kindXML' : 'Documento XML',
+ 'kindAWK' : 'AWK',
+ 'kindCSV' : 'Valores separados por vírgula',
+ 'kindDOCBOOK' : 'Documento Docbook XML',
+ // images
+ 'kindImage' : 'Imagem',
+ 'kindBMP' : 'Imagem BMP',
+ 'kindJPEG' : 'Imagem JPEG',
+ 'kindGIF' : 'Imagem GIF',
+ 'kindPNG' : 'Imagem PNG',
+ 'kindTIFF' : 'Imagem TIFF',
+ 'kindTGA' : 'Imagem TGA',
+ 'kindPSD' : 'Imagem Adobe Photoshop',
+ 'kindXBITMAP' : 'Imagem X bitmap',
+ 'kindPXM' : 'Imagem Pixelmator',
+ // media
+ 'kindAudio' : 'Audio media',
+ 'kindAudioMPEG' : 'Audio MPEG',
+ 'kindAudioMPEG4' : 'Audio MPEG-4',
+ 'kindAudioMIDI' : 'Audio MIDI',
+ 'kindAudioOGG' : 'Audio Ogg Vorbis',
+ 'kindAudioWAV' : 'Audio WAV',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Video media',
+ 'kindVideoDV' : 'DV filme',
+ 'kindVideoMPEG' : 'Video MPEG',
+ 'kindVideoMPEG4' : 'Video MPEG-4',
+ 'kindVideoAVI' : 'Video AVI',
+ 'kindVideoMOV' : 'Quick Time movie',
+ 'kindVideoWM' : 'Video Windows Media',
+ 'kindVideoFlash' : 'Video Flash',
+ 'kindVideoMKV' : 'Video Matroska',
+ 'kindVideoOGG' : 'Video Ogg'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ru.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ru.js
new file mode 100644
index 00000000..c0def8c1
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.ru.js
@@ -0,0 +1,362 @@
+/**
+ * Russian translation
+ * @author Dmitry "dio" Levashov
+ * @version 2011-07-15
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.ru = {
+ translator : 'Dmitry "dio" Levashov <dio@std42.ru>',
+ language : 'Русский язык',
+ direction : 'ltr',
+ dateFormat : 'd M Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Ошибка',
+ 'errUnknown' : 'Неизвестная ошибка.',
+ 'errUnknownCmd' : 'Неизвестная комманда.',
+ 'errJqui' : 'Отсутствуют необходимые компоненты jQuery UI - selectable, draggable и droppable.',
+ 'errNode' : 'Отсутствует DOM элемент для инициализации elFinder.',
+ 'errURL' : 'Некорректная настройка. Необходимо указать URL сервера.',
+ 'errAccess' : 'Доступ запрещен.',
+ 'errConnect' : 'Не удалось соединиться с сервером.',
+ 'errAbort' : 'Соединение прервано.',
+ 'errTimeout' : 'Таймаут соединения.',
+ 'errNotFound' : 'Сервер не найден.',
+ 'errResponse' : 'Некорректный ответ сервера.',
+ 'errConf' : 'Некорректная настройка сервера.',
+ 'errJSON' : 'Модуль PHP JSON не установлен.',
+ 'errNoVolumes' : 'Отсутствуют корневые директории достуные для чтения.',
+ 'errCmdParams' : 'Некорректные параметры комманды "$1".',
+ 'errDataNotJSON' : 'Данные не формате JSON.',
+ 'errDataEmpty' : 'Данные отсутствуют.',
+ 'errCmdReq' : 'Для запроса к серверу необходимо указать имя комманды.',
+ 'errOpen' : 'Не удалось открыть "$1".',
+ 'errNotFolder' : 'Объект не является папкой.',
+ 'errNotFile' : 'Объект не является файлом.',
+ 'errRead' : 'Ошибка чтения "$1".',
+ 'errWrite' : 'Ошибка записи "$1".',
+ 'errPerm' : 'Доступ запрещен.',
+ 'errLocked' : '"$1" защищен и не может быть переименован, перемещен или удален.',
+ 'errExists' : 'В папке уже существует объект с именем "$1".',
+ 'errInvName' : 'Недопустимое имя файла.',
+ 'errFolderNotFound' : 'Папка не найдена.',
+ 'errFileNotFound' : 'Файл не найден.',
+ 'errTrgFolderNotFound' : 'Целевая папка "$1" не найдена.',
+ 'errPopup' : 'Браузер заблокировал открытие нового окна. Чтобы окрыть файл, измените настройки браузера.',
+ 'errMkdir' : 'Ошибка создания папки "$1".',
+ 'errMkfile' : 'Ошибка создания файла "$1".',
+ 'errRename' : 'Ошибка переименования "$1".',
+ 'errCopyFrom' : 'Копирование из корневой директории "$1" запрещено.',
+ 'errCopyTo' : 'Копирование в корневую директорию "$1" запрещено.',
+ 'errUploadCommon' : 'Ошибка загрузки файлов.',
+ 'errUpload' : 'Ошибка загрузки "$1".',
+ 'errUploadNoFiles' : 'Отсутствуют загруженые файлы.',
+ 'errMaxSize' : 'Превышен допустимый размер загружаемых файлов.',
+ 'errFileMaxSize' : 'Размер файла превышает допустимый.',
+ 'errUploadMime' : 'Недопустимый тип файла.',
+ 'errUploadTransfer' : 'Ошибка передачи файла "$1".',
+ 'errSave' : 'Ошибка сохранения "$1".',
+ 'errCopy' : 'Ошибка копирования "$1".',
+ 'errMove' : 'Ошибка перемещения "$1".',
+ 'errCopyInItself' : 'Невозможно скопировать "$1" в самого себя.',
+ 'errRm' : 'Ошибка удаления "$1".',
+ 'errExtract' : 'Ошибка извлечения файлов из архива "$1".',
+ 'errArchive' : 'Ошибка создания архива.',
+ 'errArcType' : 'Неподдерживаемый тип архива.',
+ 'errNoArchive' : 'Файл не является архивом допустимого типа.',
+ 'errCmdNoSupport' : 'Сервер не поддерживает эту комманду.',
+ 'errReplByChild' : 'Невозможно заменить папку "$1" содержащимся в ней объектом.',
+ 'errArcSymlinks' : 'По соображениям безопасности запрещена распаковка архивов, содержащих ссылки (symlinks) или файлы с недопустимыми именами.', // edited 24.06.2012
+ 'errArcMaxSize' : 'Размер файлов в архиве превышает максимально разрешенный.',
+ 'errResize' : 'Не удалось изменить размер "$1".',
+ 'errUsupportType' : 'Неподдерживаемый тип файла.',
+ 'errNotUTF8Content' : 'Файл "$1" содержит текст в кодировке отличной от UTF-8 и не может быть отредактирован.', // added 9.11.2011
+ 'errNetMount' : 'Не удалось подключить "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : 'Неподдерживаемый протокол.', // added 17.04.2012
+ 'errNetMountFailed' : 'Ошибка монтирования.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Host required.', // added 18.04.2012
+ 'errSessionExpires' : 'Сессия была завершена так как превышено время отсутствия активности',
+ 'errCreatingTempDir' : 'Ошибка при создании временной директории: "$1"',
+ 'errFtpDownloadFile' : 'Ошибка при скачивании файла с FTP: "$1"',
+ 'errFtpUploadFile' : 'Ошибка при загрузке файла на FTP: "$1"',
+ 'errFtpMkdir' : 'Ошибка при создании директории на FTP: "$1"',
+ 'errArchiveExec' : 'Ошибка при выполнении архивации: "$1"',
+ 'errExtractExec' : 'Ошибка при выполнении распаковки: "$1"',
+
+ 'errUploadFile' : 'Невозможно загрузить файл "$1"',
+
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Создать архив',
+ 'cmdback' : 'Назад',
+ 'cmdcopy' : 'Копировать',
+ 'cmdcut' : 'Вырезать',
+ 'cmddownload' : 'Скачать',
+ 'cmdduplicate' : 'Сделать копию',
+ 'cmdedit' : 'Редактировать',
+ 'cmdextract' : 'Распаковать архив',
+ 'cmdforward' : 'Вперед',
+ 'cmdgetfile' : 'Выбрать',
+ 'cmdhelp' : 'О программе',
+ 'cmdhome' : 'Домой',
+ 'cmdinfo' : 'Свойства',
+ 'cmdmkdir' : 'Новая папка',
+ 'cmdmkfile' : 'Новый файл',
+ 'cmdopen' : 'Открыть',
+ 'cmdpaste' : 'Вставить',
+ 'cmdquicklook' : 'Быстрый просмотр',
+ 'cmdreload' : 'Обновить',
+ 'cmdrename' : 'Переименовать',
+ 'cmdrm' : 'Удалить',
+ 'cmdsearch' : 'Поиск',
+ 'cmdup' : 'Наверх',
+ 'cmdupload' : 'Загрузить файлы',
+ 'cmdview' : 'Вид',
+ 'cmdresize' : 'Размер изображения',
+ 'cmdsort' : 'Сортировать',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Закрыть',
+ 'btnSave' : 'Сохранить',
+ 'btnRm' : 'Удалить',
+ 'btnCancel' : 'Отмена',
+ 'btnApply' : 'Применить',
+ 'btnNo' : 'Нет',
+ 'btnYes' : 'Да',
+ 'btnMount' : 'Подключить', // added 18.04.2012
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Открытие папки',
+ 'ntffile' : 'Открытие файла',
+ 'ntfreload' : 'Обновление текущей папки',
+ 'ntfmkdir' : 'Создание папки',
+ 'ntfmkfile' : 'Создание файла',
+ 'ntfrm' : 'Удаление файлов',
+ 'ntfcopy' : 'Копирование файлов',
+ 'ntfmove' : 'Перемещение файлов',
+ 'ntfprepare' : 'Подготовка к копированию',
+ 'ntfrename' : 'Переименование файлов',
+ 'ntfupload' : 'Загрузка файлов',
+ 'ntfdownload' : 'Скачивание файлов',
+ 'ntfsave' : 'Сохранение файлов',
+ 'ntfarchive' : 'Создание архива',
+ 'ntfextract' : 'Распаковка архива',
+ 'ntfsearch' : 'Поиск файлов',
+ 'ntfsmth' : 'Занят важным делом',
+ 'ntfnetmount' : 'Монтирую сетевой диск', // added 18.04.2012
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Незвестно',
+ 'Today' : 'Сегодня',
+ 'Yesterday' : 'Вчера',
+ 'Jan' : 'Янв',
+ 'Feb' : 'Фев',
+ 'Mar' : 'Мар',
+ 'Apr' : 'Апр',
+ 'May' : 'Май',
+ 'Jun' : 'Июнь',
+ 'Jul' : 'Июль',
+ 'Aug' : 'Авг',
+ 'Sep' : 'Сен',
+ 'Oct' : 'Окт',
+ 'Nov' : 'Ноя',
+ 'Dec' : 'Дек',
+ 'January' : 'Январь',
+ 'February' : 'Февраль',
+ 'March' : 'Март',
+ 'April' : 'Апрель',
+ 'May' : 'Май',
+ 'June' : 'Июнь',
+ 'July' : 'Июль',
+ 'August' : 'Август',
+ 'September' : 'Сентябрь',
+ 'October' : 'Октябрь',
+ 'November' : 'Ноябрь',
+ 'December' : 'Декабрь',
+ 'Sunday' : 'Воскресенье',
+ 'Monday' : 'Понедельник',
+ 'Tuesday' : 'Вторник',
+ 'Wednesday' : 'Среда',
+ 'Thursday' : 'Четверг',
+ 'Friday' : 'Пятница',
+ 'Saturday' : 'Суббота',
+ 'Sun' : 'Вск',
+ 'Mon' : 'Пнд',
+ 'Tue' : 'Втр',
+ 'Wed' : 'Срд',
+ 'Thu' : 'Чтв',
+ 'Fri' : 'Птн',
+ 'Sat' : 'Сбт',
+
+ /******************************** sort variants ********************************/
+ 'sortname' : 'по имени',
+ 'sortkind' : 'по типу',
+ 'sortsize' : 'по размеру',
+ 'sortdate' : 'по дате',
+ 'sortFoldersFirst' : 'Папки в начале',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Необходимо подтверждение.',
+ 'confirmRm' : 'Хотите удалить файлы? Действие необратимо.',
+ 'confirmRepl' : 'Заменить старый файл новым?',
+ 'apllyAll' : 'для всех',
+ 'name' : 'Имя файла',
+ 'size' : 'Размер',
+ 'perms' : 'Доступ',
+ 'modify' : 'Изменен',
+ 'kind' : 'Тип',
+ 'read' : 'чтение',
+ 'write' : 'запись',
+ 'noaccess' : 'нет доступа',
+ 'and' : 'и',
+ 'unknown' : 'неизвестно',
+ 'selectall' : 'Выбрать все файлы',
+ 'selectfiles' : 'Выбрать файл(ы)',
+ 'selectffile' : 'Выбрать первый файл',
+ 'selectlfile' : 'Выбрать последний файл',
+ 'viewlist' : 'В виде списка',
+ 'viewicons' : 'В виде иконок',
+ 'places' : 'Избранное',
+ 'calc' : 'вычисляю',
+ 'path' : 'Путь',
+ 'aliasfor' : 'Указывает на',
+ 'locked' : 'Защита',
+ 'dim' : 'Разрешение',
+ 'files' : 'Файлы',
+ 'folders' : 'Папки',
+ 'items' : 'Объекты',
+ 'yes' : 'да',
+ 'no' : 'нет',
+ 'link' : 'Ссылка',
+ 'searcresult' : 'Результаты поиска',
+ 'selected' : 'выбрано',
+ 'about' : 'О программе',
+ 'shortcuts' : 'Горячие клавиши',
+ 'help' : 'Помощь',
+ 'webfm' : 'Файловый менеджер для web',
+ 'ver' : 'Версия',
+ 'protocolver' : 'версия протокола',
+ 'homepage' : 'Сайт проекта',
+ 'docs' : 'Документация',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Follow us in twitter',
+ 'facebook' : 'Join us on facebook',
+ 'team' : 'Авторы',
+ 'chiefdev' : 'ведущий разработчик',
+ 'developer' : 'разработчик',
+ 'contributor' : 'участник',
+ 'maintainer' : 'сопровождение проекта',
+ 'translator' : 'переводчик',
+ 'icons' : 'Иконки',
+ 'dontforget' : 'и не забудьте взять своё полотенце',
+ 'shortcutsof' : 'Горячие клавиши отключены',
+ 'dropFiles' : 'Бросить файлы',
+ 'or' : 'или',
+ 'selectForUpload' : 'Выбрать файлы для загрузки',
+ 'moveFiles' : 'Перемещение файлов',
+ 'copyFiles' : 'Копирование файлов',
+ 'rmFromPlaces' : 'Удалить из избранного',
+ 'untitled folder' : 'новая папка',
+ 'untitled file.txt' : 'новый файл.txt',
+ 'aspectRatio' : 'Сохранять пропорции',
+ 'scale' : 'Масштаб',
+ 'width' : 'Ширина',
+ 'height' : 'Высота',
+ 'resize' : 'Размер',
+ 'crop' : 'Кадрировать',
+ 'rotate' : 'Поворот',
+ 'rotate-cw' : 'Поворот на 90 градусов по часовой стрелке',
+ 'rotate-ccw' : 'Поворот на 90 градусов против часовой стрелке',
+ 'degree' : '°',
+ 'netMountDialogTitle' : 'Подключить сетевой диск', // added 18.04.2012
+ 'protocol' : 'Протокол', // added 18.04.2012
+ 'host' : 'Хост', // added 18.04.2012
+ 'port' : 'Порт', // added 18.04.2012
+ 'user' : 'Пользователь', // added 18.04.2012
+ 'pass' : 'Пароль', // added 18.04.2012
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Неизвестный',
+ 'kindFolder' : 'Папка',
+ 'kindAlias' : 'Ссылка',
+ 'kindAliasBroken' : 'Битая ссылка',
+ // applications
+ 'kindApp' : 'Приложение',
+ 'kindPostscript' : 'Документ Postscript',
+ 'kindMsOffice' : 'Документ Microsoft Office',
+ 'kindMsWord' : 'Документ Microsoft Word',
+ 'kindMsExcel' : 'Документ Microsoft Excel',
+ 'kindMsPP' : 'Презентация Microsoft Powerpoint',
+ 'kindOO' : 'Документ Open Office',
+ 'kindAppFlash' : 'Приложение Flash',
+ 'kindPDF' : 'Документ PDF',
+ 'kindTorrent' : 'Файл Bittorrent',
+ 'kind7z' : 'Архив 7z',
+ 'kindTAR' : 'Архив TAR',
+ 'kindGZIP' : 'Архив GZIP',
+ 'kindBZIP' : 'Архив BZIP',
+ 'kindZIP' : 'Архив ZIP',
+ 'kindRAR' : 'Архив RAR',
+ 'kindJAR' : 'Файл Java JAR',
+ 'kindTTF' : 'Шрифт True Type',
+ 'kindOTF' : 'Шрифт Open Type',
+ 'kindRPM' : 'Пакет RPM',
+ // texts
+ 'kindText' : 'Текстовый документ',
+ 'kindTextPlain' : 'Простой текст',
+ 'kindPHP' : 'Исходник PHP',
+ 'kindCSS' : 'Таблицы стилей CSS',
+ 'kindHTML' : 'Документ HTML',
+ 'kindJS' : 'Исходник Javascript',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'Исходник C',
+ 'kindCHeader' : 'Заголовочный файл C',
+ 'kindCPP' : 'Исходник C++',
+ 'kindCPPHeader' : 'Заголовочный файл C++',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Исходник Python',
+ 'kindJava' : 'Исходник Java',
+ 'kindRuby' : 'Исходник Ruby',
+ 'kindPerl' : 'Исходник Perl',
+ 'kindSQL' : 'Исходник SQL',
+ 'kindXML' : 'XML document',
+ 'kindAWK' : 'Исходник AWK',
+ 'kindCSV' : 'Текст с разделителями',
+ 'kindDOCBOOK' : 'Документ Docbook XML',
+ // images
+ 'kindImage' : 'Изображение',
+ 'kindBMP' : 'Изображение BMP',
+ 'kindJPEG' : 'Изображение JPEG',
+ 'kindGIF' : 'Изображение GIF',
+ 'kindPNG' : 'Изображение PNG',
+ 'kindTIFF' : 'Изображение TIFF',
+ 'kindTGA' : 'Изображение TGA',
+ 'kindPSD' : 'Изображение Adobe Photoshop',
+ 'kindXBITMAP' : 'Изображение X bitmap',
+ 'kindPXM' : 'Изображение Pixelmator',
+ // media
+ 'kindAudio' : 'Аудио файл',
+ 'kindAudioMPEG' : 'Аудио MPEG',
+ 'kindAudioMPEG4' : 'Аудио MPEG-4',
+ 'kindAudioMIDI' : 'Аудио MIDI',
+ 'kindAudioOGG' : 'Аудио Ogg Vorbis',
+ 'kindAudioWAV' : 'Аудио WAV',
+ 'AudioPlaylist' : 'Плейлист MP3',
+ 'kindVideo' : 'Видео файл',
+ 'kindVideoDV' : 'Видео DV',
+ 'kindVideoMPEG' : 'Видео MPEG',
+ 'kindVideoMPEG4' : 'Видео MPEG-4',
+ 'kindVideoAVI' : 'Видео AVI',
+ 'kindVideoMOV' : 'Видео Quick Time',
+ 'kindVideoWM' : 'Видео Windows Media',
+ 'kindVideoFlash' : 'Видео Flash',
+ 'kindVideoMKV' : 'Видео Matroska',
+ 'kindVideoOGG' : 'Видео Ogg'
+ ,'volume_files' : 'Файлы '
+ }
+ }
+}
+
+
+
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sk.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sk.js
new file mode 100644
index 00000000..b3ca800b
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sk.js
@@ -0,0 +1,348 @@
+/**
+ * Slovak translation
+ * @author Jakub Ďuraš
+ * @version 2013-7-24
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.sk = {
+ translator : 'Jakub Ďuraš <jkblmr@gmail.com>',
+ language : 'slovenčina',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Chyba',
+ 'errUnknown' : 'Neznáma chyba.',
+ 'errUnknownCmd' : 'Neznámy príkaz.',
+ 'errJqui' : 'Nesprávna jQuery UI konfigurácia. Selectable, draggable a droppable musia byť načítané.',
+ 'errNode' : 'elFinder vyžaduje vytvorenie DOM Elementu.',
+ 'errURL' : 'Nesprávna elFinder konfigurácia! URL nie je definovaná.',
+ 'errAccess' : 'Prístup zamietnutý.',
+ 'errConnect' : 'Nepodarilo sa pripojiť do backendu.',
+ 'errAbort' : 'Pripojenie zrušené.',
+ 'errTimeout' : 'Vypršal limit pripojenia.',
+ 'errNotFound' : 'Backend nenájdený.',
+ 'errResponse' : 'Nesprávna backend odpoveď.',
+ 'errConf' : 'Nesprávna backend konfigurácia.',
+ 'errJSON' : 'Požadovaný PHP JSON modul nie je nainštalovaný.',
+ 'errNoVolumes' : 'Nie je dostupné žiadne čitateľné médium.',
+ 'errCmdParams' : 'Nesprávne parametre pre príkaz "$1".',
+ 'errDataNotJSON' : 'Dáta nie sú formátu JSON.',
+ 'errDataEmpty' : 'Prázdne dáta.',
+ 'errCmdReq' : 'Backend požiadavka požaduje meno príkazu.',
+ 'errOpen' : 'Nie je možné otvoriť súbor "$1".',
+ 'errNotFolder' : 'Objekt nie je priečinok.',
+ 'errNotFile' : 'Objekt nie je súbor.',
+ 'errRead' : 'Nie je možné prečítať súbor "$1".',
+ 'errWrite' : 'Nie je možné písať do súboru "$1".',
+ 'errPerm' : 'Nepovolený prístup.',
+ 'errLocked' : '"$1" je uzamknutý, a nemôže byť premenovaný, presunutý alebo odstránený.',
+ 'errExists' : 'Súbor s menom "$1" už existuje.',
+ 'errInvName' : 'Nesprávne meno súboru.',
+ 'errFolderNotFound' : 'Priečinok nenájdený.',
+ 'errFileNotFound' : 'Súbor nenájdený.',
+ 'errTrgFolderNotFound' : 'Zvolený priečinok "$1" nenájdený.',
+ 'errPopup' : 'Prehliadač zablokoval otvorenie vyskakovacieho okna. Pre otvorenie súboru povoľte vyskakovacie okná.',
+ 'errMkdir' : 'Nie je možné vytvoriť priečinok "$1".',
+ 'errMkfile' : 'Nie je možné vytvoriť súbor "$1".',
+ 'errRename' : 'Nie je možné premenovať "$1".',
+ 'errCopyFrom' : 'Kopírovanie súborov z média "$1" nie je povolené.',
+ 'errCopyTo' : 'Kopírovanie súborov na médium "$1" nie je povolené.',
+ 'errUploadCommon' : 'Problém s nahrávaním.',
+ 'errUpload' : 'Nie je možné nahrať "$1".',
+ 'errUploadNoFiles' : 'Žiadne súbory neboli nájdené na nahranie.',
+ 'errMaxSize' : 'Dáta prekračujú maximálnu povolenú veľkosť.',
+ 'errFileMaxSize' : 'Súbor prekračuje maximálnu povolenú veľkosť.',
+ 'errUploadMime' : 'Nepovolený typ súboru.',
+ 'errUploadTransfer' : 'Problém s nahrávaním "$1".',
+ 'errSave' : 'Nie je možné uložiť "$1".',
+ 'errCopy' : 'Nie je možné kopíropvať "$1".',
+ 'errMove' : 'Nie je možné preniesť "$1".',
+ 'errCopyInItself' : 'Nie je možné kopírovať "$1" do seba.',
+ 'errRm' : 'Nie je možné vymazať "$1".',
+ 'errExtract' : 'Nie je možné extrahovať súbory z "$1".',
+ 'errArchive' : 'Nie je možné vytvoriť archív.',
+ 'errArcType' : 'Nepodporovaný typ archívu.',
+ 'errNoArchive' : 'Súbor nie je archívom, alebo je nepodporovaného typu.',
+ 'errCmdNoSupport' : 'Backend nepodporuje tento príkaz.',
+ 'errReplByChild' : 'Priečinok “$1” nemôže byť nahradený položkou, ktorú už obsahuje.',
+ 'errArcSymlinks' : 'Z bezpečnostných dôvodov bolo zakázané extrahovanie archívov obsahujúcich symlinky, alebo súborov s nepovolenými menami.', // edited 24.06.2012
+ 'errArcMaxSize' : 'Súbory archívu prekračujú maximálnu povolenú veľkosť.',
+ 'errResize' : 'Nie je možné zmeniť veľkost "$1".',
+ 'errUsupportType' : 'Nepodporovaný typ súboru.',
+ 'errNotUTF8Content' : 'Súbor "$1" nemá obsah kódovaný v UTF-8, a nemôže byť upravený.', // added 9.11.2011
+ 'errNetMount' : 'Nie je možné pripojiť "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : 'Nepodporovaný protokol.', // added 17.04.2012
+ 'errNetMountFailed' : 'Pripájanie zlyhalo.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Host je požadovaný.', // added 18.04.2012
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Vytvoriť archív',
+ 'cmdback' : 'Späť',
+ 'cmdcopy' : 'Kopírovať',
+ 'cmdcut' : 'Vystrihnúť',
+ 'cmddownload' : 'Stiahnuť',
+ 'cmdduplicate' : 'Duplikovať',
+ 'cmdedit' : 'Upraviť súbor',
+ 'cmdextract' : 'Extrahovať súbory z archívu',
+ 'cmdforward' : 'Ďalej',
+ 'cmdgetfile' : 'Zvoliť súbory',
+ 'cmdhelp' : 'O tomto softvéri',
+ 'cmdhome' : 'Domov',
+ 'cmdinfo' : 'Získať info',
+ 'cmdmkdir' : 'Nový priečinok',
+ 'cmdmkfile' : 'Nový textový súbor',
+ 'cmdopen' : 'Otvoriť',
+ 'cmdpaste' : 'Vložiť',
+ 'cmdquicklook' : 'Náhľad',
+ 'cmdreload' : 'Obnoviť',
+ 'cmdrename' : 'Premenovať',
+ 'cmdrm' : 'Vymazať',
+ 'cmdsearch' : 'Nájsť súbory',
+ 'cmdup' : 'Prejsť do nadradeného priečinka',
+ 'cmdupload' : 'Nahrať súbory',
+ 'cmdview' : 'Pozrieť',
+ 'cmdresize' : 'Zmeniť veľkosť obrázku',
+ 'cmdsort' : 'Zoradiť',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Zavrieť',
+ 'btnSave' : 'Uložiť',
+ 'btnRm' : 'Vymazať',
+ 'btnApply' : 'Použiť',
+ 'btnCancel' : 'Zrušiť',
+ 'btnNo' : 'Nie',
+ 'btnYes' : 'Áno',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Otváranie priečinka',
+ 'ntffile' : 'Otváranie súboru',
+ 'ntfreload' : 'Znovu-načítanie obsahu priečinka',
+ 'ntfmkdir' : 'Vytváranie priečinka',
+ 'ntfmkfile' : 'Vytváranie súborov',
+ 'ntfrm' : 'Vymazanie súborov',
+ 'ntfcopy' : 'Kopírovanie súborov',
+ 'ntfmove' : 'Premiestnenie súborov',
+ 'ntfprepare' : 'Príprava na kopírovanie súborov',
+ 'ntfrename' : 'Premenovanie súborov',
+ 'ntfupload' : 'Upload súborov',
+ 'ntfdownload' : 'Download súborov',
+ 'ntfsave' : 'Uloženie súborov',
+ 'ntfarchive' : 'Vytváranie archívu',
+ 'ntfextract' : 'Extrahovanie súborov z archívu',
+ 'ntfsearch' : 'Prehľadávanie súborov',
+ 'ntfsmth' : 'Nejaká činnosť >_<',
+ 'ntfloadimg' : 'Nahrávanie obrázka',
+ 'ntfnetmount' : 'Pripájanie sieťového média', // added 18.04.2012
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'neznámy',
+ 'Today' : 'Dnes',
+ 'Yesterday' : 'Včera',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'Maj',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Júl',
+ 'Aug' : 'Aug',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Okt',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dec',
+ 'January' : 'Január',
+ 'February' : 'Február',
+ 'March' : 'Marec',
+ 'April' : 'Apríl',
+ 'May' : 'Máj',
+ 'June' : 'Jún',
+ 'July' : 'Júl',
+ 'August' : 'August',
+ 'September' : 'September',
+ 'October' : 'Október',
+ 'November' : 'November',
+ 'December' : 'December',
+ 'Sunday' : 'Nedeľa',
+ 'Monday' : 'Pondelok',
+ 'Tuesday' : 'Utorok',
+ 'Wednesday' : 'Streda',
+ 'Thursday' : 'Štvrtok',
+ 'Friday' : 'Piatok',
+ 'Saturday' : 'Sobota',
+ 'Sun' : 'Ned',
+ 'Mon' : 'Pon',
+ 'Tue' : 'Ut',
+ 'Wed' : 'Str',
+ 'Thu' : 'Štv',
+ 'Fri' : 'Pia',
+ 'Sat' : 'Sob',
+ /******************************** sort variants ********************************/
+ 'sortname' : 'podľa mena',
+ 'sortkind' : 'podľa druhu',
+ 'sortsize' : 'podľa veľkosti',
+ 'sortdate' : 'podľa dátumu',
+ 'sortFoldersFirst' : 'Najskôr Priečinky', // added 22.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Očakávam potvrdenie',
+ 'confirmRm' : 'Určite chcete vymazať súbory? Nebude sa to dať vrátiť späť!',
+ 'confirmRepl' : 'Nahradiť starý súbor novým?',
+ 'apllyAll' : 'Použiť na všetky',
+ 'name' : 'Meno',
+ 'size' : 'Veľkosť',
+ 'perms' : 'Povolenia',
+ 'modify' : 'Zmenené',
+ 'kind' : 'Druh',
+ 'read' : 'čítať',
+ 'write' : 'zapisovať',
+ 'noaccess' : 'bez prístupu',
+ 'and' : 'a',
+ 'unknown' : 'neznámy',
+ 'selectall' : 'Vybrať všetky súbory',
+ 'selectfiles' : 'Vybrať súbor(y)',
+ 'selectffile' : 'Vybrať prvý súbor',
+ 'selectlfile' : 'Vybrať posledný súbor',
+ 'viewlist' : 'Zoznam',
+ 'viewicons' : 'Ikony',
+ 'places' : 'Miesta',
+ 'calc' : 'Prepočítavanie',
+ 'path' : 'Cesta',
+ 'aliasfor' : 'Alias pre',
+ 'locked' : 'Uzamknuté',
+ 'dim' : 'Rozmery',
+ 'files' : 'Súbory',
+ 'folders' : 'Priečinky',
+ 'items' : 'Položky',
+ 'yes' : 'áno',
+ 'no' : 'nie',
+ 'link' : 'Odkaz',
+ 'searcresult' : 'Výsledky hľadania',
+ 'selected' : 'zvolené položky',
+ 'about' : 'O aplikácii',
+ 'shortcuts' : 'Skratky',
+ 'help' : 'Pomoc',
+ 'webfm' : 'Webový správca súborov',
+ 'ver' : 'Verzia',
+ 'protocolver' : 'verzia protokolu',
+ 'homepage' : 'Domovská stránka',
+ 'docs' : 'Dokumentácia',
+ 'github' : 'Pozri nás na Githube',
+ 'twitter' : 'Nasleduj nás na Twitteri',
+ 'facebook' : 'Pripoj sa k nám na Facebooku',
+ 'team' : 'Tím',
+ 'chiefdev' : 'Hlavný vývojár',
+ 'developer' : 'vývojár',
+ 'contributor' : 'prispievateľ',
+ 'maintainer' : 'správca',
+ 'translator' : 'prekladateľ',
+ 'icons' : 'Ikony',
+ 'dontforget' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : 'Skratky zakázané',
+ 'dropFiles' : 'Sem pustite súbory',
+ 'or' : 'alebo',
+ 'selectForUpload' : 'Zvoliť súbory na upload',
+ 'moveFiles' : 'Premiestniť súbory',
+ 'copyFiles' : 'Kopírovať súbory',
+ 'rmFromPlaces' : 'Odstrániť z umiestnení',
+ 'untitled folder' : 'nepomenovaný priečinok',
+ 'untitled file.txt' : 'untitled file.txt',
+ 'aspectRatio' : 'Pomer zobrazenia',
+ 'scale' : 'Mierka',
+ 'width' : 'Šírka',
+ 'height' : 'Výška',
+ 'mode' : 'Mód',
+ 'resize' : 'Zmeniť veľkosť',
+ 'crop' : 'Zrezať',
+ 'rotate' : 'Otočiť',
+ 'rotate-cw' : 'Otočiť o 90 stupňov (v smere h.r.)',
+ 'rotate-ccw' : 'Otočiť o 90 stupňov (proti smeru)',
+ 'degree' : 'Stupne',
+ 'netMountDialogTitle' : 'Pripojiť sieťové médium', // added 18.04.2012
+ 'protocol' : 'Protokol', // added 18.04.2012
+ 'host' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'Užívateľ', // added 18.04.2012
+ 'pass' : 'Heslo', // added 18.04.2012
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Neznámy',
+ 'kindFolder' : 'Priečinok',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Porušený alias',
+ // applications
+ 'kindApp' : 'Aplikácia',
+ 'kindPostscript' : 'Postscript dokument',
+ 'kindMsOffice' : 'Microsoft Office dokument',
+ 'kindMsWord' : 'Microsoft Word dokument',
+ 'kindMsExcel' : 'Microsoft Excel dokument',
+ 'kindMsPP' : 'Microsoft Powerpoint prezentácia',
+ 'kindOO' : 'Open Office dokument',
+ 'kindAppFlash' : 'Flashová aplikácia',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent súbor',
+ 'kind7z' : '7z archív',
+ 'kindTAR' : 'TAR archív',
+ 'kindGZIP' : 'GZIP archív',
+ 'kindBZIP' : 'BZIP archív',
+ 'kindZIP' : 'ZIP archív',
+ 'kindRAR' : 'RAR archív',
+ 'kindJAR' : 'Java JAR súbor',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM balík',
+ // texts
+ 'kindText' : 'Textový document',
+ 'kindTextPlain' : 'Obyčajný text',
+ 'kindPHP' : 'PHP zdrojový kód',
+ 'kindCSS' : 'Cascading style sheet (CSS)',
+ 'kindHTML' : 'HTML dokument',
+ 'kindJS' : 'Javascript zdrojový kód',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C zdrojový kód',
+ 'kindCHeader' : 'C header zdrojový kód',
+ 'kindCPP' : 'C++ zdrojový kód',
+ 'kindCPPHeader' : 'C++ header zdrojový kód',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python zdrojový kód',
+ 'kindJava' : 'Java zdrojový kód',
+ 'kindRuby' : 'Ruby zdrojový kód',
+ 'kindPerl' : 'Perl zdrojový kód',
+ 'kindSQL' : 'SQL zdrojový kód',
+ 'kindXML' : 'XML dokument',
+ 'kindAWK' : 'AWK zdrojový kód',
+ 'kindCSV' : 'Čiarkou oddeľované hodnoty',
+ 'kindDOCBOOK' : 'Docbook XML dokument',
+ // images
+ 'kindImage' : 'Obrázok',
+ 'kindBMP' : 'BMP Obrázok',
+ 'kindJPEG' : 'JPEG Obrázok',
+ 'kindGIF' : 'GIF Obrázok',
+ 'kindPNG' : 'PNG Obrázok',
+ 'kindTIFF' : 'TIFF Obrázok',
+ 'kindTGA' : 'TGA Obrázok',
+ 'kindPSD' : 'Adobe Photoshop Obrázok',
+ 'kindXBITMAP' : 'X bitmap Obrázok',
+ 'kindPXM' : 'Pixelmator Obrázok',
+ // media
+ 'kindAudio' : 'Zvukový súbor',
+ 'kindAudioMPEG' : 'MPEG zvuk',
+ 'kindAudioMPEG4' : 'MPEG-4 zvuk',
+ 'kindAudioMIDI' : 'MIDI zvuk',
+ 'kindAudioOGG' : 'Ogg Vorbis zvuk',
+ 'kindAudioWAV' : 'WAV zvuk',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Video súbor',
+ 'kindVideoDV' : 'DV video',
+ 'kindVideoMPEG' : 'MPEG video',
+ 'kindVideoMPEG4' : 'MPEG-4 video',
+ 'kindVideoAVI' : 'AVI video',
+ 'kindVideoMOV' : 'Quick Time video',
+ 'kindVideoWM' : 'Windows Media video',
+ 'kindVideoFlash' : 'Flash video',
+ 'kindVideoMKV' : 'Matroska video',
+ 'kindVideoOGG' : 'Ogg video'
+ }
+ }
+}
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sl.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sl.js
new file mode 100644
index 00000000..c937dabc
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sl.js
@@ -0,0 +1,340 @@
+/**
+ * Slovenian translation
+ * @author Damjan Rems
+ * @version 2012-09-07
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.sl = {
+ translator : 'Damjan Rems <d_rems at yahoo.com>',
+ language : 'Slovenščina',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Napaka',
+ 'errUnknown' : 'Neznana napaka.',
+ 'errUnknownCmd' : 'Neznan ukaz.',
+ 'errJqui' : 'Napačna jQuery UI nastavitev. Selectable, draggable in droppable dodatki morajo biti vključeni.',
+ 'errNode' : 'elFinder potrebuje "DOM Element".',
+ 'errURL' : 'Napačna nastavitev elFinder-ja! Manjka URL nastavitev.',
+ 'errAccess' : 'Dostop zavrnjen.',
+ 'errConnect' : 'Ne morem se priključiti na "backend".',
+ 'errAbort' : 'Povezava prekinjena (aborted).',
+ 'errTimeout' : 'Povezava potekla (timeout).',
+ 'errNotFound' : 'Nisem našel "backend-a".',
+ 'errResponse' : 'Napačni "backend" odgovor.',
+ 'errConf' : 'Napačna "backend" nastavitev.',
+ 'errJSON' : 'JSON modul ni instaliran.',
+ 'errNoVolumes' : 'Readable volumes not available.',
+ 'errCmdParams' : 'Napačni parametri za ukaz "$1".',
+ 'errDataNotJSON' : 'Podatki niso v JSON obliki.',
+ 'errDataEmpty' : 'Ni podatkov oz. so prazni.',
+ 'errCmdReq' : '"Backend" zahtevek potrebuje ime ukaza.',
+ 'errOpen' : '"$1" ni možno odpreti.',
+ 'errNotFolder' : 'Objekt ni mapa.',
+ 'errNotFile' : 'Objekt ni datoteka.',
+ 'errRead' : '"$1" ni možno brati.',
+ 'errWrite' : 'Ne morem pisati v "$1".',
+ 'errPerm' : 'Dostop zavrnjen.',
+ 'errLocked' : '"$1" je zaklenjen(a) in je ni možno preimenovati, premakniti ali izbrisati.',
+ 'errExists' : 'Datoteka z imenom "$1" že obstaja.',
+ 'errInvName' : 'Napačno ime datoteke.',
+ 'errFolderNotFound' : 'Mape nisem našel.',
+ 'errFileNotFound' : 'Datoteke nisem našel.',
+ 'errTrgFolderNotFound' : 'Ciljna mapa "$1" ne obstaja.',
+ 'errPopup' : 'Brskalnik je preprečil prikaz (popup) okna. Za vpogled datoteke omogočite nastavitev v vašem brskalniku.',
+ 'errMkdir' : 'Ni možno dodati mape "$1".',
+ 'errMkfile' : 'Ni možno dodati datoteke "$1".',
+ 'errRename' : 'Ni možno preimenovati "$1".',
+ 'errCopyFrom' : 'Kopiranje datotek iz "$1" ni dovoljeno.',
+ 'errCopyTo' : 'Kopiranje datotek na "$1" ni dovoljeno.',
+ 'errUploadCommon' : 'Napaka pri prenosu.',
+ 'errUpload' : '"$1" ni možno naložiti (upload).',
+ 'errUploadNoFiles' : 'Ni datotek za nalaganje (upload).',
+ 'errMaxSize' : 'Podatki presegajo največjo dovoljeno velikost.',
+ 'errFileMaxSize' : 'Datoteka presega največjo dovoljeno velikost.',
+ 'errUploadMime' : 'Datoteke s to končnico niso dovoljene.',
+ 'errUploadTransfer' : '"$1" napaka pri prenosu.',
+ 'errSave' : '"$1" ni možno shraniti.',
+ 'errCopy' : '"$1" ni možno kopirati.',
+ 'errMove' : '"$1" ni možno premakniti.',
+ 'errCopyInItself' : '"$1" ni možno kopirati samo vase.',
+ 'errRm' : '"$1" ni možno izbrisati.',
+ 'errExtract' : 'Datotek iz "$1" ni možno odpakirati.',
+ 'errArchive' : 'Napaka pri delanju arhiva.',
+ 'errArcType' : 'Nepodprta vrsta arhiva.',
+ 'errNoArchive' : 'Datoteka ni arhiv ali vrsta arhiva ni podprta.',
+ 'errCmdNoSupport' : '"Backend" ne podpira tega ukaza.',
+ 'errReplByChild' : 'Mape “$1” ni možno zamenjati z vsebino mape.',
+ 'errArcSymlinks' : 'Zaradi varnostnih razlogov arhiva ki vsebuje "symlinks" ni možno odpakirati.',
+ 'errArcMaxSize' : 'Datoteke v arhivu presegajo največjo dovoljeno velikost.',
+ 'errResize' : '"$1" ni možno razširiti.',
+ 'errUsupportType' : 'Nepodprta vrsta datoteke.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Naredi arhiv',
+ 'cmdback' : 'Nazaj',
+ 'cmdcopy' : 'Kopiraj',
+ 'cmdcut' : 'Izreži',
+ 'cmddownload' : 'Poberi (download)',
+ 'cmdduplicate' : 'Podvoji',
+ 'cmdedit' : 'Uredi datoteko',
+ 'cmdextract' : 'Odpakiraj datoteke iz arhiva',
+ 'cmdforward' : 'Naprej',
+ 'cmdgetfile' : 'Izberi datoteke',
+ 'cmdhelp' : 'Več o',
+ 'cmdhome' : 'Domov',
+ 'cmdinfo' : 'Lastnosti',
+ 'cmdmkdir' : 'Nova mapa',
+ 'cmdmkfile' : 'Nova datoteka',
+ 'cmdopen' : 'Odpri',
+ 'cmdpaste' : 'Prilepi',
+ 'cmdquicklook' : 'Hitri ogled',
+ 'cmdreload' : 'Osveži',
+ 'cmdrename' : 'Preimenuj',
+ 'cmdrm' : 'Izbriši',
+ 'cmdsearch' : 'Poišči datoteke',
+ 'cmdup' : 'Mapa nazaj',
+ 'cmdupload' : 'Naloži (upload)',
+ 'cmdview' : 'Ogled',
+ 'cmdresize' : 'Povečaj (pomanjšaj) sliko',
+ 'cmdsort' : 'Razvrsti',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Zapri',
+ 'btnSave' : 'Shrani',
+ 'btnRm' : 'Izbriši',
+ 'btnApply' : 'Uporabi',
+ 'btnCancel' : 'Prekliči',
+ 'btnNo' : 'Ne',
+ 'btnYes' : 'Da',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Odpri mapo',
+ 'ntffile' : 'Odpri datoteko',
+ 'ntfreload' : 'Osveži vsebino mape',
+ 'ntfmkdir' : 'Ustvarjam mapo',
+ 'ntfmkfile' : 'Ustvarjam datoteke',
+ 'ntfrm' : 'Brišem datoteke',
+ 'ntfcopy' : 'Kopiram datoteke',
+ 'ntfmove' : 'Premikam datoteke',
+ 'ntfprepare' : 'Pripravljam se na kopiranje datotek',
+ 'ntfrename' : 'Preimenujem datoteke',
+ 'ntfupload' : 'Nalagam (upload) datoteke',
+ 'ntfdownload' : 'Pobiram (download) datoteke',
+ 'ntfsave' : 'Shranjujem datoteke',
+ 'ntfarchive' : 'Ustvarjam arhiv',
+ 'ntfextract' : 'Razpakiram datoteke iz arhiva',
+ 'ntfsearch' : 'Iščem datoteke',
+ 'ntfsmth' : 'Počakaj delam >_<',
+ 'ntfloadimg' : 'Nalagam sliko',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'neznan',
+ 'Today' : 'Danes',
+ 'Yesterday' : 'Včeraj',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'Maj',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Avg',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Okt',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dec',
+ 'January' : 'Januar',
+ 'February' : 'Februar',
+ 'March' : 'Marec',
+ 'April' : 'April',
+ 'May' : 'Maj',
+ 'June' : 'Junij',
+ 'July' : 'Julij',
+ 'August' : 'Avgust',
+ 'September' : 'September',
+ 'October' : 'Oktober',
+ 'November' : 'November',
+ 'December' : 'December',
+ 'Sunday' : 'Nedelja',
+ 'Monday' : 'Ponedeljek',
+ 'Tuesday' : 'Torek',
+ 'Wednesday' : 'Sreda',
+ 'Thursday' : 'Četrtek',
+ 'Friday' : 'Petek',
+ 'Saturday' : 'Sobota',
+ 'Sun' : 'Ned',
+ 'Mon' : 'Pon',
+ 'Tue' : 'Tor',
+ 'Wed' : 'Sre',
+ 'Thu' : 'Čet',
+ 'Fri' : 'Pet',
+ 'Sat' : 'Sob',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'po imenu (mape na začetku)',
+ 'sortkindDirsFirst' : 'po vrsti (mape na začetku)',
+ 'sortsizeDirsFirst' : 'po velikosti (mape na začetku)',
+ 'sortdateDirsFirst' : 'po datumu (mape na začetku)',
+ 'sortname' : 'po imenu',
+ 'sortkind' : 'po vrsti',
+ 'sortsize' : 'po velikosti',
+ 'sortdate' : 'po datumu',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Zahtevana je potrditev',
+ 'confirmRm' : 'Ste prepričani, da želite izbrisati datoteko? POZOR! Tega ukaza ni možno preklicati!',
+ 'confirmRepl' : 'Zamenjam staro datoteko z novo?',
+ 'apllyAll' : 'Uporabi pri vseh',
+ 'name' : 'Ime',
+ 'size' : 'Velikost',
+ 'perms' : 'Dovoljenja',
+ 'modify' : 'Spremenjeno',
+ 'kind' : 'Vrsta',
+ 'read' : 'beri',
+ 'write' : 'piši',
+ 'noaccess' : 'ni dostopa',
+ 'and' : 'in',
+ 'unknown' : 'neznan',
+ 'selectall' : 'Izberi vse datoteke',
+ 'selectfiles' : 'Izberi datotek(o)e',
+ 'selectffile' : 'Izberi prvo datoteko',
+ 'selectlfile' : 'Izberi zadnjo datoteko',
+ 'viewlist' : 'Seznam',
+ 'viewicons' : 'Ikone',
+ 'places' : 'Mesta (places)',
+ 'calc' : 'Izračun',
+ 'path' : 'Pot do',
+ 'aliasfor' : 'Sopomenka (alias) za',
+ 'locked' : 'Zaklenjeno',
+ 'dim' : 'Dimenzije',
+ 'files' : 'Datoteke',
+ 'folders' : 'Mape',
+ 'items' : 'Predmeti',
+ 'yes' : 'da',
+ 'no' : 'ne',
+ 'link' : 'Povezava',
+ 'searcresult' : 'Rezultati iskanja',
+ 'selected' : 'izbrani predmeti',
+ 'about' : 'Več o',
+ 'shortcuts' : 'Bližnjice',
+ 'help' : 'Pomoč',
+ 'webfm' : 'Spletni upravitelj datotek',
+ 'ver' : 'Verzija',
+ 'protocol' : 'verzija protokola',
+ 'homepage' : 'Domača stran',
+ 'docs' : 'Dokumentacija',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Sledi na twitterju',
+ 'facebook' : 'Pridruži se nam na facebook-u',
+ 'team' : 'Tim',
+ 'chiefdev' : 'Glavni razvijalec',
+ 'developer' : 'razvijalec',
+ 'contributor' : 'contributor',
+ 'maintainer' : 'vzdrževalec',
+ 'translator' : 'prevajalec',
+ 'icons' : 'Ikone',
+ 'dontforget' : 'In ne pozabi na brisačo',
+ 'shortcutsof' : 'Bližnjica onemogočena',
+ 'dropFiles' : 'Datoteke spusti tukaj',
+ 'or' : 'ali',
+ 'selectForUpload' : 'Izberi datoteke za nalaganje',
+ 'moveFiles' : 'Premakni datoteke',
+ 'copyFiles' : 'Kopiraj datoteke',
+ 'rmFromPlaces' : 'Izbriši iz mesta (places)',
+ 'untitled folder' : 'mapa brez imena',
+ 'untitled file.txt' : 'brez imena file.txt',
+ 'aspectRatio' : 'Razmerje slike',
+ 'scale' : 'Razširi',
+ 'width' : 'Širina',
+ 'height' : 'Višina',
+ 'mode' : 'Način (mode)',
+ 'resize' : 'Povečaj',
+ 'crop' : 'Obreži',
+ 'rotate' : 'Zavrti',
+ 'rotate-cw' : 'Zavrti 90 st. v smeri ure',
+ 'rotate-ccw' : 'Zavrti 90 st. v obratni smeri ure',
+ 'degree' : 'Stopnja',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Neznan',
+ 'kindFolder' : 'Mapa',
+ 'kindAlias' : 'Sopomenka (alias)',
+ 'kindAliasBroken' : 'Nedelujoča sopomenka (alias)',
+ // applications
+ 'kindApp' : 'Program',
+ 'kindPostscript' : 'Postscript dokument',
+ 'kindMsOffice' : 'Microsoft Office dokument',
+ 'kindMsWord' : 'Microsoft Word dokument',
+ 'kindMsExcel' : 'Microsoft Excel dokument',
+ 'kindMsPP' : 'Microsoft Powerpoint predstavitev',
+ 'kindOO' : 'Open Office dokument',
+ 'kindAppFlash' : 'Flash program',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent datoteka',
+ 'kind7z' : '7z arhiv',
+ 'kindTAR' : 'TAR arhiv',
+ 'kindGZIP' : 'GZIP arhiv',
+ 'kindBZIP' : 'BZIP arhiv',
+ 'kindZIP' : 'ZIP arhiv',
+ 'kindRAR' : 'RAR arhiv',
+ 'kindJAR' : 'Java JAR datoteka',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM paket',
+ // texts
+ 'kindText' : 'Tekst dokument',
+ 'kindTextPlain' : 'Samo tekst',
+ 'kindPHP' : 'PHP koda',
+ 'kindCSS' : 'Cascading style sheet (CSS)',
+ 'kindHTML' : 'HTML dokument',
+ 'kindJS' : 'Javascript koda',
+ 'kindRTF' : 'Rich Text Format (RTF)',
+ 'kindC' : 'C koda',
+ 'kindCHeader' : 'C header koda',
+ 'kindCPP' : 'C++ koda',
+ 'kindCPPHeader' : 'C++ header koda',
+ 'kindShell' : 'Unix shell skripta',
+ 'kindPython' : 'Python kdoa',
+ 'kindJava' : 'Java koda',
+ 'kindRuby' : 'Ruby koda',
+ 'kindPerl' : 'Perl skripta',
+ 'kindSQL' : 'SQL koda',
+ 'kindXML' : 'XML dokument',
+ 'kindAWK' : 'AWK koda',
+ 'kindCSV' : 'Besedilo ločeno z vejico (CSV)',
+ 'kindDOCBOOK' : 'Docbook XML dokument',
+ // images
+ 'kindImage' : 'Slika',
+ 'kindBMP' : 'BMP slika',
+ 'kindJPEG' : 'JPEG slika',
+ 'kindGIF' : 'GIF slika',
+ 'kindPNG' : 'PNG slika',
+ 'kindTIFF' : 'TIFF slika',
+ 'kindTGA' : 'TGA slika',
+ 'kindPSD' : 'Adobe Photoshop slika',
+ 'kindXBITMAP' : 'X bitmap slika',
+ 'kindPXM' : 'Pixelmator slika',
+ // media
+ 'kindAudio' : 'Avdio medija',
+ 'kindAudioMPEG' : 'MPEG zvok',
+ 'kindAudioMPEG4' : 'MPEG-4 zvok',
+ 'kindAudioMIDI' : 'MIDI zvok',
+ 'kindAudioOGG' : 'Ogg Vorbis zvok',
+ 'kindAudioWAV' : 'WAV zvok',
+ 'AudioPlaylist' : 'MP3 seznam',
+ 'kindVideo' : 'Video medija',
+ 'kindVideoDV' : 'DV film',
+ 'kindVideoMPEG' : 'MPEG film',
+ 'kindVideoMPEG4' : 'MPEG-4 film',
+ 'kindVideoAVI' : 'AVI film',
+ 'kindVideoMOV' : 'Quick Time film',
+ 'kindVideoWM' : 'Windows Media film',
+ 'kindVideoFlash' : 'Flash film',
+ 'kindVideoMKV' : 'Matroska film',
+ 'kindVideoOGG' : 'Ogg film'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sv.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sv.js
new file mode 100644
index 00000000..8e4c5a86
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.sv.js
@@ -0,0 +1,353 @@
+/**
+ * Swedish translation
+ * @author Gabriel Satzger
+ * @version 2012-09-10
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.sv = {
+ translator : 'Gabriel Satzger <gabriel.satzger@sbg.se>',
+ language : 'Svenska',
+ direction : 'ltr',
+ dateFormat : 'Y-m-d H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Error',
+ 'errUnknown' : 'Okänt error.',
+ 'errUnknownCmd' : 'Okänt kommando.',
+ 'errJqui' : 'Felaktig jQuery UI konfiguration. Komponenterna selectable, draggable och droppable måste vara inkluderade.',
+ 'errNode' : 'elFinder kräver att DOM Elementen skapats.',
+ 'errURL' : 'Felaktig elFinder konfiguration! URL parametern är inte satt.',
+ 'errAccess' : 'Åtkomst nekad.',
+ 'errConnect' : 'Kan inte ansluta till backend.',
+ 'errAbort' : 'Anslutningen avbröts.',
+ 'errTimeout' : 'Anslutningen löpte ut.',
+ 'errNotFound' : 'Backend hittades inte.',
+ 'errResponse' : 'Ogiltig backend svar.',
+ 'errConf' : 'Ogiltig backend konfiguration.',
+ 'errJSON' : 'PHP JSON modul är inte installerad.',
+ 'errNoVolumes' : 'Läsbara volymer är inte tillgängliga.',
+ 'errCmdParams' : 'Ogiltiga parametrar för kommandot "$1".',
+ 'errDataNotJSON' : 'Datan är inte JSON.',
+ 'errDataEmpty' : 'Datan är tom.',
+ 'errCmdReq' : 'Backend begäran kräver kommandonamn.',
+ 'errOpen' : 'Kan inte öppna "$1".',
+ 'errNotFolder' : 'Objektet är inte en mapp.',
+ 'errNotFile' : 'Objektet är inte en fil.',
+ 'errRead' : 'Kan inte läsa "$1".',
+ 'errWrite' : 'Kan inte skriva till "$1".',
+ 'errPerm' : 'Tillstånd nekat.',
+ 'errLocked' : '"$1" är låst och kan inte döpas om, flyttas eller tas bort.',
+ 'errExists' : 'Fil med namn "$1" finns redan.',
+ 'errInvName' : 'Ogiltigt filnamn.',
+ 'errFolderNotFound' : 'Mappen hittades inte.',
+ 'errFileNotFound' : 'Filen hittades inte.',
+ 'errTrgFolderNotFound' : 'Målmappen "$1" hittades inte.',
+ 'errPopup' : 'Webbläsaren hindrade popup-fönstret att öppnas. Ändra i webbläsarens inställningar för att kunna öppna filen.',
+ 'errMkdir' : 'Kan inte skapa mappen "$1".',
+ 'errMkfile' : 'Kan inte skapa filen "$1".',
+ 'errRename' : 'Kan inte döpa om "$1".',
+ 'errCopyFrom' : 'Kopiera filer från volym "$1" tillåts inte.',
+ 'errCopyTo' : 'Kopiera filer till volym "$1" tillåts inte.',
+ 'errUploadCommon' : 'Error vid uppladdningen.',
+ 'errUpload' : 'Kan inte ladda upp "$1".',
+ 'errUploadNoFiles' : 'Inga filer hittades för uppladdning.',
+ 'errMaxSize' : 'Data överskrider den högsta tillåtna storleken.',
+ 'errFileMaxSize' : 'Filen överskrider den högsta tillåtna storleken.',
+ 'errUploadMime' : 'Otillåten filtyp.',
+ 'errUploadTransfer' : '"$1" överföringsfel.',
+ 'errSave' : 'Kan inte spara "$1".',
+ 'errCopy' : 'Kan inte kopiera "$1".',
+ 'errMove' : 'Kan inte flytta "$1".',
+ 'errCopyInItself' : 'Kan inte flytta "$1" till sig själv.',
+ 'errRm' : 'Kan inte ta bort "$1".',
+ 'errExtract' : 'Kan inte packa upp filen från "$1".',
+ 'errArchive' : 'Kan inte skapa arkiv.',
+ 'errArcType' : 'Arkivtypen stöds inte.',
+ 'errNoArchive' : 'Filen är inte av typen arkiv.',
+ 'errCmdNoSupport' : 'Backend stöder inte detta kommando.',
+ 'errReplByChild' : 'Mappen “$1” kan inte ersättas av ett objekt den innehåller.',
+ 'errArcSymlinks' : 'Av säkerhetsskäl nekas arkivet att packas upp då det innehåller symboliska länkar eller filer med ej tillåtna namn.', // edited 24.06.2012
+ 'errArcMaxSize' : 'Arkivfiler överskrider största tillåtna storlek.',
+ 'errResize' : 'Kan inte ändra storlek "$1".',
+ 'errUsupportType' : 'Filtypen stöds inte.',
+ 'errNotUTF8Content' : 'Filen "$1" är inte i UTF-8 och kan inte redigeras.', // added 9.11.2011
+ 'errNetMount' : 'Kan inte koppla "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : 'Protokollet stöds inte.', // added 17.04.2012
+ 'errNetMountFailed' : 'Kopplingen misslyckades.', // added 17.04.2012
+ 'errNetMountHostReq' : 'Host krävs.', // added 18.04.2012
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Skapa arkiv',
+ 'cmdback' : 'Tillbaka',
+ 'cmdcopy' : 'Kopiera',
+ 'cmdcut' : 'Klipp ut',
+ 'cmddownload' : 'Ladda ned',
+ 'cmdduplicate' : 'Duplicera',
+ 'cmdedit' : 'Redigera fil',
+ 'cmdextract' : 'Extrahera filer från arkiv',
+ 'cmdforward' : 'Framåt',
+ 'cmdgetfile' : 'Välj filer',
+ 'cmdhelp' : 'Om denna programvara',
+ 'cmdhome' : 'Hem',
+ 'cmdinfo' : 'Visa info',
+ 'cmdmkdir' : 'Ny mapp',
+ 'cmdmkfile' : 'Ny textfil',
+ 'cmdopen' : 'Öpna',
+ 'cmdpaste' : 'Klistra in',
+ 'cmdquicklook' : 'Förhandsgranska',
+ 'cmdreload' : 'Ladda om',
+ 'cmdrename' : 'Döp om',
+ 'cmdrm' : 'Radera',
+ 'cmdsearch' : 'Hitta filer',
+ 'cmdup' : 'Gå till överordnade katalog',
+ 'cmdupload' : 'Ladda upp filer',
+ 'cmdview' : 'Visa',
+ 'cmdresize' : 'Ändra bildstorlek',
+ 'cmdsort' : 'Sortera',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Stäng',
+ 'btnSave' : 'Spara',
+ 'btnRm' : 'Ta bort',
+ 'btnApply' : 'Verkställ',
+ 'btnCancel' : 'Ångra',
+ 'btnNo' : 'Nej',
+ 'btnYes' : 'Ja',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Öppnar mapp',
+ 'ntffile' : 'Öppnar fil',
+ 'ntfreload' : 'Laddar om mappinnehållet',
+ 'ntfmkdir' : 'Skapar katalog',
+ 'ntfmkfile' : 'Skapar fil',
+ 'ntfrm' : 'Tar bort filer',
+ 'ntfcopy' : 'Kopierar filer',
+ 'ntfmove' : 'Flyttar filer',
+ 'ntfprepare' : 'Förbereder att flytta filer',
+ 'ntfrename' : 'Döper om filer',
+ 'ntfupload' : 'Laddar upp filer',
+ 'ntfdownload' : 'Laddar ner filer',
+ 'ntfsave' : 'Sparar filer',
+ 'ntfarchive' : 'Skapar arkiv',
+ 'ntfextract' : 'Extraherar filer från arkiv',
+ 'ntfsearch' : 'Söker filer',
+ 'ntfsmth' : 'Gör någonting >_<',
+ 'ntfloadimg' : 'Laddar bild',
+ 'ntfnetmount' : 'kopplar nätverksvolym', // added 18.04.2012
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'okänt',
+ 'Today' : 'Idag',
+ 'Yesterday' : 'Igår',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'Maj',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Aug',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Okt',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dec',
+ 'January' : 'Januari',
+ 'February' : 'Februari',
+ 'March' : 'Mars',
+ 'April' : 'April',
+ 'May' : 'Maj',
+ 'June' : 'Juni',
+ 'July' : 'Juli',
+ 'August' : 'Augusti',
+ 'September' : 'September',
+ 'October' : 'Oktober',
+ 'November' : 'November',
+ 'December' : 'December',
+ 'Sunday' : 'Söndag',
+ 'Monday' : 'Måndag',
+ 'Tuesday' : 'Tisdag',
+ 'Wednesday' : 'Onsdag',
+ 'Thursday' : 'Torsdag',
+ 'Friday' : 'Fredag',
+ 'Saturday' : 'Lördag',
+ 'Sun' : 'Sön',
+ 'Mon' : 'Mån',
+ 'Tue' : 'Tis',
+ 'Wed' : 'Ons',
+ 'Thu' : 'Tor',
+ 'Fri' : 'Fre',
+ 'Sat' : 'Lör',
+
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'namn (mappar först)',
+ 'sortkindDirsFirst' : 'efter sort (mappar först)',
+ 'sortsizeDirsFirst' : 'efter storlek (mappar först)',
+ 'sortdateDirsFirst' : 'efter datum (mappar först)',
+ 'sortname' : 'efter namn',
+ 'sortkind' : 'efter sort',
+ 'sortsize' : 'efter storlek',
+ 'sortdate' : 'efter datum',
+ 'sortFoldersFirst' : 'Mappar först', // added 22.06.2012
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Bekräftelse krävs',
+ 'confirmRm' : 'Är du säker på att du vill ta bort filer? Detta kan inte ångras!',
+ 'confirmRepl' : 'Ersätt den gamla filen med en ny?',
+ 'apllyAll' : 'Använd för alla',
+ 'name' : 'Namn',
+ 'size' : 'Storlek',
+ 'perms' : 'Rättigheter',
+ 'modify' : 'Ändrad',
+ 'kind' : 'Sort',
+ 'read' : 'läs',
+ 'write' : 'skriv',
+ 'noaccess' : 'ingen åtkomst',
+ 'and' : 'och',
+ 'unknown' : 'okänd',
+ 'selectall' : 'Välj alla filer',
+ 'selectfiles' : 'Välj fil(er)',
+ 'selectffile' : 'Välj första filen',
+ 'selectlfile' : 'Välj sista filen',
+ 'viewlist' : 'Listvy',
+ 'viewicons' : 'Ikonvy',
+ 'places' : 'Platser',
+ 'calc' : 'Beräkna',
+ 'path' : 'Sökväg',
+ 'aliasfor' : 'Alias för',
+ 'locked' : 'Låst',
+ 'dim' : 'Dimensioner',
+ 'files' : 'Filer',
+ 'folders' : 'Mappar',
+ 'items' : 'Objekt',
+ 'yes' : 'ja',
+ 'no' : 'nej',
+ 'link' : 'Länk',
+ 'searcresult' : 'Sökresultat',
+ 'selected' : 'valda objekt',
+ 'about' : 'Om',
+ 'shortcuts' : 'Genväg',
+ 'help' : 'Hjälp',
+ 'webfm' : 'Webbfilhanterare',
+ 'ver' : 'Version',
+ 'protocolver' : 'protokolversion',
+ 'homepage' : 'Projekt hemsida',
+ 'docs' : 'Dokumentation',
+ 'github' : 'Forka oss på Github',
+ 'twitter' : 'Följ oss på twitter',
+ 'facebook' : 'Följ oss på facebook',
+ 'team' : 'Team',
+ 'chiefdev' : 'senior utvecklare',
+ 'developer' : 'utvecklare',
+ 'contributor' : 'bidragsgivare',
+ 'maintainer' : 'underhållare',
+ 'translator' : 'översättare',
+ 'icons' : 'Ikoner',
+ 'dontforget' : 'och glöm inte att ta med din handduk',
+ 'shortcutsof' : 'Genvägar avaktiverade',
+ 'dropFiles' : 'Släpp filerna här',
+ 'or' : 'eller',
+ 'selectForUpload' : 'Välj filer att ladda upp',
+ 'moveFiles' : 'Flytta filer',
+ 'copyFiles' : 'Kopiera filer',
+ 'rmFromPlaces' : 'Ta bort från platser',
+ 'untitled folder' : 'namnlös mapp',
+ 'untitled file.txt' : 'namnlös fil.txt',
+ 'aspectRatio' : 'Aspekt ratio',
+ 'scale' : 'Skala',
+ 'width' : 'Bredd',
+ 'height' : 'Höjd',
+ 'mode' : 'Läge',
+ 'resize' : 'Ändra storlek',
+ 'crop' : 'Beskär',
+ 'rotate' : 'Rotera',
+ 'rotate-cw' : 'Rotera 90 grader medurs',
+ 'rotate-ccw' : 'Rotera 90 grader moturs',
+ 'degree' : 'Grader',
+ 'netMountDialogTitle' : 'Koppla nätverksvolym', // added 18.04.2012
+ 'protocol' : 'Protokol', // added 18.04.2012
+ 'host' : 'Host', // added 18.04.2012
+ 'port' : 'Port', // added 18.04.2012
+ 'user' : 'användare', // added 18.04.2012
+ 'pass' : 'Lösenord', // added 18.04.2012
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Okänd',
+ 'kindFolder' : 'Mapp',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Trasigt alias',
+ // applications
+ 'kindApp' : 'Applikation',
+ 'kindPostscript' : 'Postscript',
+ 'kindMsOffice' : 'Microsoft Office',
+ 'kindMsWord' : 'Microsoft Word',
+ 'kindMsExcel' : 'Microsoft Excel',
+ 'kindMsPP' : 'Microsoft Powerpoint',
+ 'kindOO' : 'Open Office',
+ 'kindAppFlash' : 'Flash',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent',
+ 'kind7z' : '7z',
+ 'kindTAR' : 'TAR',
+ 'kindGZIP' : 'GZIP',
+ 'kindBZIP' : 'BZIP',
+ 'kindZIP' : 'ZIP',
+ 'kindRAR' : 'RAR',
+ 'kindJAR' : 'Java JAR',
+ 'kindTTF' : 'True Type',
+ 'kindOTF' : 'Open Type',
+ 'kindRPM' : 'RPM',
+ // texts
+ 'kindText' : 'Text',
+ 'kindTextPlain' : 'Plain',
+ 'kindPHP' : 'PHP',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML',
+ 'kindJS' : 'Javascript',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C',
+ 'kindCHeader' : 'C header',
+ 'kindCPP' : 'C++',
+ 'kindCPPHeader' : 'C++ header',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python',
+ 'kindJava' : 'Java',
+ 'kindRuby' : 'Ruby',
+ 'kindPerl' : 'Perl',
+ 'kindSQL' : 'SQL',
+ 'kindXML' : 'XML',
+ 'kindAWK' : 'AWK',
+ 'kindCSV' : 'CSV',
+ 'kindDOCBOOK' : 'Docbook XML',
+ // images
+ 'kindImage' : 'Bild',
+ 'kindBMP' : 'BMP',
+ 'kindJPEG' : 'JPEG',
+ 'kindGIF' : 'GIF',
+ 'kindPNG' : 'PNG',
+ 'kindTIFF' : 'TIFF',
+ 'kindTGA' : 'TGA',
+ 'kindPSD' : 'Adobe Photoshop',
+ 'kindXBITMAP' : 'X bitmap',
+ 'kindPXM' : 'Pixelmator',
+ // media
+ 'kindAudio' : 'Audio media',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Video media',
+ 'kindVideoDV' : 'DV movie',
+ 'kindVideoMPEG' : 'MPEG movie',
+ 'kindVideoMPEG4' : 'MPEG-4 movie',
+ 'kindVideoAVI' : 'AVI movie',
+ 'kindVideoMOV' : 'Quick Time movie',
+ 'kindVideoWM' : 'Windows Media movie',
+ 'kindVideoFlash' : 'Flash movie',
+ 'kindVideoMKV' : 'Matroska movie',
+ 'kindVideoOGG' : 'Ogg movie'
+ }
+ }
+}
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.tr.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.tr.js
new file mode 100644
index 00000000..e0484910
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.tr.js
@@ -0,0 +1,340 @@
+/**
+ * Turkish translation
+ * @author I.Taskinoglu & A.Kaya
+ * @version 2012-06-15
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.tr = {
+ translator : 'I.Taskinoglu & A.Kaya <alikaya@armsyazilim.com>',
+ language : 'Türkçe',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Hata',
+ 'errUnknown' : 'Bilinmeyen hata.',
+ 'errUnknownCmd' : 'Bilinmeyen komut.',
+ 'errJqui' : 'Geçersiz Jquery configurasyonu.',
+ 'errNode' : 'DOM objesine ihtiyaç duyuluyor.',
+ 'errURL' : 'Geçersiz konfigurasyon, URL ayarlanmamış.',
+ 'errAccess' : 'Erişim yok.',
+ 'errConnect' : 'Sunucya bağlanamadı.',
+ 'errAbort' : 'Bağlantı kesildi.',
+ 'errTimeout' : 'Bağlantı zaman aşımına uğradı.',
+ 'errNotFound' : 'Sunucu bulunamadı.',
+ 'errResponse' : 'Sunucu cevabı geçersiz.',
+ 'errConf' : 'Sunucu ayarları geçersiz.',
+ 'errJSON' : 'PHP JSON modülü kurulmamış.',
+ 'errNoVolumes' : 'Okunabilir fiziksel disk yok.',
+ 'errCmdParams' : '"$1" komutu için geçersiz parametre.',
+ 'errDataNotJSON' : 'Veri JSON formatında değil.',
+ 'errDataEmpty' : 'Veri Boş.',
+ 'errCmdReq' : 'Sunucu isteği komut gerektiriyor.',
+ 'errOpen' : '"$1" açılamadı.',
+ 'errNotFolder' : 'Obje Klasör değil.',
+ 'errNotFile' : 'Obje Dosya değil.',
+ 'errRead' : '"$1" okunamadı.',
+ 'errWrite' : '"$1" Dosyasına yazılamadı.',
+ 'errPerm' : 'Yetki Yok.',
+ 'errLocked' : '"$1" dosyası kilitli olduğu için adı değiştirilemedi, taşındı veya silindi.',
+ 'errExists' : '"$1" adlı dosya var zaten.',
+ 'errInvName' : 'Geçersiz dosya adı.',
+ 'errFolderNotFound' : 'Dizin bulunamadı.',
+ 'errFileNotFound' : 'Dosya bulunamadı.',
+ 'errTrgFolderNotFound' : 'Hedef klasör ["$1"] bulunamadı.',
+ 'errPopup' : 'İnternet gezgininiz açılır pencereleri engellememeli. Ayarlardan izin verip tekrar deneyin.',
+ 'errMkdir' : '"$1" dizin oluşturulamadı.',
+ 'errMkfile' : '"$1" dosya oluşturulamadı.',
+ 'errRename' : '"$1" adı değiştirilemedi.',
+ 'errCopyFrom' : '"$1" dizininden kopyalamaya izin verilmedi.',
+ 'errCopyTo' : '"$1" dizinine kopyalamaya izin verilmedi.',
+ 'errUploadCommon' : 'Dosya gönderme hatası.',
+ 'errUpload' : '"$1" dosya gönderilemedi.',
+ 'errUploadNoFiles' : 'Göndermek için dosya bulunamadı.',
+ 'errMaxSize' : 'Data izin verilen boyuttan büyük.',
+ 'errFileMaxSize' : 'Dosya izin verilen boyuttan büyük.',
+ 'errUploadMime' : 'Dosya tipine izin verilmiyor.',
+ 'errUploadTransfer' : '"$1" transfer hatası.',
+ 'errSave' : '"$1" kaydedilemez.',
+ 'errCopy' : '"$1" kopylanamaz.',
+ 'errMove' : '"$1" taşınamaz.',
+ 'errCopyInItself' : '"$1" kendi içinde kopyalanamaz.',
+ 'errRm' : '"$1" silinemedi.',
+ 'errExtract' : '"$1" arşivi açılamadı.',
+ 'errArchive' : 'Arşiv oluşturulamadı.',
+ 'errArcType' : 'Desteklenmeyen Arşiv Tipi.',
+ 'errNoArchive' : 'Dosya arşiv değil veya desteklenmiyor.',
+ 'errCmdNoSupport' : 'Bu komut desteklenmiyor.',
+ 'errReplByChild' : 'Klasör “$1” içerdiği dosyadan dolayı değiştirilemedi',
+ 'errArcSymlinks' : 'Güvenlik nedeni ile arşiv açılamadı.',
+ 'errArcMaxSize' : 'Arşiv dosyası izin verilen maksimum boyutun üstünde.',
+ 'errResize' : 'Boyutlandırılamadı "$1".',
+ 'errUsupportType' : 'Desteklenmeyen Dosya Tipi.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Arşiv Oluştur',
+ 'cmdback' : 'Geri',
+ 'cmdcopy' : 'Kopyala',
+ 'cmdcut' : 'Kes',
+ 'cmddownload' : 'İndir',
+ 'cmdduplicate' : 'Dosyayı Çoğalt',
+ 'cmdedit' : 'Dosyayı Düzenle',
+ 'cmdextract' : 'Dosyaları Arşivden Çıkar',
+ 'cmdforward' : 'İleri',
+ 'cmdgetfile' : 'Dosyayı Seç',
+ 'cmdhelp' : 'elFinde Hakkında',
+ 'cmdhome' : 'Ana Sayfa',
+ 'cmdinfo' : 'Bilgi',
+ 'cmdmkdir' : 'Yeni Klasör',
+ 'cmdmkfile' : 'Yeni Boş Dosya',
+ 'cmdopen' : 'Aç',
+ 'cmdpaste' : 'Yapıştır',
+ 'cmdquicklook' : 'Önizleme',
+ 'cmdreload' : 'Yenile',
+ 'cmdrename' : 'Adını Değiştir',
+ 'cmdrm' : 'Sil',
+ 'cmdsearch' : 'Dosya Ara',
+ 'cmdup' : 'Üst Klasöre Git',
+ 'cmdupload' : 'Dosya Gönder',
+ 'cmdview' : 'Aç',
+ 'cmdresize' : 'Resmi Yeniden Boyutlandır',
+ 'cmdsort' : 'Sırala',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Kapat',
+ 'btnSave' : 'Kaydet',
+ 'btnRm' : 'Sil',
+ 'btnApply' : 'Uygula',
+ 'btnCancel' : 'Vazgeç',
+ 'btnNo' : 'Hayır',
+ 'btnYes' : 'Evet',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Klasör Aç',
+ 'ntffile' : 'Dosya Aç',
+ 'ntfreload' : 'Klasörü Yenile',
+ 'ntfmkdir' : 'Klasör Oluşuturuluyor',
+ 'ntfmkfile' : 'Dosya Oluşturuluyor',
+ 'ntfrm' : 'Dosyaları Sil',
+ 'ntfcopy' : 'Dosyaları Kopyala',
+ 'ntfmove' : 'Dosyaları Taşı',
+ 'ntfprepare' : 'Kopyalamak için Hazırla',
+ 'ntfrename' : 'Dosyaları Adlandır',
+ 'ntfupload' : 'Dosyalar Yükleniyor',
+ 'ntfdownload' : 'Dosyalar İndiriliyor',
+ 'ntfsave' : 'Dosyalar Kaydediliyor',
+ 'ntfarchive' : 'Arşiv Oluşturuluyor',
+ 'ntfextract' : 'Dosyalar Arşivde Çıkarılıyor',
+ 'ntfsearch' : 'Dosyalar Aranıyor',
+ 'ntfsmth' : 'Birşeyler Yapılıyor >_<',
+ 'ntfloadimg' : 'Resim Yükleniyor',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'bilinmiyor',
+ 'Today' : 'Bugün',
+ 'Yesterday' : 'Dün',
+ 'Jan' : 'Oca',
+ 'Feb' : 'Şub',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Nis',
+ 'May' : 'May',
+ 'Jun' : 'Haz',
+ 'Jul' : 'Tem',
+ 'Aug' : 'Ağu',
+ 'Sep' : 'Eyl',
+ 'Oct' : 'Ekm',
+ 'Nov' : 'Kas',
+ 'Dec' : 'Ara',
+ 'January' : 'Ocak',
+ 'February' : 'Şubat',
+ 'March' : 'Mart',
+ 'April' : 'Nisan',
+ 'May' : 'Mayıs',
+ 'June' : 'Haziran',
+ 'July' : 'Temmuz',
+ 'August' : 'Ağustos',
+ 'September' : 'Eylül',
+ 'October' : 'Ekim',
+ 'November' : 'Kasım',
+ 'December' : 'Aralık',
+ 'Sunday' : 'Pazar',
+ 'Monday' : 'Pazartesi',
+ 'Tuesday' : 'Salı',
+ 'Wednesday' : 'Çarşamba',
+ 'Thursday' : 'Perşembe',
+ 'Friday' : 'Cuma',
+ 'Saturday' : 'Cumartesi',
+ 'Sun' : 'Paz',
+ 'Mon' : 'Pzt',
+ 'Tue' : 'Sal',
+ 'Wed' : 'Çar',
+ 'Thu' : 'Per',
+ 'Fri' : 'Cum',
+ 'Sat' : 'Cmt',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'Ada göre (önce klasörler)',
+ 'sortkindDirsFirst' : 'Türe göre (önce klasörler)',
+ 'sortsizeDirsFirst' : 'Boyuta göre (önce klasörler)',
+ 'sortdateDirsFirst' : 'Tarihe göre (önce klasörler)',
+ 'sortname' : 'Ada göre',
+ 'sortkind' : 'Türe göre',
+ 'sortsize' : 'Boyuta göre',
+ 'sortdate' : 'Tarihe göre',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Onay gerekli',
+ 'confirmRm' : 'Dosyaları silmek istediğinize emin misiniz? Bu geri alınamaz!',
+ 'confirmRepl' : 'Eski dosyaları yenileriyle değiştir?',
+ 'apllyAll' : 'Tümünü uygula',
+ 'name' : 'Ad',
+ 'size' : 'Boyut',
+ 'perms' : 'Yetkiler',
+ 'modify' : 'Değiştildi',
+ 'kind' : 'Tür',
+ 'read' : 'oku',
+ 'write' : 'yaz',
+ 'noaccess' : 'yetki yok',
+ 'and' : 've',
+ 'unknown' : 'bilinmeyen',
+ 'selectall' : 'Tüm Dosyaları Seç',
+ 'selectfiles' : 'Dosyaları Seç',
+ 'selectffile' : 'İlk Dosyayı Seç',
+ 'selectlfile' : 'Son Dosyayı Seç',
+ 'viewlist' : 'Liste görünümü',
+ 'viewicons' : 'İkon görünümü',
+ 'places' : 'Klasörler',
+ 'calc' : 'Hesapla',
+ 'path' : 'Dizin',
+ 'aliasfor' : 'Takma adı :',
+ 'locked' : 'Kilitli',
+ 'dim' : 'Ölçüler',
+ 'files' : 'Dosyalar',
+ 'folders' : 'Klasörler',
+ 'items' : 'Nesneler',
+ 'yes' : 'evet',
+ 'no' : 'hayır',
+ 'link' : 'Bağlantı',
+ 'searcresult' : 'Arama Sonuçları',
+ 'selected' : 'Şeçili Nesne',
+ 'about' : 'Hakkında',
+ 'shortcuts' : 'Kısayollar',
+ 'help' : 'Yardım',
+ 'webfm' : 'Dosya Yöneticisi',
+ 'ver' : 'Versiyon',
+ 'protocol' : 'protocol versiyonu',
+ 'homepage' : 'Proje Ana Sayfası',
+ 'docs' : 'Yardım',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'twittwer da takip et',
+ 'facebook' : 'facebookda bize katıl',
+ 'team' : 'Takım',
+ 'chiefdev' : 'Yapımcı',
+ 'developer' : 'yapımcı',
+ 'contributor' : 'katkı',
+ 'maintainer' : 'geliştirici',
+ 'translator' : 'çeviri',
+ 'icons' : 'İkonlar',
+ 'dontforget' : 'Ve... havlunuzu almayı unutmayın',
+ 'shortcutsof' : 'Kısayollar Kapalı',
+ 'dropFiles' : 'Dosyaları buraya sürükleyin',
+ 'or' : 'veya',
+ 'selectForUpload' : 'Yüklenecek Dosyaları Seçin',
+ 'moveFiles' : 'Dosyaları Taşı',
+ 'copyFiles' : 'Dosyaları Kopyala',
+ 'rmFromPlaces' : 'Klasörlerden Sil',
+ 'untitled folder' : 'basliksiz_klasor',
+ 'untitled file.txt' : 'basliksiz_dosya.txt',
+ 'aspectRatio' : 'Oran',
+ 'scale' : 'Ölçekle',
+ 'width' : 'Genişlik',
+ 'height' : 'Yükseklik',
+ 'mode' : 'Mod',
+ 'resize' : 'Boyutlandır',
+ 'crop' : 'Kes',
+ 'rotate' : 'Döndür',
+ 'rotate-cw' : '90 Derece Sağa Döndür',
+ 'rotate-ccw' : '90 Derece Sola Döndür',
+ 'degree' : 'Açı',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Bilinmiyor',
+ 'kindFolder' : 'Klasör',
+ 'kindAlias' : 'Takma Ad',
+ 'kindAliasBroken' : 'Bozuk Takma Ad',
+ // applications
+ 'kindApp' : 'Uygulama',
+ 'kindPostscript' : 'Postscript Döküman',
+ 'kindMsOffice' : 'Microsoft Office Dökümanı',
+ 'kindMsWord' : 'Microsoft Word Dökümanı',
+ 'kindMsExcel' : 'Microsoft Excel Dökümanı',
+ 'kindMsPP' : 'Microsoft Powerpoint Sunum',
+ 'kindOO' : 'Open Office Dökümanı',
+ 'kindAppFlash' : 'Flash Uygulaması',
+ 'kindPDF' : 'Adobe Acrobat (PDF)',
+ 'kindTorrent' : 'Bittorrent dosyası',
+ 'kind7z' : '7z arşivi',
+ 'kindTAR' : 'TAR arşivi',
+ 'kindGZIP' : 'GZIP arşivi',
+ 'kindBZIP' : 'BZIP arşivi',
+ 'kindZIP' : 'ZIP arşivi',
+ 'kindRAR' : 'RAR arşivi',
+ 'kindJAR' : 'Java JAR dosyası',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM paketi',
+ // texts
+ 'kindText' : 'Text Dökümanı',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP dosyası',
+ 'kindCSS' : 'CSS dosyası',
+ 'kindHTML' : 'HTML dosyası',
+ 'kindJS' : 'Javascript dosyası',
+ 'kindRTF' : 'RTF dosyası',
+ 'kindC' : 'C dosyası',
+ 'kindCHeader' : 'C başlık dosyası',
+ 'kindCPP' : 'C++ dosyası',
+ 'kindCPPHeader' : 'C++ başlık dosyası',
+ 'kindShell' : 'Unix shell dosyası',
+ 'kindPython' : 'Python dosyası',
+ 'kindJava' : 'Java dosyası',
+ 'kindRuby' : 'Ruby dosyası',
+ 'kindPerl' : 'Perl dosyası',
+ 'kindSQL' : 'SQL dosyası',
+ 'kindXML' : 'XML dosyası',
+ 'kindAWK' : 'AWK dosyası',
+ 'kindCSV' : 'CSV dosyası',
+ 'kindDOCBOOK' : 'Docbook XML dosyası',
+ // images
+ 'kindImage' : 'Resim',
+ 'kindBMP' : 'BMP Resim',
+ 'kindJPEG' : 'JPEG Resim',
+ 'kindGIF' : 'GIF Resim',
+ 'kindPNG' : 'PNG Resim',
+ 'kindTIFF' : 'TIFF Resim',
+ 'kindTGA' : 'TGA Resim',
+ 'kindPSD' : 'Adobe Photoshop Resim',
+ 'kindXBITMAP' : 'X bitmap Resim',
+ 'kindPXM' : 'Pixelmator Resim',
+ // media
+ 'kindAudio' : 'Ses Dosyası',
+ 'kindAudioMPEG' : 'MPEG ses',
+ 'kindAudioMPEG4' : 'MPEG-4 ses',
+ 'kindAudioMIDI' : 'MIDI ses',
+ 'kindAudioOGG' : 'Ogg Vorbis ses',
+ 'kindAudioWAV' : 'WAV ses',
+ 'AudioPlaylist' : 'MP3 Çalma Listesi',
+ 'kindVideo' : 'Video Dosyası',
+ 'kindVideoDV' : 'DV video',
+ 'kindVideoMPEG' : 'MPEG video',
+ 'kindVideoMPEG4' : 'MPEG-4 video',
+ 'kindVideoAVI' : 'AVI video',
+ 'kindVideoMOV' : 'Quick Time video',
+ 'kindVideoWM' : 'Windows Media video',
+ 'kindVideoFlash' : 'Flash video',
+ 'kindVideoMKV' : 'Matroska video',
+ 'kindVideoOGG' : 'Ogg video'
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.vi.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.vi.js
new file mode 100644
index 00000000..d34f7dc7
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.vi.js
@@ -0,0 +1,340 @@
+/**
+ * Vietnamese translation
+ * @author Chung Thủy f
+ * @version 16-01-2013
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.vi = {
+ translator : 'Chung Thủy f <chungthuyf@gmail.com>',
+ language : 'Ngôn ngữ Việt Nam',
+ direction : 'ltr',
+ dateFormat : 'd.m.Y H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : 'Lỗi',
+ 'errUnknown' : 'Lỗi không xác định được.',
+ 'errUnknownCmd' : 'Lỗi không rõ lệnh.',
+ 'errJqui' : 'Invalid jQuery UI configuration. Selectable, draggable and droppable components must be included.',
+ 'errNode' : 'elFinder requires DOM Element to be created.',
+ 'errURL' : 'Cấu elFinder không hợp lệ! URL không được thiết lập tùy chọn.',
+ 'errAccess' : 'Truy cập bị từ chối.',
+ 'errConnect' : 'Unable to connect to backend.',
+ 'errAbort' : 'Kết nối bị hủy bỏ.',
+ 'errTimeout' : 'Connection timeout.',
+ 'errNotFound' : 'Backend not found.',
+ 'errResponse' : 'Invalid backend response.',
+ 'errConf' : 'Invalid backend configuration.',
+ 'errJSON' : 'PHP JSON module not installed.',
+ 'errNoVolumes' : 'Readable volumes not available.',
+ 'errCmdParams' : 'Invalid parameters for command "$1".',
+ 'errDataNotJSON' : 'Data is not JSON.',
+ 'errDataEmpty' : 'Data is empty.',
+ 'errCmdReq' : 'Backend request requires command name.',
+ 'errOpen' : 'Unable to open "$1".',
+ 'errNotFolder' : 'Object is not a folder.',
+ 'errNotFile' : 'Object is not a file.',
+ 'errRead' : 'Unable to read "$1".',
+ 'errWrite' : 'Unable to write into "$1".',
+ 'errPerm' : 'Permission denied.',
+ 'errLocked' : '"$1" is locked and can not be renamed, moved or removed.',
+ 'errExists' : 'File named "$1" already exists.',
+ 'errInvName' : 'Invalid file name.',
+ 'errFolderNotFound' : 'Folder not found.',
+ 'errFileNotFound' : 'File not found.',
+ 'errTrgFolderNotFound' : 'Target folder "$1" not found.',
+ 'errPopup' : 'Browser prevented opening popup window. To open file enable it in browser options.',
+ 'errMkdir' : 'Unable to create folder "$1".',
+ 'errMkfile' : 'Unable to create file "$1".',
+ 'errRename' : 'Unable to rename "$1".',
+ 'errCopyFrom' : 'Copying files from volume "$1" not allowed.',
+ 'errCopyTo' : 'Copying files to volume "$1" not allowed.',
+ 'errUploadCommon' : 'Upload error.',
+ 'errUpload' : 'Unable to upload "$1".',
+ 'errUploadNoFiles' : 'No files found for upload.',
+ 'errMaxSize' : 'Data exceeds the maximum allowed size.',
+ 'errFileMaxSize' : 'File exceeds maximum allowed size.',
+ 'errUploadMime' : 'File type not allowed.',
+ 'errUploadTransfer' : '"$1" transfer error.',
+ 'errSave' : 'Unable to save "$1".',
+ 'errCopy' : 'Unable to copy "$1".',
+ 'errMove' : 'Unable to move "$1".',
+ 'errCopyInItself' : 'Unable to copy "$1" into itself.',
+ 'errRm' : 'Unable to remove "$1".',
+ 'errExtract' : 'Unable to extract files from "$1".',
+ 'errArchive' : 'Unable to create archive.',
+ 'errArcType' : 'Unsupported archive type.',
+ 'errNoArchive' : 'File is not archive or has unsupported archive type.',
+ 'errCmdNoSupport' : 'Backend does not support this command.',
+ 'errReplByChild' : 'The folder “$1” can’t be replaced by an item it contains.',
+ 'errArcSymlinks' : 'For security reason denied to unpack archives contains symlinks.',
+ 'errArcMaxSize' : 'Archive files exceeds maximum allowed size.',
+ 'errResize' : 'Unable to resize "$1".',
+ 'errUsupportType' : 'Unsupported file type.',
+
+ /******************************* commands names ********************************/
+ 'cmdarchive' : 'Tạo tập tin nén',
+ 'cmdback' : 'Trở lại',
+ 'cmdcopy' : 'Sao chép',
+ 'cmdcut' : 'Cắt',
+ 'cmddownload' : 'Tải về',
+ 'cmdduplicate' : 'Bản sao',
+ 'cmdedit' : 'Sửa tập tin',
+ 'cmdextract' : 'Giải nén tập tin',
+ 'cmdforward' : 'Trước',
+ 'cmdgetfile' : 'Chọn tập tin',
+ 'cmdhelp' : 'Giới thiệu phần mềm',
+ 'cmdhome' : 'Home',
+ 'cmdinfo' : 'Thông tin',
+ 'cmdmkdir' : 'Thư mục',
+ 'cmdmkfile' : 'Tạo tập tin Text',
+ 'cmdopen' : 'Mở',
+ 'cmdpaste' : 'Paste',
+ 'cmdquicklook' : 'Xem trước',
+ 'cmdreload' : 'Nạp lại',
+ 'cmdrename' : 'Đổi tên',
+ 'cmdrm' : 'Xóa',
+ 'cmdsearch' : 'Tìm tập tin',
+ 'cmdup' : 'Go to parent directory',
+ 'cmdupload' : 'Tải tập tin lên',
+ 'cmdview' : 'Xem',
+ 'cmdresize' : 'Resize image',
+ 'cmdsort' : 'Sắp xếp',
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : 'Đóng',
+ 'btnSave' : 'Lưu',
+ 'btnRm' : 'Gỡ bỏ',
+ 'btnApply' : 'Áp dụng',
+ 'btnCancel' : 'Hủy bỏ',
+ 'btnNo' : 'Không',
+ 'btnYes' : 'Đồng ý',
+
+ /******************************** notifications ********************************/
+ 'ntfopen' : 'Mở thư mục',
+ 'ntffile' : 'Mở tập tin',
+ 'ntfreload' : 'Nạp lại nội dung thư mục',
+ 'ntfmkdir' : 'Tạo thư mục',
+ 'ntfmkfile' : 'Tạo tập tin',
+ 'ntfrm' : 'Xóa tập tin',
+ 'ntfcopy' : 'Sao chép tập tin',
+ 'ntfmove' : 'Di chuyển tập tin',
+ 'ntfprepare' : 'Chuẩn bị để sao chép các tập tin',
+ 'ntfrename' : 'Đổi tên tập tin',
+ 'ntfupload' : 'Tải tập tin lên',
+ 'ntfdownload' : 'Tải tập tin',
+ 'ntfsave' : 'Lưu tập tin',
+ 'ntfarchive' : 'Tạo tập tin nén',
+ 'ntfextract' : 'Giải nén tập tin',
+ 'ntfsearch' : 'Tìm kiếm tập tin',
+ 'ntfsmth' : 'Doing something >_<',
+ 'ntfloadimg' : 'Đang tải hình ảnh',
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : 'Chưa biết',
+ 'Today' : 'Hôm nay',
+ 'Yesterday' : 'Yesterday',
+ 'Jan' : 'Jan',
+ 'Feb' : 'Feb',
+ 'Mar' : 'Mar',
+ 'Apr' : 'Apr',
+ 'May' : 'May',
+ 'Jun' : 'Jun',
+ 'Jul' : 'Jul',
+ 'Aug' : 'Aug',
+ 'Sep' : 'Sep',
+ 'Oct' : 'Oct',
+ 'Nov' : 'Nov',
+ 'Dec' : 'Dec',
+ 'January' : 'January',
+ 'February' : 'February',
+ 'March' : 'March',
+ 'April' : 'April',
+ 'May' : 'May',
+ 'June' : 'June',
+ 'July' : 'July',
+ 'August' : 'August',
+ 'September' : 'September',
+ 'October' : 'October',
+ 'November' : 'November',
+ 'December' : 'December',
+ 'Sunday' : 'Sunday',
+ 'Monday' : 'Monday',
+ 'Tuesday' : 'Tuesday',
+ 'Wednesday' : 'Wednesday',
+ 'Thursday' : 'Thursday',
+ 'Friday' : 'Friday',
+ 'Saturday' : 'Saturday',
+ 'Sun' : 'Sun',
+ 'Mon' : 'Mon',
+ 'Tue' : 'Tue',
+ 'Wed' : 'Wed',
+ 'Thu' : 'Thu',
+ 'Fri' : 'Fri',
+ 'Sat' : 'Sat',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : 'by name (folders first)',
+ 'sortkindDirsFirst' : 'by kind (folders first)',
+ 'sortsizeDirsFirst' : 'by size (folders first)',
+ 'sortdateDirsFirst' : 'by date (folders first)',
+ 'sortname' : 'by name',
+ 'sortkind' : 'by kind',
+ 'sortsize' : 'by size',
+ 'sortdate' : 'by date',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : 'Confirmation required',
+ 'confirmRm' : 'Are you sure you want to remove files? This cannot be undone!',
+ 'confirmRepl' : 'Replace old file with new one?',
+ 'apllyAll' : 'Apply to all',
+ 'name' : 'Name',
+ 'size' : 'Size',
+ 'perms' : 'Permissions',
+ 'modify' : 'Modified',
+ 'kind' : 'Kind',
+ 'read' : 'read',
+ 'write' : 'write',
+ 'noaccess' : 'no access',
+ 'and' : 'and',
+ 'unknown' : 'unknown',
+ 'selectall' : 'Select all files',
+ 'selectfiles' : 'Select file(s)',
+ 'selectffile' : 'Select first file',
+ 'selectlfile' : 'Select last file',
+ 'viewlist' : 'List view',
+ 'viewicons' : 'Icons view',
+ 'places' : 'Places',
+ 'calc' : 'Calculate',
+ 'path' : 'Path',
+ 'aliasfor' : 'Alias for',
+ 'locked' : 'Locked',
+ 'dim' : 'Dimensions',
+ 'files' : 'Files',
+ 'folders' : 'Folders',
+ 'items' : 'Items',
+ 'yes' : 'yes',
+ 'no' : 'no',
+ 'link' : 'Link',
+ 'searcresult' : 'Search results',
+ 'selected' : 'selected items',
+ 'about' : 'About',
+ 'shortcuts' : 'Shortcuts',
+ 'help' : 'Help',
+ 'webfm' : 'Web file manager',
+ 'ver' : 'Version',
+ 'protocol' : 'protocol version',
+ 'homepage' : 'Project home',
+ 'docs' : 'Documentation',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Follow us on twitter',
+ 'facebook' : 'Join us on facebook',
+ 'team' : 'Team',
+ 'chiefdev' : 'chief developer',
+ 'developer' : 'developer',
+ 'contributor' : 'contributor',
+ 'maintainer' : 'maintainer',
+ 'translator' : 'translator',
+ 'icons' : 'Icons',
+ 'dontforget' : 'and don\'t forget to take your towel',
+ 'shortcutsof' : 'Shortcuts disabled',
+ 'dropFiles' : 'Drop files here',
+ 'or' : 'or',
+ 'selectForUpload' : 'Select files to upload',
+ 'moveFiles' : 'Move files',
+ 'copyFiles' : 'Copy files',
+ 'rmFromPlaces' : 'Remove from places',
+ 'untitled folder' : 'untitled folder',
+ 'untitled file.txt' : 'untitled file.txt',
+ 'aspectRatio' : 'Aspect ratio',
+ 'scale' : 'Scale',
+ 'width' : 'Width',
+ 'height' : 'Height',
+ 'mode' : 'Mode',
+ 'resize' : 'Resize',
+ 'crop' : 'Crop',
+ 'rotate' : 'Rotate',
+ 'rotate-cw' : 'Rotate 90 degrees CW',
+ 'rotate-ccw' : 'Rotate 90 degrees CCW',
+ 'degree' : 'Degree',
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : 'Unknown',
+ 'kindFolder' : 'Folder',
+ 'kindAlias' : 'Alias',
+ 'kindAliasBroken' : 'Broken alias',
+ // applications
+ 'kindApp' : 'Application',
+ 'kindPostscript' : 'Postscript document',
+ 'kindMsOffice' : 'Microsoft Office document',
+ 'kindMsWord' : 'Microsoft Word document',
+ 'kindMsExcel' : 'Microsoft Excel document',
+ 'kindMsPP' : 'Microsoft Powerpoint presentation',
+ 'kindOO' : 'Open Office document',
+ 'kindAppFlash' : 'Flash application',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent file',
+ 'kind7z' : '7z archive',
+ 'kindTAR' : 'TAR archive',
+ 'kindGZIP' : 'GZIP archive',
+ 'kindBZIP' : 'BZIP archive',
+ 'kindZIP' : 'ZIP archive',
+ 'kindRAR' : 'RAR archive',
+ 'kindJAR' : 'Java JAR file',
+ 'kindTTF' : 'True Type font',
+ 'kindOTF' : 'Open Type font',
+ 'kindRPM' : 'RPM package',
+ // texts
+ 'kindText' : 'Text document',
+ 'kindTextPlain' : 'Plain text',
+ 'kindPHP' : 'PHP source',
+ 'kindCSS' : 'Cascading style sheet',
+ 'kindHTML' : 'HTML document',
+ 'kindJS' : 'Javascript source',
+ 'kindRTF' : 'Rich Text Format',
+ 'kindC' : 'C source',
+ 'kindCHeader' : 'C header source',
+ 'kindCPP' : 'C++ source',
+ 'kindCPPHeader' : 'C++ header source',
+ 'kindShell' : 'Unix shell script',
+ 'kindPython' : 'Python source',
+ 'kindJava' : 'Java source',
+ 'kindRuby' : 'Ruby source',
+ 'kindPerl' : 'Perl script',
+ 'kindSQL' : 'SQL source',
+ 'kindXML' : 'XML document',
+ 'kindAWK' : 'AWK source',
+ 'kindCSV' : 'Comma separated values',
+ 'kindDOCBOOK' : 'Docbook XML document',
+ // images
+ 'kindImage' : 'Image',
+ 'kindBMP' : 'BMP image',
+ 'kindJPEG' : 'JPEG image',
+ 'kindGIF' : 'GIF Image',
+ 'kindPNG' : 'PNG Image',
+ 'kindTIFF' : 'TIFF image',
+ 'kindTGA' : 'TGA image',
+ 'kindPSD' : 'Adobe Photoshop image',
+ 'kindXBITMAP' : 'X bitmap image',
+ 'kindPXM' : 'Pixelmator image',
+ // media
+ 'kindAudio' : 'Audio media',
+ 'kindAudioMPEG' : 'MPEG audio',
+ 'kindAudioMPEG4' : 'MPEG-4 audio',
+ 'kindAudioMIDI' : 'MIDI audio',
+ 'kindAudioOGG' : 'Ogg Vorbis audio',
+ 'kindAudioWAV' : 'WAV audio',
+ 'AudioPlaylist' : 'MP3 playlist',
+ 'kindVideo' : 'Video media',
+ 'kindVideoDV' : 'DV movie',
+ 'kindVideoMPEG' : 'MPEG movie',
+ 'kindVideoMPEG4' : 'MPEG-4 movie',
+ 'kindVideoAVI' : 'AVI movie',
+ 'kindVideoMOV' : 'Quick Time movie',
+ 'kindVideoWM' : 'Windows Media movie',
+ 'kindVideoFlash' : 'Flash movie',
+ 'kindVideoMKV' : 'Matroska movie',
+ 'kindVideoOGG' : 'Ogg movie'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.zh_CN.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.zh_CN.js
new file mode 100644
index 00000000..72680154
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.zh_CN.js
@@ -0,0 +1,354 @@
+/**
+ * Simplified Chinese translation
+ * @author deerchao
+ * @author Andy Hu
+ * @version 2013-01-29
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.zh_CN = {
+ translator : '翻译者 deerchao <deerchao@gmail.com>, Andy Hu <andyhu7@yahoo.com.hk>',
+ language : '简体中文',
+ direction : 'ltr',
+ dateFormat : 'Y-m-d H:i',
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : '错误',
+ 'errUnknown' : '未知的错误.',
+ 'errUnknownCmd' : '未知的命令.',
+ 'errJqui' : '无效的 jQuery UI 配置. 必须包含 Selectable, draggable 以及 droppable 组件.',
+ 'errNode' : 'elFinder 需要能创建 DOM 元素.',
+ 'errURL' : '无效的 elFinder 配置! URL 选项未配置.',
+ 'errAccess' : '访问被拒绝.',
+ 'errConnect' : '不能连接到后端.',
+ 'errAbort' : '连接中止.',
+ 'errTimeout' : '连接超时.',
+ 'errNotFound' : '未找到后端.',
+ 'errResponse' : '无效的后端响应.',
+ 'errConf' : '无效的后端配置.',
+ 'errJSON' : 'PHP JSON 模块未安装.',
+ 'errNoVolumes' : '无可读的卷.',
+ 'errCmdParams' : '无效的参数, 命令: "$1".',
+ 'errDataNotJSON' : '响应不符合 JSON 格式.',
+ 'errDataEmpty' : '响应为空.',
+ 'errCmdReq' : '后端请求需要命令名称.',
+ 'errOpen' : '无法打开 "$1".',
+ 'errNotFolder' : '对象不是文件夹.',
+ 'errNotFile' : '对象不是文件.',
+ 'errRead' : '无法读取 "$1".',
+ 'errWrite' : '无法写入 "$1".',
+ 'errPerm' : '无权限.',
+ 'errLocked' : '"$1" 被锁定,不能重命名, 移动或删除.',
+ 'errExists' : '文件 "$1" 已经存在了.',
+ 'errInvName' : '无效的文件名.',
+ 'errFolderNotFound' : '未找到文件夹.',
+ 'errFileNotFound' : '未找到文件.',
+ 'errTrgFolderNotFound' : '未找到目标文件夹 "$1".',
+ 'errPopup' : '浏览器拦截了弹出窗口. 请在选项中允许弹出窗口.',
+ 'errMkdir' : '不能创建文件夹 "$1".',
+ 'errMkfile' : '不能创建文件 "$1".',
+ 'errRename' : '不能重命名 "$1".',
+ 'errCopyFrom' : '不允许从卷 "$1" 复制.',
+ 'errCopyTo' : '不允许向卷 "$1" 复制.',
+ 'errUpload' : '上传出错.',
+ 'errUploadFile' : '无法上传 "$1".',
+ 'errUploadNoFiles' : '未找到要上传的文件.',
+ 'errUploadTotalSize' : '数据超过了允许的最大大小.',
+ 'errUploadFileSize' : '文件超过了允许的最大大小.',
+ 'errUploadMime' : '不允许的文件类型.',
+ 'errUploadTransfer' : '"$1" 传输错误.',
+ 'errNotReplace' : '对象 "$1" 已经在此位置存在, 不能被其他对象替换.', // new
+ 'errReplace' : '无法替换 "$1".',
+ 'errSave' : '无法保存 "$1".',
+ 'errCopy' : '无法复制 "$1".',
+ 'errMove' : '无法移动 "$1".',
+ 'errCopyInItself' : '不能移动 "$1" 到原有位置.',
+ 'errRm' : '无法删除 "$1".',
+ 'errRmSrc' : '不能删除源文件.',
+ 'errExtract' : '无法从 "$1" 提取文件.',
+ 'errArchive' : '无法创建压缩包.',
+ 'errArcType' : '不支持的压缩格式.',
+ 'errNoArchive' : '文件不是压缩包, 或者不支持该压缩格式.',
+ 'errCmdNoSupport' : '后端不支持该命令.',
+ 'errReplByChild' : '文件夹 “$1” 不能被它所包含的项目替换.',
+ 'errArcSymlinks' : '出于安全上的考虑,不允许解压包含符号链接的压缩包.',
+ 'errArcMaxSize' : '压缩包文件超过最大允许文件大小范围.',
+ 'errResize' : '无法重新调整大小 "$1".',
+ 'errUsupportType' : '不被支持的文件格式.',
+ 'errNotUTF8Content' : '文件 "$1" 不是 UTF-8 格式, 不能编辑.', // added 9.11.2011
+ 'errNetMount' : '无法装载 "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : '不支持该协议.', // added 17.04.2012
+ 'errNetMountFailed' : '装载失败.', // added 17.04.2012
+ 'errNetMountHostReq' : '需要指定主机.', // added 18.04.2012
+ /******************************* commands names ********************************/
+ 'cmdarchive' : '创建压缩包',
+ 'cmdback' : '后退',
+ 'cmdcopy' : '复制',
+ 'cmdcut' : '剪切',
+ 'cmddownload' : '下载',
+ 'cmdduplicate' : '创建复本',
+ 'cmdedit' : '编辑文件',
+ 'cmdextract' : '从压缩包提取文件',
+ 'cmdforward' : '前进',
+ 'cmdgetfile' : '选择文件',
+ 'cmdhelp' : '关于本软件',
+ 'cmdhome' : '首页',
+ 'cmdinfo' : '查看信息',
+ 'cmdmkdir' : '新建文件夹',
+ 'cmdmkfile' : '新建文本文件',
+ 'cmdopen' : '打开',
+ 'cmdpaste' : '粘贴',
+ 'cmdquicklook' : '预览',
+ 'cmdreload' : '刷新',
+ 'cmdrename' : '重命名',
+ 'cmdrm' : '删除',
+ 'cmdsearch' : '查找文件',
+ 'cmdup' : '转到上一级文件夹',
+ 'cmdupload' : '上传文件',
+ 'cmdview' : '查看',
+ 'cmdresize' : '重新调整大小',
+ 'cmdsort' : '排序',
+ 'cmdnetmount' : '装载网络卷', // added 18.04.2012
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : '关闭',
+ 'btnSave' : '保存',
+ 'btnRm' : '删除',
+ 'btnApply' : '应用',
+ 'btnCancel' : '取消',
+ 'btnNo' : '否',
+ 'btnYes' : '是',
+ 'btnMount' : '装载', // added 18.04.2012
+ /******************************** notifications ********************************/
+ 'ntfopen' : '打开文件夹',
+ 'ntffile' : '打开文件',
+ 'ntfreload' : '刷新文件夹内容',
+ 'ntfmkdir' : '创建文件夹',
+ 'ntfmkfile' : '创建文件',
+ 'ntfrm' : '删除文件',
+ 'ntfcopy' : '复制文件',
+ 'ntfmove' : '移动文件',
+ 'ntfprepare' : '准备复制文件',
+ 'ntfrename' : '重命名文件',
+ 'ntfupload' : '上传文件',
+ 'ntfdownload' : '下载文件',
+ 'ntfsave' : '保存文件',
+ 'ntfarchive' : '创建压缩包',
+ 'ntfextract' : '从压缩包提取文件',
+ 'ntfsearch' : '搜索文件',
+ 'ntfresize' : '正在更改尺寸',
+ 'ntfsmth' : '正在忙 >_<',
+ 'ntfloadimg' : '正在加载图片',
+ 'ntfnetmount' : '正在装载网络卷', // added 18.04.2012
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : '未知',
+ 'Today' : '今天',
+ 'Yesterday' : '昨天',
+ 'Jan' : '一月',
+ 'Feb' : '二月',
+ 'Mar' : '三月',
+ 'Apr' : '四月',
+ 'May' : '五月',
+ 'Jun' : '六月',
+ 'Jul' : '七月',
+ 'Aug' : '八月',
+ 'Sep' : '九月',
+ 'Oct' : '十月',
+ 'Nov' : '十一月',
+ 'Dec' : '十二月',
+ 'January' : '一月',
+ 'February' : '二月',
+ 'March' : '三月',
+ 'April' : '四月',
+ 'May' : '五月',
+ 'June' : '六月',
+ 'July' : '七月',
+ 'August' : '八月',
+ 'September' : '九月',
+ 'October' : '十月',
+ 'November' : '十一月',
+ 'December' : '十二月',
+ 'Sunday' : '星期日',
+ 'Monday' : '星期一',
+ 'Tuesday' : '星期二',
+ 'Wednesday' : '星期三',
+ 'Thursday' : '星期四',
+ 'Friday' : '星期五',
+ 'Saturday' : '星期六',
+ 'Sun' : '周日',
+ 'Mon' : '周一',
+ 'Tue' : '周二',
+ 'Wed' : '周三',
+ 'Thu' : '周四',
+ 'Fri' : '周五',
+ 'Sat' : '周六',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : '按名称 (文件夹在最前)',
+ 'sortkindDirsFirst' : '按类型 (文件夹在最前)',
+ 'sortsizeDirsFirst' : '按大小 (文件夹在最前)',
+ 'sortdateDirsFirst' : '按日期 (文件夹在最前)',
+ 'sortname' : '按名称',
+ 'sortkind' : '按类型',
+ 'sortsize' : '按大小',
+ 'sortdate' : '按日期',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : '请确认',
+ 'confirmRm' : '确定要删除文件吗? 该操作不可撤销!',
+ 'confirmRepl' : '用新的文件替换原有文件?',
+ 'apllyAll' : '全部应用',
+ 'name' : '名称',
+ 'size' : '大小',
+ 'perms' : '权限',
+ 'modify' : '修改于',
+ 'kind' : '类别',
+ 'read' : '读取',
+ 'write' : '写入',
+ 'noaccess' : '无权限',
+ 'and' : '和',
+ 'unknown' : '未知',
+ 'selectall' : '选择所有文件',
+ 'selectfiles' : '选择文件',
+ 'selectffile' : '选择第一个文件',
+ 'selectlfile' : '选择最后一个文件',
+ 'viewlist' : '列表视图',
+ 'viewicons' : '图标视图',
+ 'places' : '位置',
+ 'calc' : '计算',
+ 'path' : '路径',
+ 'aliasfor' : '别名',
+ 'locked' : '锁定',
+ 'dim' : '尺寸',
+ 'files' : '文件',
+ 'folders' : '文件夹',
+ 'items' : '项目',
+ 'yes' : '是',
+ 'no' : '否',
+ 'link' : '链接',
+ 'searcresult' : '搜索结果',
+ 'selected' : '选中的项目',
+ 'about' : '关于',
+ 'shortcuts' : '快捷键',
+ 'help' : '帮助',
+ 'webfm' : '网络文件管理器',
+ 'ver' : '版本',
+ 'protocolver' : '协议版本',
+ 'homepage' : '项目主页',
+ 'docs' : '文档',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Follow us on twitter',
+ 'facebook' : 'Join us on facebook',
+ 'team' : '团队',
+ 'chiefdev' : '首席开发',
+ 'developer' : '开发',
+ 'contributor' : '贡献',
+ 'maintainer' : '维护',
+ 'translator' : '翻译',
+ 'icons' : '图标',
+ 'dontforget' : '别忘了带上你擦汗的毛巾',
+ 'shortcutsof' : '快捷键已禁用',
+ 'dropFiles' : '把文件拖到这里',
+ 'or' : '或者',
+ 'selectForUpload' : '选择要上传的文件',
+ 'moveFiles' : '移动文件',
+ 'copyFiles' : '复制文件',
+ 'rmFromPlaces' : '从位置中删除',
+ 'untitled folder' : '未命名文件夹',
+ 'untitled file.txt' : '未命名文件.txt',
+ 'aspectRatio' : '保持比例',
+ 'scale' : '高宽比',
+ 'width' : '宽',
+ 'height' : '高',
+ 'mode' : '模式',
+ 'resize' : '重新调整大小',
+ 'crop' : '裁切',
+ 'rotate' : '旋转',
+ 'rotate-cw' : '顺时针旋转90度',
+ 'rotate-ccw' : '逆时针旋转90度',
+ 'degree' : '度',
+ 'port' : '端口', // added 18.04.2012
+ 'user' : '用户', // added 18.04.2012
+ 'pass' : '密码', // added 18.04.2012
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : '未知',
+ 'kindFolder' : '文件夹',
+ 'kindAlias' : '别名',
+ 'kindAliasBroken' : '错误的别名',
+ // applications
+ 'kindApp' : '程序',
+ 'kindPostscript' : 'Postscript 文档',
+ 'kindMsOffice' : 'Microsoft Office 文档',
+ 'kindMsWord' : 'Microsoft Word 文档',
+ 'kindMsExcel' : 'Microsoft Excel 文档',
+ 'kindMsPP' : 'Microsoft Powerpoint 演示',
+ 'kindOO' : 'Open Office 文档',
+ 'kindAppFlash' : 'Flash 程序',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent 文件',
+ 'kind7z' : '7z 压缩包',
+ 'kindTAR' : 'TAR 压缩包',
+ 'kindGZIP' : 'GZIP 压缩包',
+ 'kindBZIP' : 'BZIP 压缩包',
+ 'kindZIP' : 'ZIP 压缩包',
+ 'kindRAR' : 'RAR 压缩包',
+ 'kindJAR' : 'Java JAR 文件',
+ 'kindTTF' : 'True Type 字体',
+ 'kindOTF' : 'Open Type 字体',
+ 'kindRPM' : 'RPM 包',
+ // texts
+ 'kindText' : '文本文件',
+ 'kindTextPlain' : '纯文本',
+ 'kindPHP' : 'PHP 源代码',
+ 'kindCSS' : '层叠样式表(CSS)',
+ 'kindHTML' : 'HTML 文档',
+ 'kindJS' : 'Javascript 源代码',
+ 'kindRTF' : '富文本格式(RTF)',
+ 'kindC' : 'C 源代码',
+ 'kindCHeader' : 'C 头文件',
+ 'kindCPP' : 'C++ 源代码',
+ 'kindCPPHeader' : 'C++ 头文件',
+ 'kindShell' : 'Unix 外壳脚本',
+ 'kindPython' : 'Python 源代码',
+ 'kindJava' : 'Java 源代码',
+ 'kindRuby' : 'Ruby 源代码',
+ 'kindPerl' : 'Perl 源代码',
+ 'kindSQL' : 'SQL 脚本',
+ 'kindXML' : 'XML 文档',
+ 'kindAWK' : 'AWK 源代码',
+ 'kindCSV' : '逗号分隔值文件(CSV)',
+ 'kindDOCBOOK' : 'Docbook XML 文档',
+ // images
+ 'kindImage' : '图片',
+ 'kindBMP' : 'BMP 图片',
+ 'kindJPEG' : 'JPEG 图片',
+ 'kindGIF' : 'GIF 图片',
+ 'kindPNG' : 'PNG 图片',
+ 'kindTIFF' : 'TIFF 图片',
+ 'kindTGA' : 'TGA 图片',
+ 'kindPSD' : 'Adobe Photoshop 图片',
+ 'kindXBITMAP' : 'X bitmap 图片',
+ 'kindPXM' : 'Pixelmator 图片',
+ // media
+ 'kindAudio' : '音频',
+ 'kindAudioMPEG' : 'MPEG 音频',
+ 'kindAudioMPEG4' : 'MPEG-4 音频',
+ 'kindAudioMIDI' : 'MIDI 音频',
+ 'kindAudioOGG' : 'Ogg Vorbis 音频',
+ 'kindAudioWAV' : 'WAV 音频',
+ 'AudioPlaylist' : 'MP3 播放列表',
+ 'kindVideo' : '视频',
+ 'kindVideoDV' : 'DV 视频',
+ 'kindVideoMPEG' : 'MPEG 视频',
+ 'kindVideoMPEG4' : 'MPEG-4 视频',
+ 'kindVideoAVI' : 'AVI 视频',
+ 'kindVideoMOV' : 'Quick Time 视频',
+ 'kindVideoWM' : 'Windows Media 视频',
+ 'kindVideoFlash' : 'Flash 视频',
+ 'kindVideoMKV' : 'Matroska 视频',
+ 'kindVideoOGG' : 'Ogg 视频'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.zh_TW.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.zh_TW.js
new file mode 100644
index 00000000..b601851f
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/i18n/elfinder.zh_TW.js
@@ -0,0 +1,353 @@
+/**
+ * Traditional Chinese translation
+ * @author Yuwei Chuang
+ * @version 2013-05-07
+ */
+if (elFinder && elFinder.prototype && typeof(elFinder.prototype.i18) == 'object') {
+ elFinder.prototype.i18.zh_TW = {
+ translator : 'Yuwei Chuang <ywchuang.tw@gmail.com>',
+ language : '正體中文',
+ direction : 'ltr',
+ dateFormat : 'M d, Y h:i A', // Mar 13, 2012 05:27 PM
+ fancyDateFormat : '$1 H:i',
+ messages : {
+
+ /********************************** errors **********************************/
+ 'error' : '錯誤',
+ 'errUnknown' : '未知的錯誤.',
+ 'errUnknownCmd' : '未知的指令.',
+ 'errJqui' : '無效的 jQuery UI 設定. 必須包含 Selectable, draggable 以及 droppable 元件.',
+ 'errNode' : 'elFinder 需要能建立 DOM 元素.',
+ 'errURL' : '無效的 elFinder 設定! 尚未設定 URL 選項.',
+ 'errAccess' : '拒絕存取.',
+ 'errConnect' : '無法連線至後端.',
+ 'errAbort' : '連線中斷.',
+ 'errTimeout' : '連線逾時.',
+ 'errNotFound' : '後端不存在.',
+ 'errResponse' : '無效的後端回復.',
+ 'errConf' : '無效的後端設定.',
+ 'errJSON' : '未安裝 PHP JSON 模組.',
+ 'errNoVolumes' : '無可讀取的 volumes.',
+ 'errCmdParams' : '無效的參數, 指令: "$1".',
+ 'errDataNotJSON' : '資料不是 JSON 格式.',
+ 'errDataEmpty' : '沒有資料.',
+ 'errCmdReq' : '後端請求需要命令名稱.',
+ 'errOpen' : '無法打開 "$1".',
+ 'errNotFolder' : '非資料夾.',
+ 'errNotFile' : '非檔案.',
+ 'errRead' : '無法讀取 "$1".',
+ 'errWrite' : '無法寫入 "$1".',
+ 'errPerm' : '無權限.',
+ 'errLocked' : '"$1" 被鎖定,不能重新命名, 移動或删除.',
+ 'errExists' : '檔案 "$1" 已經存在了.',
+ 'errInvName' : '無效的檔案名稱.',
+ 'errFolderNotFound' : '未找到資料夾.',
+ 'errFileNotFound' : '未找到檔案.',
+ 'errTrgFolderNotFound' : '未找到目標資料夾 "$1".',
+ 'errPopup' : '連覽器攔截了彈跳視窗. 請在瀏覽器選項允許彈跳視窗.',
+ 'errMkdir' : '不能建立資料夾 "$1".',
+ 'errMkfile' : '不能建立檔案 "$1".',
+ 'errRename' : '不能重新命名 "$1".',
+ 'errCopyFrom' : '不允許從 volume "$1" 複製.',
+ 'errCopyTo' : '不允複製到 volume "$1".',
+ 'errUpload' : '上船錯誤.',
+ 'errUploadFile' : '無法上傳 "$1".',
+ 'errUploadNoFiles' : '未找到要上傳的檔案.',
+ 'errUploadTotalSize' : '資料超過了最大允許大小.',
+ 'errUploadFileSize' : '檔案超過了最大允許大小.',
+ 'errUploadMime' : '不允許的檔案類型.',
+ 'errUploadTransfer' : '"$1" 傳輸錯誤.',
+ 'errNotReplace' : '"$1" 已經存在此位置, 不能被其他的替换.', // new
+ 'errReplace' : '無法替换 "$1".',
+ 'errSave' : '無法保存 "$1".',
+ 'errCopy' : '無法複製 "$1".',
+ 'errMove' : '無法移動 "$1".',
+ 'errCopyInItself' : '無法移動 "$1" 到原有位置.',
+ 'errRm' : '無法删除 "$1".',
+ 'errRmSrc' : '無法删除來源檔案.',
+ 'errExtract' : '無法從 "$1" 解壓縮檔案.',
+ 'errArchive' : '無法建立壓縮膽案.',
+ 'errArcType' : '不支援的壓縮格式.',
+ 'errNoArchive' : '檔案不是壓縮檔案, 或者不支援該壓缩格式.',
+ 'errCmdNoSupport' : '後端不支援該指令.',
+ 'errReplByChild' : '資料夾 “$1” 不能被它所包含的檔案(資料夾)替换.',
+ 'errArcSymlinks' : '出于安全上的考量,禁止解壓縮檔案包含不允許的檔案名稱.',
+ 'errArcMaxSize' : '壓縮檔案超過最大允許檔案大小範圍.',
+ 'errResize' : '無法重新調整大小 "$1".',
+ 'errUsupportType' : '不支援的檔案格式.',
+ 'errNotUTF8Content' : '檔案 "$1" 不是 UTF-8 格式, 不能編輯.', // added 9.11.2011
+ 'errNetMount' : '無法掛載 "$1".', // added 17.04.2012
+ 'errNetMountNoDriver' : '不支援該通訊協議.', // added 17.04.2012
+ 'errNetMountFailed' : '掛載失敗.', // added 17.04.2012
+ 'errNetMountHostReq' : '需要指定主機位置.', // added 18.04.2012
+ /******************************* commands names ********************************/
+ 'cmdarchive' : '建立壓縮檔案',
+ 'cmdback' : '後退',
+ 'cmdcopy' : '複製',
+ 'cmdcut' : '剪下',
+ 'cmddownload' : '下載',
+ 'cmdduplicate' : '建立副本',
+ 'cmdedit' : '編輯檔案',
+ 'cmdextract' : '從壓縮檔案解壓縮',
+ 'cmdforward' : '前進',
+ 'cmdgetfile' : '選擇檔案',
+ 'cmdhelp' : '關於本軟體',
+ 'cmdhome' : '首頁',
+ 'cmdinfo' : '查看關於',
+ 'cmdmkdir' : '建立資料夾',
+ 'cmdmkfile' : '建立文字檔案',
+ 'cmdopen' : '打開',
+ 'cmdpaste' : '貼上',
+ 'cmdquicklook' : '預覽',
+ 'cmdreload' : '更新',
+ 'cmdrename' : '重新命名',
+ 'cmdrm' : '删除',
+ 'cmdsearch' : '搜尋檔案',
+ 'cmdup' : '移到上一層資料夾',
+ 'cmdupload' : '上傳檔案',
+ 'cmdview' : '查看',
+ 'cmdresize' : '重新調整大小',
+ 'cmdsort' : '排序',
+ 'cmdnetmount' : '掛載 net volume', // added 18.04.2012
+
+ /*********************************** buttons ***********************************/
+ 'btnClose' : '關閉',
+ 'btnSave' : '儲存',
+ 'btnRm' : '删除',
+ 'btnApply' : '使用',
+ 'btnCancel' : '取消',
+ 'btnNo' : '否',
+ 'btnYes' : '是',
+ 'btnMount' : '掛載', // added 18.04.2012
+ /******************************** notifications ********************************/
+ 'ntfopen' : '打開資料夾',
+ 'ntffile' : '打開檔案',
+ 'ntfreload' : '更新資料夾内容',
+ 'ntfmkdir' : '建立資料夾',
+ 'ntfmkfile' : '建立檔案',
+ 'ntfrm' : '删除檔案',
+ 'ntfcopy' : '複製檔案',
+ 'ntfmove' : '移動檔案',
+ 'ntfprepare' : '準備複製檔案',
+ 'ntfrename' : '重新命名檔案',
+ 'ntfupload' : '上傳檔案',
+ 'ntfdownload' : '下載檔案',
+ 'ntfsave' : '儲存檔案',
+ 'ntfarchive' : '建立壓縮檔案',
+ 'ntfextract' : '從壓縮檔案解壓縮',
+ 'ntfsearch' : '搜尋檔案',
+ 'ntfresize' : '正在更改尺寸',
+ 'ntfsmth' : '正在忙 >_<',
+ 'ntfloadimg' : '正在讀取圖片',
+ 'ntfnetmount' : '正在掛載 net volume', // added 18.04.2012
+
+ /************************************ dates **********************************/
+ 'dateUnknown' : '未知',
+ 'Today' : '今天',
+ 'Yesterday' : '昨天',
+ 'Jan' : '一月',
+ 'Feb' : '二月',
+ 'Mar' : '三月',
+ 'Apr' : '四月',
+ 'May' : '五月',
+ 'Jun' : '六月',
+ 'Jul' : '七月',
+ 'Aug' : '八月',
+ 'Sep' : '九月',
+ 'Oct' : '十月',
+ 'Nov' : '十一月',
+ 'Dec' : '十二月',
+ 'January' : '一月',
+ 'February' : '二月',
+ 'March' : '三月',
+ 'April' : '四月',
+ 'May' : '五月',
+ 'June' : '六月',
+ 'July' : '七月',
+ 'August' : '八月',
+ 'September' : '九月',
+ 'October' : '十月',
+ 'November' : '十一月',
+ 'December' : '十二月',
+ 'Sunday' : '星期日',
+ 'Monday' : '星期一',
+ 'Tuesday' : '星期二',
+ 'Wednesday' : '星期三',
+ 'Thursday' : '星期四',
+ 'Friday' : '星期五',
+ 'Saturday' : '星期六',
+ 'Sun' : '周日',
+ 'Mon' : '周一',
+ 'Tue' : '周二',
+ 'Wed' : '周三',
+ 'Thu' : '周四',
+ 'Fri' : '周五',
+ 'Sat' : '周六',
+ /******************************** sort variants ********************************/
+ 'sortnameDirsFirst' : '按名稱 (資料夾在最前)',
+ 'sortkindDirsFirst' : '按類型 (資料夾在最前)',
+ 'sortsizeDirsFirst' : '按大小 (資料夾在最前)',
+ 'sortdateDirsFirst' : '按日期 (資料夾在最前)',
+ 'sortname' : '按名稱',
+ 'sortkind' : '按類型',
+ 'sortsize' : '按大小',
+ 'sortdate' : '按日期',
+
+ /********************************** messages **********************************/
+ 'confirmReq' : '請確認',
+ 'confirmRm' : '確定要删除檔案嗎? 該操作不可回復!',
+ 'confirmRepl' : '用新的檔案替换原有檔案?',
+ 'apllyAll' : '全部使用',
+ 'name' : '名稱',
+ 'size' : '大小',
+ 'perms' : '權限',
+ 'modify' : '修改于',
+ 'kind' : '類別',
+ 'read' : '讀取',
+ 'write' : '寫入',
+ 'noaccess' : '無權限',
+ 'and' : '和',
+ 'unknown' : '未知',
+ 'selectall' : '選擇所有檔案',
+ 'selectfiles' : '選擇檔案',
+ 'selectffile' : '選擇第一個檔案',
+ 'selectlfile' : '選擇最後一個檔案',
+ 'viewlist' : '列表檢視',
+ 'viewicons' : '圖示檢視',
+ 'places' : '位置',
+ 'calc' : '計算',
+ 'path' : '路徑',
+ 'aliasfor' : '别名',
+ 'locked' : '鎖定',
+ 'dim' : '尺寸',
+ 'files' : '檔案',
+ 'folders' : '資料夾',
+ 'items' : '項目',
+ 'yes' : '是',
+ 'no' : '否',
+ 'link' : '連結',
+ 'searcresult' : '搜尋结果',
+ 'selected' : '選取的項目',
+ 'about' : '關於',
+ 'shortcuts' : '快捷鍵',
+ 'help' : '幫助',
+ 'webfm' : '網路檔案總管',
+ 'ver' : '版本',
+ 'protocolver' : '協定版本',
+ 'homepage' : '首頁',
+ 'docs' : '文件',
+ 'github' : 'Fork us on Github',
+ 'twitter' : 'Follow us on twitter',
+ 'facebook' : 'Join us on facebook',
+ 'team' : '團隊',
+ 'chiefdev' : '首席開發者',
+ 'developer' : '開發者',
+ 'contributor' : '貢獻者',
+ 'maintainer' : '維護者',
+ 'translator' : '翻譯',
+ 'icons' : '圖示',
+ 'dontforget' : '别忘了帶上你擦汗的毛巾',
+ 'shortcutsof' : '快捷鍵已禁用',
+ 'dropFiles' : '把檔案拖到此處',
+ 'or' : '或者',
+ 'selectForUpload' : '選擇要上傳的檔案',
+ 'moveFiles' : '移動檔案',
+ 'copyFiles' : '複製檔案',
+ 'rmFromPlaces' : '從位置中删除',
+ 'untitled folder' : '未命名資料夾',
+ 'untitled file.txt' : '未命名檔案.txt',
+ 'aspectRatio' : '保持比例',
+ 'scale' : '寬高比',
+ 'width' : '寬',
+ 'height' : '高',
+ 'mode' : '模式',
+ 'resize' : '重新調整大小',
+ 'crop' : '裁切',
+ 'rotate' : '旋轉',
+ 'rotate-cw' : '順時針旋轉90度',
+ 'rotate-ccw' : '逆時針旋轉90度',
+ 'degree' : '度',
+ 'port' : '接口', // added 18.04.2012
+ 'user' : '使用者', // added 18.04.2012
+ 'pass' : '密碼', // added 18.04.2012
+
+ /********************************** mimetypes **********************************/
+ 'kindUnknown' : '未知',
+ 'kindFolder' : '資料夾',
+ 'kindAlias' : '别名',
+ 'kindAliasBroken' : '錯誤的别名',
+ // applications
+ 'kindApp' : '應用程式',
+ 'kindPostscript' : 'Postscript 文件',
+ 'kindMsOffice' : 'Microsoft Office 文件',
+ 'kindMsWord' : 'Microsoft Word 文件',
+ 'kindMsExcel' : 'Microsoft Excel 文件',
+ 'kindMsPP' : 'Microsoft Powerpoint 簡報',
+ 'kindOO' : 'Open Office 文件',
+ 'kindAppFlash' : 'Flash 應用程式',
+ 'kindPDF' : 'Portable Document Format (PDF)',
+ 'kindTorrent' : 'Bittorrent 檔案',
+ 'kind7z' : '7z 壓縮檔案',
+ 'kindTAR' : 'TAR 壓縮檔案',
+ 'kindGZIP' : 'GZIP 壓縮檔案',
+ 'kindBZIP' : 'BZIP 壓縮檔案',
+ 'kindZIP' : 'ZIP 壓縮檔案',
+ 'kindRAR' : 'RAR 壓縮檔案',
+ 'kindJAR' : 'Java JAR 檔案',
+ 'kindTTF' : 'True Type 字體',
+ 'kindOTF' : 'Open Type 字體',
+ 'kindRPM' : 'RPM 封裝',
+ // texts
+ 'kindText' : '文字檔案',
+ 'kindTextPlain' : '純文字',
+ 'kindPHP' : 'PHP 程式碼',
+ 'kindCSS' : 'CSS',
+ 'kindHTML' : 'HTML 文件',
+ 'kindJS' : 'Javascript 程式碼',
+ 'kindRTF' : '富文字格式(RTF)',
+ 'kindC' : 'C 程式碼',
+ 'kindCHeader' : 'C 標頭檔',
+ 'kindCPP' : 'C++ 程式碼',
+ 'kindCPPHeader' : 'C++ 標頭檔',
+ 'kindShell' : 'Unix Shell 脚本',
+ 'kindPython' : 'Python 程式碼',
+ 'kindJava' : 'Java 程式碼',
+ 'kindRuby' : 'Ruby 程式碼',
+ 'kindPerl' : 'Perl 程式碼',
+ 'kindSQL' : 'SQL 脚本',
+ 'kindXML' : 'XML 文件',
+ 'kindAWK' : 'AWK 程式碼',
+ 'kindCSV' : '逗號分隔值檔案(CSV)',
+ 'kindDOCBOOK' : 'Docbook XML 文件',
+ // images
+ 'kindImage' : '圖片',
+ 'kindBMP' : 'BMP 圖片',
+ 'kindJPEG' : 'JPEG 圖片',
+ 'kindGIF' : 'GIF 圖片',
+ 'kindPNG' : 'PNG 圖片',
+ 'kindTIFF' : 'TIFF 圖片',
+ 'kindTGA' : 'TGA 圖片',
+ 'kindPSD' : 'Adobe Photoshop 圖片',
+ 'kindXBITMAP' : 'X bitmap 圖片',
+ 'kindPXM' : 'Pixelmator 圖片',
+ // media
+ 'kindAudio' : '聲音',
+ 'kindAudioMPEG' : 'MPEG 聲音',
+ 'kindAudioMPEG4' : 'MPEG-4 聲音',
+ 'kindAudioMIDI' : 'MIDI 聲音',
+ 'kindAudioOGG' : 'Ogg Vorbis 聲音',
+ 'kindAudioWAV' : 'WAV 聲音',
+ 'AudioPlaylist' : 'MP3 播放列表',
+ 'kindVideo' : '影片',
+ 'kindVideoDV' : 'DV 影片',
+ 'kindVideoMPEG' : 'MPEG 影片',
+ 'kindVideoMPEG4' : 'MPEG-4 影片',
+ 'kindVideoAVI' : 'AVI 影片',
+ 'kindVideoMOV' : 'Quick Time 影片',
+ 'kindVideoWM' : 'Windows Media 影片',
+ 'kindVideoFlash' : 'Flash 影片',
+ 'kindVideoMKV' : 'Matroska 影片',
+ 'kindVideoOGG' : 'Ogg 影片'
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/proxy/elFinderSupportVer1.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/proxy/elFinderSupportVer1.js
new file mode 100644
index 00000000..6c33dc64
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/elfinder/js/proxy/elFinderSupportVer1.js
@@ -0,0 +1,338 @@
+"use strict";
+/**
+ * elFinder transport to support old protocol.
+ *
+ * @example
+ * $('selector').elfinder({
+ * ....
+ * transport : new elFinderSupportVer1()
+ * })
+ *
+ * @author Dmitry (dio) Levashov
+ **/
+window.elFinderSupportVer1 = function(upload) {
+ var self = this;
+
+ this.upload = upload || 'auto';
+
+ this.init = function(fm) {
+ this.fm = fm;
+ this.fm.parseUploadData = function(text) {
+ var data;
+
+ if (!$.trim(text)) {
+ return {error : ['errResponse', 'errDataEmpty']};
+ }
+
+ try {
+ data = $.parseJSON(text);
+ } catch (e) {
+ return {error : ['errResponse', 'errDataNotJSON']}
+ }
+
+ return self.normalize('upload', data);
+ }
+ }
+
+
+ this.send = function(opts) {
+ var self = this,
+ fm = this.fm,
+ dfrd = $.Deferred(),
+ cmd = opts.data.cmd,
+ args = [],
+ _opts = {},
+ data,
+ xhr;
+
+ dfrd.abort = function() {
+ xhr.state() == 'pending' && xhr.abort();
+ }
+
+ switch (cmd) {
+ case 'open':
+ opts.data.tree = 1;
+ break;
+ case 'parents':
+ case 'tree':
+ return dfrd.resolve({tree : []});
+ break;
+ case 'get':
+ opts.data.cmd = 'read';
+ opts.data.current = fm.file(opts.data.target).phash;
+ break;
+ case 'put':
+ opts.data.cmd = 'edit';
+ opts.data.current = fm.file(opts.data.target).phash;
+ break;
+ case 'archive':
+ case 'rm':
+ opts.data.current = fm.file(opts.data.targets[0]).phash;
+ break;
+ case 'extract':
+ case 'rename':
+ case 'resize':
+ opts.data.current = fm.file(opts.data.target).phash;
+ break;
+ case 'duplicate':
+ _opts = $.extend(true, {}, opts);
+
+ $.each(opts.data.targets, function(i, hash) {
+ $.ajax($.extend(_opts, {data : {cmd : 'duplicate', target : hash, current : fm.file(hash).phash}}))
+ .error(function(error) {
+ fm.error(fm.res('error', 'connect'));
+ })
+ .done(function(data) {
+ data = self.normalize('duplicate', data);
+ if (data.error) {
+ fm.error(data.error);
+ } else if (data.added) {
+ fm.trigger('add', {added : data.added});
+ }
+ })
+ });
+ return dfrd.resolve({})
+ break;
+
+ case 'mkdir':
+ case 'mkfile':
+ opts.data.current = opts.data.target;
+ break;
+ case 'paste':
+ opts.data.current = opts.data.dst
+ break;
+
+ case 'size':
+ return dfrd.resolve({error : fm.res('error', 'cmdsupport')});
+ break;
+ case 'search':
+ return dfrd.resolve({error : fm.res('error', 'cmdsupport')});
+ break;
+
+ }
+ // cmd = opts.data.cmd
+
+ xhr = $.ajax(opts)
+ .fail(function(error) {
+ dfrd.reject(error)
+ })
+ .done(function(raw) {
+ data = self.normalize(cmd, raw);
+
+ // cmd != 'open' && self.fm.log(data);
+
+ if (cmd == 'paste' && !data.error) {
+ fm.sync();
+ dfrd.resolve({});
+ } else {
+ dfrd.resolve(data);
+ }
+ })
+
+ return dfrd;
+
+ return $.ajax(opts);
+ }
+
+ // fix old connectors errors messages as possible
+ // this.errors = {
+ // 'Unknown command' : 'Unknown command.',
+ // 'Invalid backend configuration' : 'Invalid backend configuration.',
+ // 'Access denied' : 'Access denied.',
+ // 'PHP JSON module not installed' : 'PHP JSON module not installed.',
+ // 'File not found' : 'File not found.',
+ // 'Invalid name' : 'Invalid file name.',
+ // 'File or folder with the same name already exists' : 'File named "$1" already exists in this location.',
+ // 'Not allowed file type' : 'Not allowed file type.',
+ // 'File exceeds the maximum allowed filesize' : 'File exceeds maximum allowed size.',
+ // 'Unable to copy into itself' : 'Unable to copy "$1" into itself.',
+ // 'Unable to create archive' : 'Unable to create archive.',
+ // 'Unable to extract files from archive' : 'Unable to extract files from "$1".'
+ // }
+
+ this.normalize = function(cmd, data) {
+ var self = this,
+ files = {},
+ filter = function(file) { return file && file.hash && file.name && file.mime ? file : null; },
+ phash;
+
+ if ((cmd == 'tmb' || cmd == 'get')) {
+ return data;
+ }
+
+ // if (data.error) {
+ // $.each(data.error, function(i, msg) {
+ // if (self.errors[msg]) {
+ // data.error[i] = self.errors[msg];
+ // }
+ // });
+ // }
+
+ if (cmd == 'upload' && data.error && data.cwd) {
+ data.warning = $.extend({}, data.error);
+ data.error = false;
+ }
+
+
+ if (data.error) {
+ return data;
+ }
+
+ if (cmd == 'put') {
+
+ phash = this.fm.file(data.target.hash).phash;
+ return {changed : [this.normalizeFile(data.target, phash)]};
+ }
+
+ phash = data.cwd.hash;
+
+ if (data.tree) {
+ $.each(this.normalizeTree(data.tree), function(i, file) {
+ files[file.hash] = file;
+ });
+ }
+
+ $.each(data.cdc||[], function(i, file) {
+ var hash = file.hash;
+
+ if (files[hash]) {
+ files[hash].date = file.date;
+ files[hash].locked = file.hash == phash ? true : file.rm === void(0) ? false : !file.rm;
+ } else {
+ files[hash] = self.normalizeFile(file, phash, data.tmb);
+ }
+ });
+
+ if (!data.tree) {
+ $.each(this.fm.files(), function(hash, file) {
+ if (!files[hash] && file.phash != phash && file.mime == 'directory') {
+ files[hash] = file;
+ }
+ });
+ }
+
+ if (cmd == 'open') {
+ return {
+ cwd : files[phash] || this.normalizeFile(data.cwd),
+ files : $.map(files, function(f) { return f }),
+ options : self.normalizeOptions(data),
+ init : !!data.params,
+ debug : data.debug
+ };
+ }
+
+
+
+ return $.extend({
+ current : data.cwd.hash,
+ error : data.error,
+ warning : data.warning,
+ options : {tmb : !!data.tmb}
+ }, this.fm.diff($.map(files, filter)));
+
+ }
+
+ /**
+ * Convert old api tree into plain array of dirs
+ *
+ * @param Object root dir
+ * @return Array
+ */
+ this.normalizeTree = function(root) {
+ var self = this,
+ result = [],
+ traverse = function(dirs, phash) {
+ var i, dir;
+
+ for (i = 0; i < dirs.length; i++) {
+ dir = dirs[i];
+ result.push(self.normalizeFile(dir, phash))
+ dir.dirs.length && traverse(dir.dirs, dir.hash);
+ }
+ };
+
+ traverse([root]);
+
+ return result;
+ }
+
+ /**
+ * Convert file info from old api format into new one
+ *
+ * @param Object file
+ * @param String parent dir hash
+ * @return Object
+ */
+ this.normalizeFile = function(file, phash, tmb) {
+ var mime = file.mime || 'directory',
+ size = mime == 'directory' && !file.linkTo ? 0 : file.size,
+ info = {
+ url : file.url,
+ hash : file.hash,
+ phash : phash,
+ name : file.name,
+ mime : mime,
+ date : file.date || 'unknown',
+ size : size,
+ read : file.read,
+ write : file.write,
+ locked : !phash ? true : file.rm === void(0) ? false : !file.rm
+ };
+
+ if (file.mime == 'application/x-empty') {
+ info.mime = 'text/plain';
+ }
+ if (file.linkTo) {
+ info.alias = file.linkTo;
+ }
+
+ if (file.linkTo) {
+ info.linkTo = file.linkTo;
+ }
+
+ if (file.tmb) {
+ info.tmb = file.tmb;
+ } else if (info.mime.indexOf('image/') === 0 && tmb) {
+ info.tmb = 1;
+
+ }
+
+ if (file.dirs && file.dirs.length) {
+ info.dirs = true;
+ }
+ if (file.dim) {
+ info.dim = file.dim;
+ }
+ if (file.resize) {
+ info.resize = file.resize;
+ }
+ return info;
+ }
+
+ this.normalizeOptions = function(data) {
+ var opts = {
+ path : data.cwd.rel,
+ disabled : data.disabled || [],
+ tmb : !!data.tmb,
+ copyOverwrite : true
+ };
+
+ if (data.params) {
+ opts.api = 1;
+ opts.url = data.params.url;
+ opts.archivers = {
+ create : data.params.archives || [],
+ extract : data.params.extract || []
+ }
+ }
+
+ if (opts.path.indexOf('/') !== -1) {
+ opts.separator = '/';
+ } else if (opts.path.indexOf('\\') !== -1) {
+ opts.separator = '\\';
+ }
+ return opts;
+ }
+
+
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/index.html b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/index.html b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/index.html b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 00000000..5b5dab2a
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100644
index 00000000..ac8b229a
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 00000000..ad3d6346
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 00000000..42ccba26
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 00000000..5a46b47c
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 00000000..86c2baa6
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 00000000..4443fdc1
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 00000000..7c9fa6c6
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png
new file mode 100644
index 00000000..b273ff11
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 00000000..09d1cdc8
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png
new file mode 100644
index 00000000..59bd45b9
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png
new file mode 100644
index 00000000..6d02426c
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 00000000..2ab019b7
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/index.html b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/jquery-ui-1.8.24.custom.css b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/jquery-ui-1.8.24.custom.css
new file mode 100644
index 00000000..cd166a6b
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/css/smoothness/jquery-ui-1.8.24.custom.css
@@ -0,0 +1,563 @@
+/*!
+ * jQuery UI CSS Framework 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:after { clear: both; }
+.ui-helper-clearfix { zoom: 1; }
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*!
+ * jQuery UI CSS Framework 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
+ * jQuery UI Resizable 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
+ * jQuery UI Selectable 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*!
+ * jQuery UI Accordion 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*!
+ * jQuery UI Autocomplete 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.24
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+ list-style:none;
+ padding: 2px;
+ margin: 0;
+ display:block;
+ float: left;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+ margin:0;
+ padding: 0;
+ zoom: 1;
+ float: left;
+ clear: left;
+ width: 100%;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration:none;
+ display:block;
+ padding:.2em .4em;
+ line-height:1.5;
+ zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+/*!
+ * jQuery UI Button 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*!
+ * jQuery UI Dialog 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*!
+ * jQuery UI Slider 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*!
+ * jQuery UI Tabs 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*!
+ * jQuery UI Datepicker 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/*!
+ * jQuery UI Progressbar 1.8.24
+ *
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/index.html b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/js/index.html b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/js/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/js/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/js/jquery-1.7.2.min.js b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/js/jquery-1.7.2.min.js
new file mode 100644
index 00000000..93adea19
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/asset/js/jquery-ui/js/jquery-1.7.2.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.2 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;ca ",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q=""+"",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(
+a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c ",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=" ",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="
";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/ ]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f
+.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>$2>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/Close this window ';
+
+ header('Content-Type: text/html; charset=utf-8');
+ header('Content-Length: '.strlen($out));
+ header('Cache-Control: private');
+ header('Pragma: no-cache');
+
+ echo $out;
+
+ } else {
+ $url = $this->callbackWindowURL;
+ $url .= ((strpos($url, '?') === false)? '?' : '&')
+ . '&node=' . rawurlencode($node)
+ . (($json !== '{}')? ('&json=' . rawurlencode($json)) : '')
+ . ($bind? ('&bind=' . rawurlencode($bind)) : '')
+ . '&done=1';
+
+ header('Location: ' . $url);
+
+ }
+ exit();
+ }
+
+ /***************************************************************************/
+ /* utils */
+ /***************************************************************************/
+
+ /**
+ * Return root - file's owner
+ *
+ * @param string file hash
+ * @return elFinderStorageDriver
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function volume($hash) {
+ foreach ($this->volumes as $id => $v) {
+ if (strpos(''.$hash, $id) === 0) {
+ return $this->volumes[$id];
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Return files info array
+ *
+ * @param array $data one file info or files info
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function toArray($data) {
+ return isset($data['hash']) || !is_array($data) ? array($data) : $data;
+ }
+
+ /**
+ * Return fils hashes list
+ *
+ * @param array $files files info
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function hashes($files) {
+ $ret = array();
+ foreach ($files as $file) {
+ $ret[] = $file['hash'];
+ }
+ return $ret;
+ }
+
+ /**
+ * Remove from files list hidden files and files with required mime types
+ *
+ * @param array $files files info
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function filter($files) {
+ foreach ($files as $i => $file) {
+ if (!empty($file['hidden']) || !$this->default->mimeAccepted($file['mime'])) {
+ unset($files[$i]);
+ }
+ }
+ return array_merge($files, array());
+ }
+
+ protected function utime() {
+ $time = explode(" ", microtime());
+ return (double)$time[1] + (double)$time[0];
+ }
+
+} // END class
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderConnector.class.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderConnector.class.php
new file mode 100644
index 00000000..4982b433
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderConnector.class.php
@@ -0,0 +1,163 @@
+elFinder = $elFinder;
+ if ($debug) {
+ $this->header = 'Content-Type: text/html; charset=utf-8';
+ }
+ }
+
+ /**
+ * Execute elFinder command and output result
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ public function run() {
+ $isPost = $_SERVER["REQUEST_METHOD"] == 'POST';
+ $src = $_SERVER["REQUEST_METHOD"] == 'POST' ? $_POST : $_GET;
+ if ($isPost && !$src && $rawPostData = @file_get_contents('php://input')) {
+ // for support IE XDomainRequest()
+ $parts = explode('&', $rawPostData);
+ foreach($parts as $part) {
+ list($key, $value) = array_pad(explode('=', $part), 2, '');
+ $src[$key] = rawurldecode($value);
+ }
+ $_POST = $src;
+ $_REQUEST = array_merge_recursive($src, $_REQUEST);
+ }
+ $cmd = isset($src['cmd']) ? $src['cmd'] : '';
+ $args = array();
+
+ if (!function_exists('json_encode')) {
+ $error = $this->elFinder->error(elFinder::ERROR_CONF, elFinder::ERROR_CONF_NO_JSON);
+ $this->output(array('error' => '{"error":["'.implode('","', $error).'"]}', 'raw' => true));
+ }
+
+ if (!$this->elFinder->loaded()) {
+ $this->output(array('error' => $this->elFinder->error(elFinder::ERROR_CONF, elFinder::ERROR_CONF_NO_VOL), 'debug' => $this->elFinder->mountErrors));
+ }
+
+ // telepat_mode: on
+ if (!$cmd && $isPost) {
+ $this->output(array('error' => $this->elFinder->error(elFinder::ERROR_UPLOAD, elFinder::ERROR_UPLOAD_TOTAL_SIZE), 'header' => 'Content-Type: text/html'));
+ }
+ // telepat_mode: off
+
+ if (!$this->elFinder->commandExists($cmd)) {
+ $this->output(array('error' => $this->elFinder->error(elFinder::ERROR_UNKNOWN_CMD)));
+ }
+
+ // collect required arguments to exec command
+ foreach ($this->elFinder->commandArgsList($cmd) as $name => $req) {
+ $arg = $name == 'FILES'
+ ? $_FILES
+ : (isset($src[$name]) ? $src[$name] : '');
+
+ if (!is_array($arg)) {
+ $arg = trim($arg);
+ }
+ if ($req && (!isset($arg) || $arg === '')) {
+ $this->output(array('error' => $this->elFinder->error(elFinder::ERROR_INV_PARAMS, $cmd)));
+ }
+ $args[$name] = $arg;
+ }
+
+ $args['debug'] = isset($src['debug']) ? !!$src['debug'] : false;
+
+ $this->output($this->elFinder->exec($cmd, $this->input_filter($args)));
+ }
+
+ /**
+ * Output json
+ *
+ * @param array data to output
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function output(array $data) {
+ $header = isset($data['header']) ? $data['header'] : $this->header;
+ unset($data['header']);
+ if ($header) {
+ if (is_array($header)) {
+ foreach ($header as $h) {
+ header($h);
+ }
+ } else {
+ header($header);
+ }
+ }
+
+ if (isset($data['pointer'])) {
+ rewind($data['pointer']);
+ fpassthru($data['pointer']);
+ if (!empty($data['volume'])) {
+ $data['volume']->close($data['pointer'], $data['info']['hash']);
+ }
+ exit();
+ } else {
+ if (!empty($data['raw']) && !empty($data['error'])) {
+ exit($data['error']);
+ } else {
+ exit(json_encode($data));
+ }
+ }
+
+ }
+
+ /**
+ * Remove null & stripslashes applies on "magic_quotes_gpc"
+ *
+ * @param mixed $args
+ * @return mixed
+ * @author Naoki Sawada
+ */
+ private function input_filter($args) {
+ static $magic_quotes_gpc = NULL;
+
+ if ($magic_quotes_gpc === NULL)
+ $magic_quotes_gpc = (version_compare(PHP_VERSION, '5.4', '<') && get_magic_quotes_gpc());
+
+ if (is_array($args)) {
+ return array_map(array(& $this, 'input_filter'), $args);
+ }
+ $res = str_replace("\0", '', $args);
+ $magic_quotes_gpc && ($res = stripslashes($res));
+ return $res;
+ }
+}// END class
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeDriver.class.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeDriver.class.php
new file mode 100644
index 00000000..4d15603f
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeDriver.class.php
@@ -0,0 +1,3741 @@
+ array(),
+ 'extract' => array()
+ );
+
+ /**
+ * How many subdirs levels return for tree
+ *
+ * @var int
+ **/
+ protected $treeDeep = 1;
+
+ /**
+ * Errors from last failed action
+ *
+ * @var array
+ **/
+ protected $error = array();
+
+ /**
+ * Today 24:00 timestamp
+ *
+ * @var int
+ **/
+ protected $today = 0;
+
+ /**
+ * Yesterday 24:00 timestamp
+ *
+ * @var int
+ **/
+ protected $yesterday = 0;
+
+ /**
+ * Object configuration
+ *
+ * @var array
+ **/
+ protected $options = array(
+ 'id' => '',
+ // root directory path
+ 'path' => '',
+ // open this path on initial request instead of root path
+ 'startPath' => '',
+ // how many subdirs levels return per request
+ 'treeDeep' => 1,
+ // root url, not set to disable sending URL to client (replacement for old "fileURL" option)
+ 'URL' => '',
+ // directory separator. required by client to show paths correctly
+ 'separator' => DIRECTORY_SEPARATOR,
+ // URL of volume icon (16x16 pixel image file)
+ 'icon' => '',
+ // library to crypt/uncrypt files names (not implemented)
+ 'cryptLib' => '',
+ // how to detect files mimetypes. (auto/internal/finfo/mime_content_type)
+ 'mimeDetect' => 'auto',
+ // mime.types file path (for mimeDetect==internal)
+ 'mimefile' => '',
+ // directory for thumbnails
+ 'tmbPath' => '.tmb',
+ // mode to create thumbnails dir
+ 'tmbPathMode' => 0777,
+ // thumbnails dir URL. Set it if store thumbnails outside root directory
+ 'tmbURL' => '',
+ // thumbnails size (px)
+ 'tmbSize' => 48,
+ // thumbnails crop (true - crop, false - scale image to fit thumbnail size)
+ 'tmbCrop' => true,
+ // thumbnails background color (hex #rrggbb or 'transparent')
+ 'tmbBgColor' => '#ffffff',
+ // image manipulations library
+ 'imgLib' => 'auto',
+ // on paste file - if true - old file will be replaced with new one, if false new file get name - original_name-number.ext
+ 'copyOverwrite' => true,
+ // if true - join new and old directories content on paste
+ 'copyJoin' => true,
+ // on upload - if true - old file will be replaced with new one, if false new file get name - original_name-number.ext
+ 'uploadOverwrite' => true,
+ // mimetypes allowed to upload
+ 'uploadAllow' => array(),
+ // mimetypes not allowed to upload
+ 'uploadDeny' => array(),
+ // order to proccess uploadAllow and uploadDeny options
+ 'uploadOrder' => array('deny', 'allow'),
+ // maximum upload file size. NOTE - this is size for every uploaded files
+ 'uploadMaxSize' => 0,
+ // files dates format
+ 'dateFormat' => 'j M Y H:i',
+ // files time format
+ 'timeFormat' => 'H:i',
+ // if true - every folder will be check for children folders, otherwise all folders will be marked as having subfolders
+ 'checkSubfolders' => true,
+ // allow to copy from this volume to other ones?
+ 'copyFrom' => true,
+ // allow to copy from other volumes to this one?
+ 'copyTo' => true,
+ // list of commands disabled on this root
+ 'disabled' => array(),
+ // regexp or function name to validate new file name
+ 'acceptedName' => '/^[^\.].*/', //<-- DONT touch this! Use constructor options to overwrite it!
+ // function/class method to control files permissions
+ 'accessControl' => null,
+ // some data required by access control
+ 'accessControlData' => null,
+ // default permissions. not set hidden/locked here - take no effect
+ 'defaults' => array(
+ 'read' => true,
+ 'write' => true
+ ),
+ // files attributes
+ 'attributes' => array(),
+ // Allowed archive's mimetypes to create. Leave empty for all available types.
+ 'archiveMimes' => array(),
+ // Manual config for archivers. See example below. Leave empty for auto detect
+ 'archivers' => array(),
+ // plugin settings
+ 'plugin' => array(),
+ // required to fix bug on macos
+ 'utf8fix' => false,
+ // й ё Й Ё Ø Å
+ 'utf8patterns' => array("\u0438\u0306", "\u0435\u0308", "\u0418\u0306", "\u0415\u0308", "\u00d8A", "\u030a"),
+ 'utf8replace' => array("\u0439", "\u0451", "\u0419", "\u0401", "\u00d8", "\u00c5")
+ );
+
+ /**
+ * Defaults permissions
+ *
+ * @var array
+ **/
+ protected $defaults = array(
+ 'read' => true,
+ 'write' => true,
+ 'locked' => false,
+ 'hidden' => false
+ );
+
+ /**
+ * Access control function/class
+ *
+ * @var mixed
+ **/
+ protected $attributes = array();
+
+ /**
+ * Access control function/class
+ *
+ * @var mixed
+ **/
+ protected $access = null;
+
+ /**
+ * Mime types allowed to upload
+ *
+ * @var array
+ **/
+ protected $uploadAllow = array();
+
+ /**
+ * Mime types denied to upload
+ *
+ * @var array
+ **/
+ protected $uploadDeny = array();
+
+ /**
+ * Order to validate uploadAllow and uploadDeny
+ *
+ * @var array
+ **/
+ protected $uploadOrder = array();
+
+ /**
+ * Maximum allowed upload file size.
+ * Set as number or string with unit - "10M", "500K", "1G"
+ *
+ * @var int|string
+ **/
+ protected $uploadMaxSize = 0;
+
+ /**
+ * Mimetype detect method
+ *
+ * @var string
+ **/
+ protected $mimeDetect = 'auto';
+
+ /**
+ * Flag - mimetypes from externail file was loaded
+ *
+ * @var bool
+ **/
+ private static $mimetypesLoaded = false;
+
+ /**
+ * Finfo object for mimeDetect == 'finfo'
+ *
+ * @var object
+ **/
+ protected $finfo = null;
+
+ /**
+ * List of disabled client's commands
+ *
+ * @var array
+ **/
+ protected $disabled = array();
+
+ /**
+ * default extensions/mimetypes for mimeDetect == 'internal'
+ *
+ * @var array
+ **/
+ protected static $mimetypes = array(
+ // applications
+ 'ai' => 'application/postscript',
+ 'eps' => 'application/postscript',
+ 'exe' => 'application/x-executable',
+ 'doc' => 'application/vnd.ms-word',
+ 'xls' => 'application/vnd.ms-excel',
+ 'ppt' => 'application/vnd.ms-powerpoint',
+ 'pps' => 'application/vnd.ms-powerpoint',
+ 'pdf' => 'application/pdf',
+ 'xml' => 'application/xml',
+ 'swf' => 'application/x-shockwave-flash',
+ 'torrent' => 'application/x-bittorrent',
+ 'jar' => 'application/x-jar',
+ // open office (finfo detect as application/zip)
+ 'odt' => 'application/vnd.oasis.opendocument.text',
+ 'ott' => 'application/vnd.oasis.opendocument.text-template',
+ 'oth' => 'application/vnd.oasis.opendocument.text-web',
+ 'odm' => 'application/vnd.oasis.opendocument.text-master',
+ 'odg' => 'application/vnd.oasis.opendocument.graphics',
+ 'otg' => 'application/vnd.oasis.opendocument.graphics-template',
+ 'odp' => 'application/vnd.oasis.opendocument.presentation',
+ 'otp' => 'application/vnd.oasis.opendocument.presentation-template',
+ 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
+ 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
+ 'odc' => 'application/vnd.oasis.opendocument.chart',
+ 'odf' => 'application/vnd.oasis.opendocument.formula',
+ 'odb' => 'application/vnd.oasis.opendocument.database',
+ 'odi' => 'application/vnd.oasis.opendocument.image',
+ 'oxt' => 'application/vnd.openofficeorg.extension',
+ // MS office 2007 (finfo detect as application/zip)
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+ 'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
+ 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
+ 'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
+ 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
+ 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+ 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
+ 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
+ 'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
+ 'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
+ 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
+ 'sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12',
+ // archives
+ 'gz' => 'application/x-gzip',
+ 'tgz' => 'application/x-gzip',
+ 'bz' => 'application/x-bzip2',
+ 'bz2' => 'application/x-bzip2',
+ 'tbz' => 'application/x-bzip2',
+ 'zip' => 'application/zip',
+ 'rar' => 'application/x-rar',
+ 'tar' => 'application/x-tar',
+ '7z' => 'application/x-7z-compressed',
+ // texts
+ 'txt' => 'text/plain',
+ 'php' => 'text/x-php',
+ 'html' => 'text/html',
+ 'htm' => 'text/html',
+ 'js' => 'text/javascript',
+ 'css' => 'text/css',
+ 'rtf' => 'text/rtf',
+ 'rtfd' => 'text/rtfd',
+ 'py' => 'text/x-python',
+ 'java' => 'text/x-java-source',
+ 'rb' => 'text/x-ruby',
+ 'sh' => 'text/x-shellscript',
+ 'pl' => 'text/x-perl',
+ 'xml' => 'text/xml',
+ 'sql' => 'text/x-sql',
+ 'c' => 'text/x-csrc',
+ 'h' => 'text/x-chdr',
+ 'cpp' => 'text/x-c++src',
+ 'hh' => 'text/x-c++hdr',
+ 'log' => 'text/plain',
+ 'csv' => 'text/x-comma-separated-values',
+ // images
+ 'bmp' => 'image/x-ms-bmp',
+ 'jpg' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'gif' => 'image/gif',
+ 'png' => 'image/png',
+ 'tif' => 'image/tiff',
+ 'tiff' => 'image/tiff',
+ 'tga' => 'image/x-targa',
+ 'psd' => 'image/vnd.adobe.photoshop',
+ 'ai' => 'image/vnd.adobe.photoshop',
+ 'xbm' => 'image/xbm',
+ 'pxm' => 'image/pxm',
+ //audio
+ 'mp3' => 'audio/mpeg',
+ 'mid' => 'audio/midi',
+ 'ogg' => 'audio/ogg',
+ 'oga' => 'audio/ogg',
+ 'm4a' => 'audio/x-m4a',
+ 'wav' => 'audio/wav',
+ 'wma' => 'audio/x-ms-wma',
+ // video
+ 'avi' => 'video/x-msvideo',
+ 'dv' => 'video/x-dv',
+ 'mp4' => 'video/mp4',
+ 'mpeg' => 'video/mpeg',
+ 'mpg' => 'video/mpeg',
+ 'mov' => 'video/quicktime',
+ 'wm' => 'video/x-ms-wmv',
+ 'flv' => 'video/x-flv',
+ 'mkv' => 'video/x-matroska',
+ 'webm' => 'video/webm',
+ 'ogv' => 'video/ogg',
+ 'ogm' => 'video/ogg'
+ );
+
+ /**
+ * Directory separator - required by client
+ *
+ * @var string
+ **/
+ protected $separator = DIRECTORY_SEPARATOR;
+
+ /**
+ * Mimetypes allowed to display
+ *
+ * @var array
+ **/
+ protected $onlyMimes = array();
+
+ /**
+ * Store files moved or overwrited files info
+ *
+ * @var array
+ **/
+ protected $removed = array();
+
+ /**
+ * Cache storage
+ *
+ * @var array
+ **/
+ protected $cache = array();
+
+ /**
+ * Cache by folders
+ *
+ * @var array
+ **/
+ protected $dirsCache = array();
+
+ /*********************************************************************/
+ /* INITIALIZATION */
+ /*********************************************************************/
+
+ /**
+ * Prepare driver before mount volume.
+ * Return true if volume is ready.
+ *
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function init() {
+ return true;
+ }
+
+ /**
+ * Configure after successfull mount.
+ * By default set thumbnails path and image manipulation library.
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function configure() {
+ // set thumbnails path
+ $path = $this->options['tmbPath'];
+ if ($path) {
+ if (!file_exists($path)) {
+ if (@mkdir($path)) {
+ chmod($path, $this->options['tmbPathMode']);
+ } else {
+ $path = '';
+ }
+ }
+
+ if (is_dir($path) && is_readable($path)) {
+ $this->tmbPath = $path;
+ $this->tmbPathWritable = is_writable($path);
+ }
+ }
+
+ // set image manipulation library
+ $type = preg_match('/^(imagick|gd|auto)$/i', $this->options['imgLib'])
+ ? strtolower($this->options['imgLib'])
+ : 'auto';
+
+ if (($type == 'imagick' || $type == 'auto') && extension_loaded('imagick')) {
+ $this->imgLib = 'imagick';
+ } else {
+ $this->imgLib = function_exists('gd_info') ? 'gd' : '';
+ }
+
+ }
+
+
+ /*********************************************************************/
+ /* PUBLIC API */
+ /*********************************************************************/
+
+ /**
+ * Return driver id. Used as a part of volume id.
+ *
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ public function driverId() {
+ return $this->driverId;
+ }
+
+ /**
+ * Return volume id
+ *
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ public function id() {
+ return $this->id;
+ }
+
+ /**
+ * Return debug info for client
+ *
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function debug() {
+ return array(
+ 'id' => $this->id(),
+ 'name' => strtolower(substr(get_class($this), strlen('elfinderdriver'))),
+ 'mimeDetect' => $this->mimeDetect,
+ 'imgLib' => $this->imgLib
+ );
+ }
+
+ /**
+ * "Mount" volume.
+ * Return true if volume available for read or write,
+ * false - otherwise
+ *
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ public function mount(array $opts) {
+ if (!isset($opts['path']) || $opts['path'] === '') {
+ return $this->setError('Path undefined.');;
+ }
+
+ $this->options = array_merge($this->options, $opts);
+ $this->id = $this->driverId.(!empty($this->options['id']) ? $this->options['id'] : elFinder::$volumesCnt++).'_';
+ $this->root = $this->_normpath($this->options['path']);
+ $this->separator = isset($this->options['separator']) ? $this->options['separator'] : DIRECTORY_SEPARATOR;
+
+ // default file attribute
+ $this->defaults = array(
+ 'read' => isset($this->options['defaults']['read']) ? !!$this->options['defaults']['read'] : true,
+ 'write' => isset($this->options['defaults']['write']) ? !!$this->options['defaults']['write'] : true,
+ 'locked' => false,
+ 'hidden' => false
+ );
+
+ // root attributes
+ $this->attributes[] = array(
+ 'pattern' => '~^'.preg_quote(DIRECTORY_SEPARATOR).'$~',
+ 'locked' => true,
+ 'hidden' => false
+ );
+ // set files attributes
+ if (!empty($this->options['attributes']) && is_array($this->options['attributes'])) {
+
+ foreach ($this->options['attributes'] as $a) {
+ // attributes must contain pattern and at least one rule
+ if (!empty($a['pattern']) || count($a) > 1) {
+ $this->attributes[] = $a;
+ }
+ }
+ }
+
+ if (!empty($this->options['accessControl']) && is_callable($this->options['accessControl'])) {
+ $this->access = $this->options['accessControl'];
+ }
+
+ $this->today = mktime(0,0,0, date('m'), date('d'), date('Y'));
+ $this->yesterday = $this->today-86400;
+
+ // debug($this->attributes);
+ if (!$this->init()) {
+ return false;
+ }
+
+ // check some options is arrays
+ $this->uploadAllow = isset($this->options['uploadAllow']) && is_array($this->options['uploadAllow'])
+ ? $this->options['uploadAllow']
+ : array();
+
+ $this->uploadDeny = isset($this->options['uploadDeny']) && is_array($this->options['uploadDeny'])
+ ? $this->options['uploadDeny']
+ : array();
+
+ if (is_string($this->options['uploadOrder'])) { // telephat_mode on, compatibility with 1.x
+ $parts = explode(',', isset($this->options['uploadOrder']) ? $this->options['uploadOrder'] : 'deny,allow');
+ $this->uploadOrder = array(trim($parts[0]), trim($parts[1]));
+ } else { // telephat_mode off
+ $this->uploadOrder = $this->options['uploadOrder'];
+ }
+
+ if (!empty($this->options['uploadMaxSize'])) {
+ $size = ''.$this->options['uploadMaxSize'];
+ $unit = strtolower(substr($size, strlen($size) - 1));
+ $n = 1;
+ switch ($unit) {
+ case 'k':
+ $n = 1024;
+ break;
+ case 'm':
+ $n = 1048576;
+ break;
+ case 'g':
+ $n = 1073741824;
+ }
+ $this->uploadMaxSize = intval($size)*$n;
+ }
+
+ $this->disabled = isset($this->options['disabled']) && is_array($this->options['disabled'])
+ ? $this->options['disabled']
+ : array();
+
+ $this->cryptLib = $this->options['cryptLib'];
+ $this->mimeDetect = $this->options['mimeDetect'];
+
+ // find available mimetype detect method
+ $type = strtolower($this->options['mimeDetect']);
+ $type = preg_match('/^(finfo|mime_content_type|internal|auto)$/i', $type) ? $type : 'auto';
+ $regexp = '/text\/x\-(php|c\+\+)/';
+
+ if (($type == 'finfo' || $type == 'auto')
+ && class_exists('finfo')) {
+ $tmpFileInfo = @explode(';', @finfo_file(finfo_open(FILEINFO_MIME), __FILE__));
+ } else {
+ $tmpFileInfo = false;
+ }
+
+ if ($tmpFileInfo && preg_match($regexp, array_shift($tmpFileInfo))) {
+ $type = 'finfo';
+ $this->finfo = finfo_open(FILEINFO_MIME);
+ } elseif (($type == 'mime_content_type' || $type == 'auto')
+ && function_exists('mime_content_type')
+ && preg_match($regexp, array_shift(explode(';', mime_content_type(__FILE__))))) {
+ $type = 'mime_content_type';
+ } else {
+ $type = 'internal';
+ }
+ $this->mimeDetect = $type;
+
+ // load mimes from external file for mimeDetect == 'internal'
+ // based on Alexey Sukhotin idea and patch: http://elrte.org/redmine/issues/163
+ // file must be in file directory or in parent one
+ if ($this->mimeDetect == 'internal' && !self::$mimetypesLoaded) {
+ self::$mimetypesLoaded = true;
+ $this->mimeDetect = 'internal';
+ $file = false;
+ if (!empty($this->options['mimefile']) && file_exists($this->options['mimefile'])) {
+ $file = $this->options['mimefile'];
+ } elseif (file_exists(dirname(__FILE__).DIRECTORY_SEPARATOR.'mime.types')) {
+ $file = dirname(__FILE__).DIRECTORY_SEPARATOR.'mime.types';
+ } elseif (file_exists(dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'mime.types')) {
+ $file = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'mime.types';
+ }
+
+ if ($file && file_exists($file)) {
+ $mimecf = file($file);
+
+ foreach ($mimecf as $line_num => $line) {
+ if (!preg_match('/^\s*#/', $line)) {
+ $mime = preg_split('/\s+/', $line, -1, PREG_SPLIT_NO_EMPTY);
+ for ($i = 1, $size = count($mime); $i < $size ; $i++) {
+ if (!isset(self::$mimetypes[$mime[$i]])) {
+ self::$mimetypes[$mime[$i]] = $mime[0];
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $this->rootName = empty($this->options['alias']) ? $this->_basename($this->root) : $this->options['alias'];
+ $root = $this->stat($this->root);
+
+ if (!$root) {
+ return $this->setError('Root folder does not exists.');
+ }
+ if (!$root['read'] && !$root['write']) {
+ return $this->setError('Root folder has not read and write permissions.');
+ }
+
+ // debug($root);
+
+ if ($root['read']) {
+ // check startPath - path to open by default instead of root
+ if ($this->options['startPath']) {
+ $start = $this->stat($this->options['startPath']);
+ if (!empty($start)
+ && $start['mime'] == 'directory'
+ && $start['read']
+ && empty($start['hidden'])
+ && $this->_inpath($this->options['startPath'], $this->root)) {
+ $this->startPath = $this->options['startPath'];
+ if (substr($this->startPath, -1, 1) == $this->options['separator']) {
+ $this->startPath = substr($this->startPath, 0, -1);
+ }
+ }
+ }
+ } else {
+ $this->options['URL'] = '';
+ $this->options['tmbURL'] = '';
+ $this->options['tmbPath'] = '';
+ // read only volume
+ array_unshift($this->attributes, array(
+ 'pattern' => '/.*/',
+ 'read' => false
+ ));
+ }
+ $this->treeDeep = $this->options['treeDeep'] > 0 ? (int)$this->options['treeDeep'] : 1;
+ $this->tmbSize = $this->options['tmbSize'] > 0 ? (int)$this->options['tmbSize'] : 48;
+ $this->URL = $this->options['URL'];
+ if ($this->URL && preg_match("|[^/?&=]$|", $this->URL)) {
+ $this->URL .= '/';
+ }
+
+ $this->tmbURL = !empty($this->options['tmbURL']) ? $this->options['tmbURL'] : '';
+ if ($this->tmbURL && preg_match("|[^/?&=]$|", $this->tmbURL)) {
+ $this->tmbURL .= '/';
+ }
+
+ $this->nameValidator = is_string($this->options['acceptedName']) && !empty($this->options['acceptedName'])
+ ? $this->options['acceptedName']
+ : '';
+
+ $this->_checkArchivers();
+ // manual control archive types to create
+ if (!empty($this->options['archiveMimes']) && is_array($this->options['archiveMimes'])) {
+ foreach ($this->archivers['create'] as $mime => $v) {
+ if (!in_array($mime, $this->options['archiveMimes'])) {
+ unset($this->archivers['create'][$mime]);
+ }
+ }
+ }
+
+ // manualy add archivers
+ if (!empty($this->options['archivers']['create']) && is_array($this->options['archivers']['create'])) {
+ foreach ($this->options['archivers']['create'] as $mime => $conf) {
+ if (strpos($mime, 'application/') === 0
+ && !empty($conf['cmd'])
+ && isset($conf['argc'])
+ && !empty($conf['ext'])
+ && !isset($this->archivers['create'][$mime])) {
+ $this->archivers['create'][$mime] = $conf;
+ }
+ }
+ }
+
+ if (!empty($this->options['archivers']['extract']) && is_array($this->options['archivers']['extract'])) {
+ foreach ($this->options['archivers']['extract'] as $mime => $conf) {
+ if (strpos($mime, 'application/') === 0
+ && !empty($conf['cmd'])
+ && isset($conf['argc'])
+ && !empty($conf['ext'])
+ && !isset($this->archivers['extract'][$mime])) {
+ $this->archivers['extract'][$mime] = $conf;
+ }
+ }
+ }
+
+ $this->configure();
+ // echo $this->uploadMaxSize;
+ // echo $this->options['uploadMaxSize'];
+ return $this->mounted = true;
+ }
+
+ /**
+ * Some "unmount" stuffs - may be required by virtual fs
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ public function umount() {
+ }
+
+ /**
+ * Return error message from last failed action
+ *
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function error() {
+ return $this->error;
+ }
+
+ /**
+ * Return Extention/MIME Table (elFinderVolumeDriver::$mimetypes)
+ *
+ * @return array
+ * @author Naoki Sawada
+ */
+ public function getMimeTable() {
+ return elFinderVolumeDriver::$mimetypes;
+ }
+
+ /**
+ * Set mimetypes allowed to display to client
+ *
+ * @param array $mimes
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ public function setMimesFilter($mimes) {
+ if (is_array($mimes)) {
+ $this->onlyMimes = $mimes;
+ }
+ }
+
+ /**
+ * Return root folder hash
+ *
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ public function root() {
+ return $this->encode($this->root);
+ }
+
+ /**
+ * Return root or startPath hash
+ *
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ public function defaultPath() {
+ return $this->encode($this->startPath ? $this->startPath : $this->root);
+ }
+
+ /**
+ * Return volume options required by client:
+ *
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function options($hash) {
+ return array(
+ 'path' => $this->_path($this->decode($hash)),
+ 'url' => $this->URL,
+ 'tmbUrl' => $this->tmbURL,
+ 'disabled' => $this->disabled,
+ 'separator' => $this->separator,
+ 'copyOverwrite' => intval($this->options['copyOverwrite']),
+ 'uploadMaxSize' => intval($this->uploadMaxSize),
+ 'archivers' => array(
+ // 'create' => array_keys($this->archivers['create']),
+ // 'extract' => array_keys($this->archivers['extract']),
+ 'create' => is_array($this->archivers['create']) ? array_keys($this->archivers['create']) : array(),
+ 'extract' => is_array($this->archivers['extract']) ? array_keys($this->archivers['extract']) : array()
+ )
+ );
+ }
+
+ /**
+ * Get plugin values of this options
+ *
+ * @param string $name Plugin name
+ * @return NULL|array Plugin values
+ * @author Naoki Sawada
+ */
+ public function getOptionsPlugin($name = '') {
+ if ($name) {
+ return isset($this->options['plugin'][$name])? $this->options['plugin'][$name] : array();
+ } else {
+ return $this->options['plugin'];
+ }
+ }
+
+ /**
+ * Return true if command disabled in options
+ *
+ * @param string $cmd command name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ public function commandDisabled($cmd) {
+ return in_array($cmd, $this->disabled);
+ }
+
+ /**
+ * Return true if mime is required mimes list
+ *
+ * @param string $mime mime type to check
+ * @param array $mimes allowed mime types list or not set to use client mimes list
+ * @param bool|null $empty what to return on empty list
+ * @return bool|null
+ * @author Dmitry (dio) Levashov
+ * @author Troex Nevelin
+ **/
+ public function mimeAccepted($mime, $mimes = array(), $empty = true) {
+ $mimes = !empty($mimes) ? $mimes : $this->onlyMimes;
+ if (empty($mimes)) {
+ return $empty;
+ }
+ return $mime == 'directory'
+ || in_array('all', $mimes)
+ || in_array('All', $mimes)
+ || in_array($mime, $mimes)
+ || in_array(substr($mime, 0, strpos($mime, '/')), $mimes);
+ }
+
+ /**
+ * Return true if voume is readable.
+ *
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ public function isReadable() {
+ $stat = $this->stat($this->root);
+ return $stat['read'];
+ }
+
+ /**
+ * Return true if copy from this volume allowed
+ *
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ public function copyFromAllowed() {
+ return !!$this->options['copyFrom'];
+ }
+
+ /**
+ * Return file path related to root
+ *
+ * @param string $hash file hash
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ public function path($hash) {
+ return $this->_path($this->decode($hash));
+ }
+
+ /**
+ * Return file real path if file exists
+ *
+ * @param string $hash file hash
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ public function realpath($hash) {
+ $path = $this->decode($hash);
+ return $this->stat($path) ? $path : false;
+ }
+
+ /**
+ * Return list of moved/overwrited files
+ *
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function removed() {
+ return $this->removed;
+ }
+
+ /**
+ * Clean removed files list
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ public function resetRemoved() {
+ $this->removed = array();
+ }
+
+ /**
+ * Return file/dir hash or first founded child hash with required attr == $val
+ *
+ * @param string $hash file hash
+ * @param string $attr attribute name
+ * @param bool $val attribute value
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function closest($hash, $attr, $val) {
+ return ($path = $this->closestByAttr($this->decode($hash), $attr, $val)) ? $this->encode($path) : false;
+ }
+
+ /**
+ * Return file info or false on error
+ *
+ * @param string $hash file hash
+ * @param bool $realpath add realpath field to file info
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function file($hash) {
+ $path = $this->decode($hash);
+
+ return ($file = $this->stat($path)) ? $file : $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+
+ if (($file = $this->stat($path)) != false) {
+ if ($realpath) {
+ $file['realpath'] = $path;
+ }
+ return $file;
+ }
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ /**
+ * Return folder info
+ *
+ * @param string $hash folder hash
+ * @param bool $hidden return hidden file info
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function dir($hash, $resolveLink=false) {
+ if (($dir = $this->file($hash)) == false) {
+ return $this->setError(elFinder::ERROR_DIR_NOT_FOUND);
+ }
+
+ if ($resolveLink && !empty($dir['thash'])) {
+ $dir = $this->file($dir['thash']);
+ }
+
+ return $dir && $dir['mime'] == 'directory' && empty($dir['hidden'])
+ ? $dir
+ : $this->setError(elFinder::ERROR_NOT_DIR);
+ }
+
+ /**
+ * Return directory content or false on error
+ *
+ * @param string $hash file hash
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function scandir($hash) {
+ if (($dir = $this->dir($hash)) == false) {
+ return false;
+ }
+
+ return $dir['read']
+ ? $this->getScandir($this->decode($hash))
+ : $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ /**
+ * Return dir files names list
+ *
+ * @param string $hash file hash
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function ls($hash) {
+ if (($dir = $this->dir($hash)) == false || !$dir['read']) {
+ return false;
+ }
+
+ $list = array();
+ $path = $this->decode($hash);
+
+ foreach ($this->getScandir($path) as $stat) {
+ if (empty($stat['hidden']) && $this->mimeAccepted($stat['mime'])) {
+ $list[] = $stat['name'];
+ }
+ }
+
+ return $list;
+ }
+
+ /**
+ * Return subfolders for required folder or false on error
+ *
+ * @param string $hash folder hash or empty string to get tree from root folder
+ * @param int $deep subdir deep
+ * @param string $exclude dir hash which subfolders must be exluded from result, required to not get stat twice on cwd subfolders
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function tree($hash='', $deep=0, $exclude='') {
+ $path = $hash ? $this->decode($hash) : $this->root;
+
+ if (($dir = $this->stat($path)) == false || $dir['mime'] != 'directory') {
+ return false;
+ }
+
+ $dirs = $this->gettree($path, $deep > 0 ? $deep -1 : $this->treeDeep-1, $exclude ? $this->decode($exclude) : null);
+ array_unshift($dirs, $dir);
+ return $dirs;
+ }
+
+ /**
+ * Return part of dirs tree from required dir up to root dir
+ *
+ * @param string $hash directory hash
+ * @param bool|null $lineal only lineal parents
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function parents($hash, $lineal = false) {
+ if (($current = $this->dir($hash)) == false) {
+ return false;
+ }
+
+ $path = $this->decode($hash);
+ $tree = array();
+
+ while ($path && $path != $this->root) {
+ $path = $this->_dirname($path);
+ $stat = $this->stat($path);
+ if (!empty($stat['hidden']) || !$stat['read']) {
+ return false;
+ }
+
+ array_unshift($tree, $stat);
+ if (!$lineal && ($path != $this->root)) {
+ foreach ($this->gettree($path, 0) as $dir) {
+ if (!in_array($dir, $tree)) {
+ $tree[] = $dir;
+ }
+ }
+ }
+ }
+
+ return $tree ? $tree : array($current);
+ }
+
+ /**
+ * Create thumbnail for required file and return its name of false on failed
+ *
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function tmb($hash) {
+ $path = $this->decode($hash);
+ $stat = $this->stat($path);
+
+ if (isset($stat['tmb'])) {
+ return $stat['tmb'] == "1" ? $this->createTmb($path, $stat) : $stat['tmb'];
+ }
+ return false;
+ }
+
+ /**
+ * Return file size / total directory size
+ *
+ * @param string file hash
+ * @return int
+ * @author Dmitry (dio) Levashov
+ **/
+ public function size($hash) {
+ return $this->countSize($this->decode($hash));
+ }
+
+ /**
+ * Open file for reading and return file pointer
+ *
+ * @param string file hash
+ * @return Resource
+ * @author Dmitry (dio) Levashov
+ **/
+ public function open($hash) {
+ if (($file = $this->file($hash)) == false
+ || $file['mime'] == 'directory') {
+ return false;
+ }
+
+ return $this->_fopen($this->decode($hash), 'rb');
+ }
+
+ /**
+ * Close file pointer
+ *
+ * @param Resource $fp file pointer
+ * @param string $hash file hash
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ public function close($fp, $hash) {
+ $this->_fclose($fp, $this->decode($hash));
+ }
+
+ /**
+ * Create directory and return dir info
+ *
+ * @param string $dst destination directory
+ * @param string $name directory name
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function mkdir($dst, $name) {
+ if ($this->commandDisabled('mkdir')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (!$this->nameAccepted($name)) {
+ return $this->setError(elFinder::ERROR_INVALID_NAME);
+ }
+
+ if (($dir = $this->dir($dst)) == false) {
+ return $this->setError(elFinder::ERROR_TRGDIR_NOT_FOUND, '#'.$dst);
+ }
+
+ $path = $this->decode($dst);
+
+ if (!$dir['write'] || !$this->allowCreate($path, $name, true)) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ $dst = $this->_joinPath($path, $name);
+ $stat = $this->stat($dst);
+ if (!empty($stat)) {
+ return $this->setError(elFinder::ERROR_EXISTS, $name);
+ }
+ $this->clearcache();
+ return ($path = $this->_mkdir($path, $name)) ? $this->stat($path) : false;
+ }
+
+ /**
+ * Create empty file and return its info
+ *
+ * @param string $dst destination directory
+ * @param string $name file name
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function mkfile($dst, $name) {
+ if ($this->commandDisabled('mkfile')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (!$this->nameAccepted($name)) {
+ return $this->setError(elFinder::ERROR_INVALID_NAME);
+ }
+
+ if (($dir = $this->dir($dst)) == false) {
+ return $this->setError(elFinder::ERROR_TRGDIR_NOT_FOUND, '#'.$dst);
+ }
+
+ $path = $this->decode($dst);
+
+ if (!$dir['write'] || !$this->allowCreate($path, $name, false)) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if ($this->stat($this->_joinPath($path, $name))) {
+ return $this->setError(elFinder::ERROR_EXISTS, $name);
+ }
+
+ $this->clearcache();
+ return ($path = $this->_mkfile($path, $name)) ? $this->stat($path) : false;
+ }
+
+ /**
+ * Rename file and return file info
+ *
+ * @param string $hash file hash
+ * @param string $name new file name
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function rename($hash, $name) {
+ if ($this->commandDisabled('rename')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (!$this->nameAccepted($name)) {
+ return $this->setError(elFinder::ERROR_INVALID_NAME, $name);
+ }
+
+ if (!($file = $this->file($hash))) {
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ if ($name == $file['name']) {
+ return $file;
+ }
+
+ if (!empty($file['locked'])) {
+ return $this->setError(elFinder::ERROR_LOCKED, $file['name']);
+ }
+
+ $path = $this->decode($hash);
+ $dir = $this->_dirname($path);
+ $stat = $this->stat($this->_joinPath($dir, $name));
+ if ($stat) {
+ return $this->setError(elFinder::ERROR_EXISTS, $name);
+ }
+
+ if (!$this->allowCreate($dir, $name, ($file['mime'] === 'directory'))) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ $this->rmTmb($file); // remove old name tmbs, we cannot do this after dir move
+
+
+ if (($path = $this->_move($path, $dir, $name))) {
+ $this->clearcache();
+ return $this->stat($path);
+ }
+ return false;
+ }
+
+ /**
+ * Create file copy with suffix "copy number" and return its info
+ *
+ * @param string $hash file hash
+ * @param string $suffix suffix to add to file name
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function duplicate($hash, $suffix='copy') {
+ if ($this->commandDisabled('duplicate')) {
+ return $this->setError(elFinder::ERROR_COPY, '#'.$hash, elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($file = $this->file($hash)) == false) {
+ return $this->setError(elFinder::ERROR_COPY, elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ $path = $this->decode($hash);
+ $dir = $this->_dirname($path);
+ $name = $this->uniqueName($dir, $this->_basename($path), ' '.$suffix.' ');
+
+ if (!$this->allowCreate($dir, $name, ($file['mime'] === 'directory'))) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ return ($path = $this->copy($path, $dir, $name)) == false
+ ? false
+ : $this->stat($path);
+ }
+
+ /**
+ * Save uploaded file.
+ * On success return array with new file stat and with removed file hash (if existed file was replaced)
+ *
+ * @param Resource $fp file pointer
+ * @param string $dst destination folder hash
+ * @param string $src file name
+ * @param string $tmpname file tmp name - required to detect mime type
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function upload($fp, $dst, $name, $tmpname) {
+ if ($this->commandDisabled('upload')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($dir = $this->dir($dst)) == false) {
+ return $this->setError(elFinder::ERROR_TRGDIR_NOT_FOUND, '#'.$dst);
+ }
+
+ if (!$dir['write']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (!$this->nameAccepted($name)) {
+ return $this->setError(elFinder::ERROR_INVALID_NAME);
+ }
+
+ $mime = $this->mimetype($this->mimeDetect == 'internal' ? $name : $tmpname, $name);
+ if ($mime == 'unknown' && $this->mimeDetect == 'internal') {
+ $mime = elFinderVolumeDriver::mimetypeInternalDetect($name);
+ }
+
+ // logic based on http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order
+ $allow = $this->mimeAccepted($mime, $this->uploadAllow, null);
+ $deny = $this->mimeAccepted($mime, $this->uploadDeny, null);
+ $upload = true; // default to allow
+ if (strtolower($this->uploadOrder[0]) == 'allow') { // array('allow', 'deny'), default is to 'deny'
+ $upload = false; // default is deny
+ if (!$deny && ($allow === true)) { // match only allow
+ $upload = true;
+ }// else (both match | no match | match only deny) { deny }
+ } else { // array('deny', 'allow'), default is to 'allow' - this is the default rule
+ $upload = true; // default is allow
+ if (($deny === true) && !$allow) { // match only deny
+ $upload = false;
+ } // else (both match | no match | match only allow) { allow }
+ }
+ if (!$upload) {
+ return $this->setError(elFinder::ERROR_UPLOAD_FILE_MIME);
+ }
+
+ if ($this->uploadMaxSize > 0 && filesize($tmpname) > $this->uploadMaxSize) {
+ return $this->setError(elFinder::ERROR_UPLOAD_FILE_SIZE);
+ }
+
+ $dstpath = $this->decode($dst);
+ $test = $this->_joinPath($dstpath, $name);
+
+ $file = $this->stat($test);
+ $this->clearcache();
+
+ if ($file) { // file exists
+ if ($this->options['uploadOverwrite']) {
+ if (!$file['write']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ } elseif ($file['mime'] == 'directory') {
+ return $this->setError(elFinder::ERROR_NOT_REPLACE, $name);
+ }
+ $this->remove($test);
+ } else {
+ $name = $this->uniqueName($dstpath, $name, '-', false);
+ }
+ }
+
+ $stat = array(
+ 'mime' => $mime,
+ 'width' => 0,
+ 'height' => 0,
+ 'size' => filesize($tmpname));
+
+ // $w = $h = 0;
+ if (strpos($mime, 'image') === 0 && ($s = getimagesize($tmpname))) {
+ $stat['width'] = $s[0];
+ $stat['height'] = $s[1];
+ }
+ // $this->clearcache();
+ if (($path = $this->_save($fp, $dstpath, $name, $stat)) == false) {
+ return false;
+ }
+
+
+
+ return $this->stat($path);
+ }
+
+ /**
+ * Paste files
+ *
+ * @param Object $volume source volume
+ * @param string $source file hash
+ * @param string $dst destination dir hash
+ * @param bool $rmSrc remove source after copy?
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function paste($volume, $src, $dst, $rmSrc = false) {
+ $err = $rmSrc ? elFinder::ERROR_MOVE : elFinder::ERROR_COPY;
+
+ if ($this->commandDisabled('paste')) {
+ return $this->setError($err, '#'.$src, elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($file = $volume->file($src, $rmSrc)) == false) {
+ return $this->setError($err, '#'.$src, elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ $name = $file['name'];
+ $errpath = $volume->path($src);
+
+ if (($dir = $this->dir($dst)) == false) {
+ return $this->setError($err, $errpath, elFinder::ERROR_TRGDIR_NOT_FOUND, '#'.$dst);
+ }
+
+ if (!$dir['write'] || !$file['read']) {
+ return $this->setError($err, $errpath, elFinder::ERROR_PERM_DENIED);
+ }
+
+ $destination = $this->decode($dst);
+
+ if (($test = $volume->closest($src, $rmSrc ? 'locked' : 'read', $rmSrc))) {
+ return $rmSrc
+ ? $this->setError($err, $errpath, elFinder::ERROR_LOCKED, $volume->path($test))
+ : $this->setError($err, $errpath, elFinder::ERROR_PERM_DENIED);
+ }
+
+ $test = $this->_joinPath($destination, $name);
+ $stat = $this->stat($test);
+ $this->clearcache();
+ if ($stat) {
+ if ($this->options['copyOverwrite']) {
+ // do not replace file with dir or dir with file
+ if (!$this->isSameType($file['mime'], $stat['mime'])) {
+ return $this->setError(elFinder::ERROR_NOT_REPLACE, $this->_path($test));
+ }
+ // existed file is not writable
+ if (!$stat['write']) {
+ return $this->setError($err, $errpath, elFinder::ERROR_PERM_DENIED);
+ }
+ // existed file locked or has locked child
+ if (($locked = $this->closestByAttr($test, 'locked', true))) {
+ return $this->setError(elFinder::ERROR_LOCKED, $this->_path($locked));
+ }
+ // target is entity file of alias
+ if ($volume == $this && ($test == @$file['target'] || $test == $this->decode($src))) {
+ return $this->setError(elFinder::ERROR_REPLACE, $errpath);
+ }
+ // remove existed file
+ if (!$this->remove($test)) {
+ return $this->setError(elFinder::ERROR_REPLACE, $this->_path($test));
+ }
+ } else {
+ $name = $this->uniqueName($destination, $name, ' ', false);
+ }
+ }
+
+ // copy/move inside current volume
+ if ($volume == $this) {
+ $source = $this->decode($src);
+ // do not copy into itself
+ if ($this->_inpath($destination, $source)) {
+ return $this->setError(elFinder::ERROR_COPY_INTO_ITSELF, $errpath);
+ }
+ $method = $rmSrc ? 'move' : 'copy';
+ return ($path = $this->$method($source, $destination, $name)) ? $this->stat($path) : false;
+ }
+
+ // copy/move from another volume
+ if (!$this->options['copyTo'] || !$volume->copyFromAllowed()) {
+ return $this->setError(elFinder::ERROR_COPY, $errpath, elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($path = $this->copyFrom($volume, $src, $destination, $name)) == false) {
+ return false;
+ }
+
+ if ($rmSrc) {
+ if ($volume->rm($src)) {
+ $this->removed[] = $file;
+ } else {
+ return $this->setError(elFinder::ERROR_MOVE, $errpath, elFinder::ERROR_RM_SRC);
+ }
+ }
+ return $this->stat($path);
+ }
+
+ /**
+ * Return file contents
+ *
+ * @param string $hash file hash
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ public function getContents($hash) {
+ $file = $this->file($hash);
+
+ if (!$file) {
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ if ($file['mime'] == 'directory') {
+ return $this->setError(elFinder::ERROR_NOT_FILE);
+ }
+
+ if (!$file['read']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ return $this->_getContents($this->decode($hash));
+ }
+
+ /**
+ * Put content in text file and return file info.
+ *
+ * @param string $hash file hash
+ * @param string $content new file content
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function putContents($hash, $content) {
+ if ($this->commandDisabled('edit')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ $path = $this->decode($hash);
+
+ if (!($file = $this->file($hash))) {
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ if (!$file['write']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+ $this->clearcache();
+ return $this->_filePutContents($path, $content) ? $this->stat($path) : false;
+ }
+
+ /**
+ * Extract files from archive
+ *
+ * @param string $hash archive hash
+ * @return array|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ public function extract($hash) {
+ if ($this->commandDisabled('extract')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($file = $this->file($hash)) == false) {
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ $archiver = isset($this->archivers['extract'][$file['mime']])
+ ? $this->archivers['extract'][$file['mime']]
+ : false;
+
+ if (!$archiver) {
+ return $this->setError(elFinder::ERROR_NOT_ARCHIVE);
+ }
+
+ $path = $this->decode($hash);
+ $parent = $this->stat($this->_dirname($path));
+
+ if (!$file['read'] || !$parent['write']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+ $this->clearcache();
+ return ($path = $this->_extract($path, $archiver)) ? $this->stat($path) : false;
+ }
+
+ /**
+ * Add files to archive
+ *
+ * @return void
+ **/
+ public function archive($hashes, $mime) {
+ if ($this->commandDisabled('archive')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ $archiver = isset($this->archivers['create'][$mime])
+ ? $this->archivers['create'][$mime]
+ : false;
+
+ if (!$archiver) {
+ return $this->setError(elFinder::ERROR_ARCHIVE_TYPE);
+ }
+
+ $files = array();
+
+ foreach ($hashes as $hash) {
+ if (($file = $this->file($hash)) == false) {
+ return $this->error(elFinder::ERROR_FILE_NOT_FOUND, '#'+$hash);
+ }
+ if (!$file['read']) {
+ return $this->error(elFinder::ERROR_PERM_DENIED);
+ }
+ $path = $this->decode($hash);
+ if (!isset($dir)) {
+ $dir = $this->_dirname($path);
+ $stat = $this->stat($dir);
+ if (!$stat['write']) {
+ return $this->error(elFinder::ERROR_PERM_DENIED);
+ }
+ }
+
+ $files[] = $this->_basename($path);
+ }
+
+ $name = (count($files) == 1 ? $files[0] : 'Archive').'.'.$archiver['ext'];
+ $name = $this->uniqueName($dir, $name, '');
+ $this->clearcache();
+ return ($path = $this->_archive($dir, $files, $name, $archiver)) ? $this->stat($path) : false;
+ }
+
+ /**
+ * Resize image
+ *
+ * @param string $hash image file
+ * @param int $width new width
+ * @param int $height new height
+ * @param int $x X start poistion for crop
+ * @param int $y Y start poistion for crop
+ * @param string $mode action how to mainpulate image
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ * @author nao-pon
+ * @author Troex Nevelin
+ **/
+ public function resize($hash, $width, $height, $x, $y, $mode = 'resize', $bg = '', $degree = 0) {
+ if ($this->commandDisabled('resize')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($file = $this->file($hash)) == false) {
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ if (!$file['write'] || !$file['read']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ $path = $this->decode($hash);
+
+ if (!$this->canResize($path, $file)) {
+ return $this->setError(elFinder::ERROR_UNSUPPORT_TYPE);
+ }
+
+ switch($mode) {
+
+ case 'propresize':
+ $result = $this->imgResize($path, $width, $height, true, true);
+ break;
+
+ case 'crop':
+ $result = $this->imgCrop($path, $width, $height, $x, $y);
+ break;
+
+ case 'fitsquare':
+ $result = $this->imgSquareFit($path, $width, $height, 'center', 'middle', ($bg ? $bg : $this->options['tmbBgColor']));
+ break;
+
+ case 'rotate':
+ $result = $this->imgRotate($path, $degree, ($bg ? $bg : $this->options['tmbBgColor']));
+ break;
+
+ default:
+ $result = $this->imgResize($path, $width, $height, false, true);
+ break;
+ }
+
+ if ($result) {
+ $this->rmTmb($file);
+ $this->clearcache();
+ return $this->stat($path);
+ }
+
+ return false;
+ }
+
+ /**
+ * Remove file/dir
+ *
+ * @param string $hash file hash
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ public function rm($hash) {
+ return $this->commandDisabled('rm')
+ ? array(elFinder::ERROR_ACCESS_DENIED)
+ : $this->remove($this->decode($hash));
+ }
+
+ /**
+ * Search files
+ *
+ * @param string $q search string
+ * @param array $mimes
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function search($q, $mimes) {
+ return $this->doSearch($this->root, $q, $mimes);
+ }
+
+ /**
+ * Return image dimensions
+ *
+ * @param string $hash file hash
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function dimensions($hash) {
+ if (($file = $this->file($hash)) == false) {
+ return false;
+ }
+
+ return $this->_dimensions($this->decode($hash), $file['mime']);
+ }
+
+ /**
+ * Return content URL (for netmout volume driver)
+ * If file.url == 1 requests from JavaScript client with XHR
+ *
+ * @param string $hash file hash
+ * @param array $options options array
+ * @return boolean|string
+ * @author Naoki Sawada
+ */
+ public function getContentUrl($hash, $options = array()) {
+ if (($file = $this->file($hash)) == false || !$file['url'] || $file['url'] == 1) {
+ return false;
+ }
+ return $file['url'];
+ }
+
+ /**
+ * Return temp path
+ *
+ * @return string
+ * @author Naoki Sawada
+ */
+ public function getTempPath() {
+ if (@ $this->tmpPath) {
+ return $this->tmpPath;
+ } else if (@ $this->tmp) {
+ return $this->tmp;
+ } else if (@ $this->tmbPath) {
+ return $this->tmbPath;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * (Make &) Get upload taget dirctory hash
+ *
+ * @param string $baseTargetHash
+ * @param string $path
+ * @param array $result
+ * @return boolean|string
+ * @author Naoki Sawada
+ */
+ public function getUploadTaget($baseTargetHash, $path, & $result) {
+ $base = $this->decode($baseTargetHash);
+ $targetHash = $baseTargetHash;
+ $path = ltrim($path, '/');
+ $dirs = explode('/', $path);
+ array_pop($dirs);
+ foreach($dirs as $dir) {
+ $targetPath = $this->_joinPath($base, $dir);
+ if (! $_realpath = $this->realpath($this->encode($targetPath))) {
+ if ($stat = $this->mkdir($targetHash, $dir)) {
+ $result['added'][] = $stat;
+ $targetHash = $stat['hash'];
+ $base = $this->decode($targetHash);
+ } else {
+ return false;
+ }
+ } else {
+ $targetHash = $this->encode($_realpath);
+ if ($this->dir($targetHash)) {
+ $base = $this->decode($targetHash);
+ } else {
+ return false;
+ }
+ }
+ }
+ return $targetHash;
+ }
+
+ /**
+ * Save error message
+ *
+ * @param array error
+ * @return false
+ * @author Dmitry(dio) Levashov
+ **/
+ protected function setError($error) {
+
+ $this->error = array();
+
+ foreach (func_get_args() as $err) {
+ if (is_array($err)) {
+ $this->error = array_merge($this->error, $err);
+ } else {
+ $this->error[] = $err;
+ }
+ }
+
+ // $this->error = is_array($error) ? $error : func_get_args();
+ return false;
+ }
+
+ /*********************************************************************/
+ /* FS API */
+ /*********************************************************************/
+
+ /***************** paths *******************/
+
+ /**
+ * Encode path into hash
+ *
+ * @param string file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ * @author Troex Nevelin
+ **/
+ protected function encode($path) {
+ if ($path !== '') {
+
+ // cut ROOT from $path for security reason, even if hacker decodes the path he will not know the root
+ $p = $this->_relpath($path);
+ // if reqesting root dir $path will be empty, then assign '/' as we cannot leave it blank for crypt
+ if ($p === '') {
+ $p = DIRECTORY_SEPARATOR;
+ }
+
+ // TODO crypt path and return hash
+ $hash = $this->crypt($p);
+ // hash is used as id in HTML that means it must contain vaild chars
+ // make base64 html safe and append prefix in begining
+ $hash = strtr(base64_encode($hash), '+/=', '-_.');
+ // remove dots '.' at the end, before it was '=' in base64
+ $hash = rtrim($hash, '.');
+ // append volume id to make hash unique
+ return $this->id.$hash;
+ }
+ }
+
+ /**
+ * Decode path from hash
+ *
+ * @param string file hash
+ * @return string
+ * @author Dmitry (dio) Levashov
+ * @author Troex Nevelin
+ **/
+ protected function decode($hash) {
+ if (strpos($hash, $this->id) === 0) {
+ // cut volume id after it was prepended in encode
+ $h = substr($hash, strlen($this->id));
+ // replace HTML safe base64 to normal
+ $h = base64_decode(strtr($h, '-_.', '+/='));
+ // TODO uncrypt hash and return path
+ $path = $this->uncrypt($h);
+ // append ROOT to path after it was cut in encode
+ return $this->_abspath($path);//$this->root.($path == DIRECTORY_SEPARATOR ? '' : DIRECTORY_SEPARATOR.$path);
+ }
+ }
+
+ /**
+ * Return crypted path
+ * Not implemented
+ *
+ * @param string path
+ * @return mixed
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function crypt($path) {
+ return $path;
+ }
+
+ /**
+ * Return uncrypted path
+ * Not implemented
+ *
+ * @param mixed hash
+ * @return mixed
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function uncrypt($hash) {
+ return $hash;
+ }
+
+ /**
+ * Validate file name based on $this->options['acceptedName'] regexp
+ *
+ * @param string $name file name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function nameAccepted($name) {
+ if ($this->nameValidator) {
+ if (function_exists($this->nameValidator)) {
+ $f = $this->nameValidator;
+ return $f($name);
+ }
+
+ return preg_match($this->nameValidator, $name);
+ }
+ return true;
+ }
+
+ /**
+ * Return new unique name based on file name and suffix
+ *
+ * @param string $path file path
+ * @param string $suffix suffix append to name
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ public function uniqueName($dir, $name, $suffix = ' copy', $checkNum=true) {
+ $ext = '';
+
+ if (preg_match('/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/i', $name, $m)) {
+ $ext = '.'.$m[1];
+ $name = substr($name, 0, strlen($name)-strlen($m[0]));
+ }
+
+ if ($checkNum && preg_match('/('.$suffix.')(\d*)$/i', $name, $m)) {
+ $i = (int)$m[2];
+ $name = substr($name, 0, strlen($name)-strlen($m[2]));
+ } else {
+ $i = 1;
+ $name .= $suffix;
+ }
+ $max = $i+100000;
+
+ while ($i <= $max) {
+ $n = $name.($i > 0 ? $i : '').$ext;
+
+ if (!$this->stat($this->_joinPath($dir, $n))) {
+ $this->clearcache();
+ return $n;
+ }
+ $i++;
+ }
+ return $name.md5($dir).$ext;
+ }
+
+ /*********************** file stat *********************/
+
+ /**
+ * Check file attribute
+ *
+ * @param string $path file path
+ * @param string $name attribute name (read|write|locked|hidden)
+ * @param bool $val attribute value returned by file system
+ * @param bool $isDir path is directory (true: directory, false: file)
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function attr($path, $name, $val=null, $isDir=null) {
+ if (!isset($this->defaults[$name])) {
+ return false;
+ }
+
+
+ $perm = null;
+
+ if ($this->access) {
+ $perm = call_user_func($this->access, $name, $path, $this->options['accessControlData'], $this, $isDir);
+
+ if ($perm !== null) {
+ return !!$perm;
+ }
+ }
+
+ if ($this->separator != '/') {
+ $path = str_replace($this->separator, '/', $this->_relpath($path));
+ } else {
+ $path = $this->_relpath($path);
+ }
+
+ $path = '/'.$path;
+
+ for ($i = 0, $c = count($this->attributes); $i < $c; $i++) {
+ $attrs = $this->attributes[$i];
+
+ if (isset($attrs[$name]) && isset($attrs['pattern']) && preg_match($attrs['pattern'], $path)) {
+ $perm = $attrs[$name];
+ }
+ }
+
+ return $perm === null ? (is_null($val)? $this->defaults[$name] : $val) : !!$perm;
+ }
+
+ /**
+ * Return true if file with given name can be created in given folder.
+ *
+ * @param string $dir parent dir path
+ * @param string $name new file name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function allowCreate($dir, $name, $isDir = null) {
+ $path = $this->_joinPath($dir, $name);
+ $perm = null;
+
+ if ($this->access) {
+ $perm = call_user_func($this->access, 'write', $path, $this->options['accessControlData'], $this, $isDir);
+ if ($perm !== null) {
+ return !!$perm;
+ }
+ }
+
+ $testPath = $this->separator.$this->_relpath($path);
+
+ for ($i = 0, $c = count($this->attributes); $i < $c; $i++) {
+ $attrs = $this->attributes[$i];
+
+ if (isset($attrs['write']) && isset($attrs['pattern']) && preg_match($attrs['pattern'], $testPath)) {
+ $perm = $attrs['write'];
+ }
+ }
+
+ return $perm === null ? true : $perm;
+ }
+
+ /**
+ * Return fileinfo
+ *
+ * @param string $path file cache
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function stat($path) {
+ if ($path === false) {
+ return false;
+ }
+ return isset($this->cache[$path])
+ ? $this->cache[$path]
+ : $this->updateCache($path, $this->_stat($path));
+ }
+
+ /**
+ * Put file stat in cache and return it
+ *
+ * @param string $path file path
+ * @param array $stat file stat
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function updateCache($path, $stat) {
+ if (empty($stat) || !is_array($stat)) {
+ return $this->cache[$path] = array();
+ }
+
+ $stat['hash'] = $this->encode($path);
+
+ $root = $path == $this->root;
+
+ if ($root) {
+ $stat['volumeid'] = $this->id;
+ if ($this->rootName) {
+ $stat['name'] = $this->rootName;
+ }
+ if (! empty($this->options['icon'])) {
+ $stat['icon'] = $this->options['icon'];
+ }
+ } else {
+ if (!isset($stat['name']) || !strlen($stat['name'])) {
+ $stat['name'] = $this->_basename($path);
+ }
+ if (empty($stat['phash'])) {
+ $stat['phash'] = $this->encode($this->_dirname($path));
+ }
+ }
+
+ // fix name if required
+ if ($this->options['utf8fix'] && $this->options['utf8patterns'] && $this->options['utf8replace']) {
+ $stat['name'] = json_decode(str_replace($this->options['utf8patterns'], $this->options['utf8replace'], json_encode($stat['name'])));
+ }
+
+
+ if (empty($stat['mime'])) {
+ $stat['mime'] = $this->mimetype($stat['name']);
+ }
+
+ // @todo move dateformat to client
+ // $stat['date'] = isset($stat['ts'])
+ // ? $this->formatDate($stat['ts'])
+ // : 'unknown';
+
+ if (!isset($stat['size'])) {
+ $stat['size'] = 'unknown';
+ }
+
+ $isDir = ($stat['mime'] === 'directory');
+
+ $stat['read'] = intval($this->attr($path, 'read', isset($stat['read']) ? !!$stat['read'] : null, $isDir));
+ $stat['write'] = intval($this->attr($path, 'write', isset($stat['write']) ? !!$stat['write'] : null, $isDir));
+ if ($root) {
+ $stat['locked'] = 1;
+ } elseif ($this->attr($path, 'locked', !empty($stat['locked']), $isDir)) {
+ $stat['locked'] = 1;
+ } else {
+ unset($stat['locked']);
+ }
+
+ if ($root) {
+ unset($stat['hidden']);
+ } elseif ($this->attr($path, 'hidden', !empty($stat['hidden']), $isDir)
+ || !$this->mimeAccepted($stat['mime'])) {
+ $stat['hidden'] = $root ? 0 : 1;
+ } else {
+ unset($stat['hidden']);
+ }
+
+ if ($stat['read'] && empty($stat['hidden'])) {
+
+ if ($isDir) {
+ // for dir - check for subdirs
+
+ if ($this->options['checkSubfolders']) {
+ if (isset($stat['dirs'])) {
+ if ($stat['dirs']) {
+ $stat['dirs'] = 1;
+ } else {
+ unset($stat['dirs']);
+ }
+ } elseif (!empty($stat['alias']) && !empty($stat['target'])) {
+ $stat['dirs'] = isset($this->cache[$stat['target']])
+ ? intval(isset($this->cache[$stat['target']]['dirs']))
+ : $this->_subdirs($stat['target']);
+
+ } elseif ($this->_subdirs($path)) {
+ $stat['dirs'] = 1;
+ }
+ } else {
+ $stat['dirs'] = 1;
+ }
+ } else {
+ // for files - check for thumbnails
+ $p = isset($stat['target']) ? $stat['target'] : $path;
+ if ($this->tmbURL && !isset($stat['tmb']) && $this->canCreateTmb($p, $stat)) {
+ $tmb = $this->gettmb($p, $stat);
+ $stat['tmb'] = $tmb ? $tmb : 1;
+ }
+
+ }
+ }
+
+ if (!empty($stat['alias']) && !empty($stat['target'])) {
+ $stat['thash'] = $this->encode($stat['target']);
+ unset($stat['target']);
+ }
+
+ if (isset($this->options['netkey']) && $path === $this->root) {
+ $stat['netkey'] = $this->options['netkey'];
+ }
+
+ return $this->cache[$path] = $stat;
+ }
+
+ /**
+ * Get stat for folder content and put in cache
+ *
+ * @param string $path
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function cacheDir($path) {
+ $this->dirsCache[$path] = array();
+
+ foreach ($this->_scandir($path) as $p) {
+ if (($stat = $this->stat($p)) && empty($stat['hidden'])) {
+ $this->dirsCache[$path][] = $p;
+ }
+ }
+ }
+
+ /**
+ * Clean cache
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function clearcache() {
+ $this->cache = $this->dirsCache = array();
+ }
+
+ /**
+ * Return file mimetype
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function mimetype($path, $name = '') {
+ $type = '';
+
+ if ($this->mimeDetect == 'finfo') {
+ if ($type = @finfo_file($this->finfo, $path)) {
+ if ($name === '') {
+ $name = $path;
+ }
+ $ext = (false === $pos = strrpos($name, '.')) ? '' : substr($name, $pos + 1);
+ if ($ext && preg_match('~^application/(?:octet-stream|(?:x-)?zip)~', $type)) {
+ if (isset(elFinderVolumeDriver::$mimetypes[$ext])) $type = elFinderVolumeDriver::$mimetypes[$ext];
+ }
+ }
+ } elseif ($type == 'mime_content_type') {
+ $type = mime_content_type($path);
+ } else {
+ $type = elFinderVolumeDriver::mimetypeInternalDetect($path);
+ }
+
+ $type = explode(';', $type);
+ $type = trim($type[0]);
+
+ if (in_array($type, array('application/x-empty', 'inode/x-empty'))) {
+ // finfo return this mime for empty files
+ $type = 'text/plain';
+ } elseif ($type == 'application/x-zip') {
+ // http://elrte.org/redmine/issues/163
+ $type = 'application/zip';
+ }
+
+ return $type == 'unknown' && $this->mimeDetect != 'internal'
+ ? elFinderVolumeDriver::mimetypeInternalDetect($path)
+ : $type;
+
+ }
+
+ /**
+ * Detect file mimetype using "internal" method
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ static protected function mimetypeInternalDetect($path) {
+ $pinfo = pathinfo($path);
+ $ext = isset($pinfo['extension']) ? strtolower($pinfo['extension']) : '';
+ return isset(elFinderVolumeDriver::$mimetypes[$ext]) ? elFinderVolumeDriver::$mimetypes[$ext] : 'unknown';
+
+ }
+
+ /**
+ * Return file/total directory size
+ *
+ * @param string $path file path
+ * @return int
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function countSize($path) {
+ $stat = $this->stat($path);
+
+ if (empty($stat) || !$stat['read'] || !empty($stat['hidden'])) {
+ return 'unknown';
+ }
+
+ if ($stat['mime'] != 'directory') {
+ return $stat['size'];
+ }
+
+ $subdirs = $this->options['checkSubfolders'];
+ $this->options['checkSubfolders'] = true;
+ $result = 0;
+ foreach ($this->getScandir($path) as $stat) {
+ $size = $stat['mime'] == 'directory' && $stat['read']
+ ? $this->countSize($this->_joinPath($path, $stat['name']))
+ : (isset($stat['size']) ? intval($stat['size']) : 0);
+ if ($size > 0) {
+ $result += $size;
+ }
+ }
+ $this->options['checkSubfolders'] = $subdirs;
+ return $result;
+ }
+
+ /**
+ * Return true if all mimes is directory or files
+ *
+ * @param string $mime1 mimetype
+ * @param string $mime2 mimetype
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function isSameType($mime1, $mime2) {
+ return ($mime1 == 'directory' && $mime1 == $mime2) || ($mime1 != 'directory' && $mime2 != 'directory');
+ }
+
+ /**
+ * If file has required attr == $val - return file path,
+ * If dir has child with has required attr == $val - return child path
+ *
+ * @param string $path file path
+ * @param string $attr attribute name
+ * @param bool $val attribute value
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function closestByAttr($path, $attr, $val) {
+ $stat = $this->stat($path);
+
+ if (empty($stat)) {
+ return false;
+ }
+
+ $v = isset($stat[$attr]) ? $stat[$attr] : false;
+
+ if ($v == $val) {
+ return $path;
+ }
+
+ return $stat['mime'] == 'directory'
+ ? $this->childsByAttr($path, $attr, $val)
+ : false;
+ }
+
+ /**
+ * Return first found children with required attr == $val
+ *
+ * @param string $path file path
+ * @param string $attr attribute name
+ * @param bool $val attribute value
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function childsByAttr($path, $attr, $val) {
+ foreach ($this->_scandir($path) as $p) {
+ if (($_p = $this->closestByAttr($p, $attr, $val)) != false) {
+ return $_p;
+ }
+ }
+ return false;
+ }
+
+ /***************** get content *******************/
+
+ /**
+ * Return required dir's files info.
+ * If onlyMimes is set - return only dirs and files of required mimes
+ *
+ * @param string $path dir path
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function getScandir($path) {
+ $files = array();
+
+ !isset($this->dirsCache[$path]) && $this->cacheDir($path);
+
+ foreach ($this->dirsCache[$path] as $p) {
+ if (($stat = $this->stat($p)) && empty($stat['hidden'])) {
+ $files[] = $stat;
+ }
+ }
+
+ return $files;
+ }
+
+
+ /**
+ * Return subdirs tree
+ *
+ * @param string $path parent dir path
+ * @param int $deep tree deep
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function gettree($path, $deep, $exclude='') {
+ $dirs = array();
+
+ !isset($this->dirsCache[$path]) && $this->cacheDir($path);
+
+ foreach ($this->dirsCache[$path] as $p) {
+ $stat = $this->stat($p);
+
+ if ($stat && empty($stat['hidden']) && $p != $exclude && $stat['mime'] == 'directory') {
+ $dirs[] = $stat;
+ if ($deep > 0 && !empty($stat['dirs'])) {
+ $dirs = array_merge($dirs, $this->gettree($p, $deep-1));
+ }
+ }
+ }
+
+ return $dirs;
+ }
+
+ /**
+ * Recursive files search
+ *
+ * @param string $path dir path
+ * @param string $q search string
+ * @param array $mimes
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function doSearch($path, $q, $mimes) {
+ $result = array();
+
+ foreach($this->_scandir($path) as $p) {
+ $stat = $this->stat($p);
+
+ if (!$stat) { // invalid links
+ continue;
+ }
+
+ if (!empty($stat['hidden']) || !$this->mimeAccepted($stat['mime'])) {
+ continue;
+ }
+
+ $name = $stat['name'];
+
+ if ($this->stripos($name, $q) !== false) {
+ $stat['path'] = $this->_path($p);
+ if ($this->URL && !isset($stat['url'])) {
+ $stat['url'] = $this->URL . str_replace($this->separator, '/', substr($p, strlen($this->root) + 1));
+ }
+
+ $result[] = $stat;
+ }
+ if ($stat['mime'] == 'directory' && $stat['read'] && !isset($stat['alias'])) {
+ $result = array_merge($result, $this->doSearch($p, $q, $mimes));
+ }
+ }
+
+ return $result;
+ }
+
+ /********************** manuipulations ******************/
+
+ /**
+ * Copy file/recursive copy dir only in current volume.
+ * Return new file path or false.
+ *
+ * @param string $src source path
+ * @param string $dst destination dir path
+ * @param string $name new file name (optionaly)
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function copy($src, $dst, $name) {
+ $srcStat = $this->stat($src);
+ $this->clearcache();
+
+ if (!empty($srcStat['thash'])) {
+ $target = $this->decode($srcStat['thash']);
+ $stat = $this->stat($target);
+ $this->clearcache();
+ return $stat && $this->_symlink($target, $dst, $name)
+ ? $this->_joinPath($dst, $name)
+ : $this->setError(elFinder::ERROR_COPY, $this->_path($src));
+ }
+
+ if ($srcStat['mime'] == 'directory') {
+ $test = $this->stat($this->_joinPath($dst, $name));
+
+ if (($test && $test['mime'] != 'directory') || !$this->_mkdir($dst, $name)) {
+ return $this->setError(elFinder::ERROR_COPY, $this->_path($src));
+ }
+
+ $dst = $this->_joinPath($dst, $name);
+
+ foreach ($this->getScandir($src) as $stat) {
+ if (empty($stat['hidden'])) {
+ $name = $stat['name'];
+ if (!$this->copy($this->_joinPath($src, $name), $dst, $name)) {
+ $this->remove($dst, true); // fall back
+ return false;
+ }
+ }
+ }
+ $this->clearcache();
+ return $dst;
+ }
+
+ return $this->_copy($src, $dst, $name)
+ ? $this->_joinPath($dst, $name)
+ : $this->setError(elFinder::ERROR_COPY, $this->_path($src));
+ }
+
+ /**
+ * Move file
+ * Return new file path or false.
+ *
+ * @param string $src source path
+ * @param string $dst destination dir path
+ * @param string $name new file name
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function move($src, $dst, $name) {
+ $stat = $this->stat($src);
+ $stat['realpath'] = $src;
+ $this->rmTmb($stat); // can not do rmTmb() after _move()
+ $this->clearcache();
+
+ if ($this->_move($src, $dst, $name)) {
+ $this->removed[] = $stat;
+
+ return $this->_joinPath($dst, $name);
+ }
+
+ return $this->setError(elFinder::ERROR_MOVE, $this->_path($src));
+ }
+
+ /**
+ * Copy file from another volume.
+ * Return new file path or false.
+ *
+ * @param Object $volume source volume
+ * @param string $src source file hash
+ * @param string $destination destination dir path
+ * @param string $name file name
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function copyFrom($volume, $src, $destination, $name) {
+
+ if (($source = $volume->file($src)) == false) {
+ return $this->setError(elFinder::ERROR_COPY, '#'.$src, $volume->error());
+ }
+
+ $errpath = $volume->path($src);
+
+ if (!$this->nameAccepted($source['name'])) {
+ return $this->setError(elFinder::ERROR_COPY, $errpath, elFinder::ERROR_INVALID_NAME);
+ }
+
+ if (!$source['read']) {
+ return $this->setError(elFinder::ERROR_COPY, $errpath, elFinder::ERROR_PERM_DENIED);
+ }
+
+ if ($source['mime'] == 'directory') {
+ $stat = $this->stat($this->_joinPath($destination, $name));
+ $this->clearcache();
+ if ((!$stat || $stat['mime'] != 'directory') && !$this->_mkdir($destination, $name)) {
+ return $this->setError(elFinder::ERROR_COPY, $errpath);
+ }
+
+ $path = $this->_joinPath($destination, $name);
+
+ foreach ($volume->scandir($src) as $entr) {
+ if (!$this->copyFrom($volume, $entr['hash'], $path, $entr['name'])) {
+ return false;
+ }
+ }
+
+ } else {
+ // $mime = $source['mime'];
+ // $w = $h = 0;
+ if (($dim = $volume->dimensions($src))) {
+ $s = explode('x', $dim);
+ $source['width'] = $s[0];
+ $source['height'] = $s[1];
+ }
+
+ if (($fp = $volume->open($src)) == false
+ || ($path = $this->_save($fp, $destination, $name, $source)) == false) {
+ $fp && $volume->close($fp, $src);
+ return $this->setError(elFinder::ERROR_COPY, $errpath);
+ }
+ $volume->close($fp, $src);
+ }
+
+ return $path;
+ }
+
+ /**
+ * Remove file/ recursive remove dir
+ *
+ * @param string $path file path
+ * @param bool $force try to remove even if file locked
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function remove($path, $force = false) {
+ $stat = $this->stat($path);
+
+ if (empty($stat)) {
+ return $this->setError(elFinder::ERROR_RM, $this->_path($path), elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ $stat['realpath'] = $path;
+ $this->rmTmb($stat);
+ $this->clearcache();
+
+ if (!$force && !empty($stat['locked'])) {
+ return $this->setError(elFinder::ERROR_LOCKED, $this->_path($path));
+ }
+
+ if ($stat['mime'] == 'directory') {
+ foreach ($this->_scandir($path) as $p) {
+ $name = $this->_basename($p);
+ if ($name != '.' && $name != '..' && !$this->remove($p)) {
+ return false;
+ }
+ }
+ if (!$this->_rmdir($path)) {
+ return $this->setError(elFinder::ERROR_RM, $this->_path($path));
+ }
+
+ } else {
+ if (!$this->_unlink($path)) {
+ return $this->setError(elFinder::ERROR_RM, $this->_path($path));
+ }
+ }
+
+ $this->removed[] = $stat;
+ return true;
+ }
+
+
+ /************************* thumbnails **************************/
+
+ /**
+ * Return thumbnail file name for required file
+ *
+ * @param array $stat file stat
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function tmbname($stat) {
+ return $stat['hash'].$stat['ts'].'.png';
+ }
+
+ /**
+ * Return thumnbnail name if exists
+ *
+ * @param string $path file path
+ * @param array $stat file stat
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function gettmb($path, $stat) {
+ if ($this->tmbURL && $this->tmbPath) {
+ // file itself thumnbnail
+ if (strpos($path, $this->tmbPath) === 0) {
+ return basename($path);
+ }
+
+ $name = $this->tmbname($stat);
+ if (file_exists($this->tmbPath.DIRECTORY_SEPARATOR.$name)) {
+ return $name;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Return true if thumnbnail for required file can be created
+ *
+ * @param string $path thumnbnail path
+ * @param array $stat file stat
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function canCreateTmb($path, $stat) {
+ return $this->tmbPathWritable
+ && strpos($path, $this->tmbPath) === false // do not create thumnbnail for thumnbnail
+ && $this->imgLib
+ && strpos($stat['mime'], 'image') === 0
+ && ($this->imgLib == 'gd' ? $stat['mime'] == 'image/jpeg' || $stat['mime'] == 'image/png' || $stat['mime'] == 'image/gif' : true);
+ }
+
+ /**
+ * Return true if required file can be resized.
+ * By default - the same as canCreateTmb
+ *
+ * @param string $path thumnbnail path
+ * @param array $stat file stat
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function canResize($path, $stat) {
+ return $this->canCreateTmb($path, $stat);
+ }
+
+ /**
+ * Create thumnbnail and return it's URL on success
+ *
+ * @param string $path file path
+ * @param string $mime file mime type
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function createTmb($path, $stat) {
+ if (!$stat || !$this->canCreateTmb($path, $stat)) {
+ return false;
+ }
+
+ $name = $this->tmbname($stat);
+ $tmb = $this->tmbPath.DIRECTORY_SEPARATOR.$name;
+
+ // copy image into tmbPath so some drivers does not store files on local fs
+ if (($src = $this->_fopen($path, 'rb')) == false) {
+ return false;
+ }
+
+ if (($trg = fopen($tmb, 'wb')) == false) {
+ $this->_fclose($src, $path);
+ return false;
+ }
+
+ while (!feof($src)) {
+ fwrite($trg, fread($src, 8192));
+ }
+
+ $this->_fclose($src, $path);
+ fclose($trg);
+
+ $result = false;
+
+ $tmbSize = $this->tmbSize;
+
+ if (($s = getimagesize($tmb)) == false) {
+ return false;
+ }
+
+ /* If image smaller or equal thumbnail size - just fitting to thumbnail square */
+ if ($s[0] <= $tmbSize && $s[1] <= $tmbSize) {
+ $result = $this->imgSquareFit($tmb, $tmbSize, $tmbSize, 'center', 'middle', $this->options['tmbBgColor'], 'png' );
+ } else {
+
+ if ($this->options['tmbCrop']) {
+
+ /* Resize and crop if image bigger than thumbnail */
+ if (!(($s[0] > $tmbSize && $s[1] <= $tmbSize) || ($s[0] <= $tmbSize && $s[1] > $tmbSize) ) || ($s[0] > $tmbSize && $s[1] > $tmbSize)) {
+ $result = $this->imgResize($tmb, $tmbSize, $tmbSize, true, false, 'png');
+ }
+
+ if (($s = getimagesize($tmb)) != false) {
+ $x = $s[0] > $tmbSize ? intval(($s[0] - $tmbSize)/2) : 0;
+ $y = $s[1] > $tmbSize ? intval(($s[1] - $tmbSize)/2) : 0;
+ $result = $this->imgCrop($tmb, $tmbSize, $tmbSize, $x, $y, 'png');
+ }
+
+ } else {
+ $result = $this->imgResize($tmb, $tmbSize, $tmbSize, true, true, 'png');
+ }
+
+ $result = $this->imgSquareFit($tmb, $tmbSize, $tmbSize, 'center', 'middle', $this->options['tmbBgColor'], 'png' );
+ }
+
+ if (!$result) {
+ unlink($tmb);
+ return false;
+ }
+
+ return $name;
+ }
+
+ /**
+ * Resize image
+ *
+ * @param string $path image file
+ * @param int $width new width
+ * @param int $height new height
+ * @param bool $keepProportions crop image
+ * @param bool $resizeByBiggerSide resize image based on bigger side if true
+ * @param string $destformat image destination format
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ protected function imgResize($path, $width, $height, $keepProportions = false, $resizeByBiggerSide = true, $destformat = null) {
+ if (($s = @getimagesize($path)) == false) {
+ return false;
+ }
+
+ $result = false;
+
+ list($size_w, $size_h) = array($width, $height);
+
+ if ($keepProportions == true) {
+
+ list($orig_w, $orig_h, $new_w, $new_h) = array($s[0], $s[1], $width, $height);
+
+ /* Calculating image scale width and height */
+ $xscale = $orig_w / $new_w;
+ $yscale = $orig_h / $new_h;
+
+ /* Resizing by biggest side */
+
+ if ($resizeByBiggerSide) {
+
+ if ($orig_w > $orig_h) {
+ $size_h = $orig_h * $width / $orig_w;
+ $size_w = $width;
+ } else {
+ $size_w = $orig_w * $height / $orig_h;
+ $size_h = $height;
+ }
+
+ } else {
+ if ($orig_w > $orig_h) {
+ $size_w = $orig_w * $height / $orig_h;
+ $size_h = $height;
+ } else {
+ $size_h = $orig_h * $width / $orig_w;
+ $size_w = $width;
+ }
+ }
+ }
+
+ switch ($this->imgLib) {
+ case 'imagick':
+
+ try {
+ $img = new imagick($path);
+ } catch (Exception $e) {
+
+ return false;
+ }
+
+ // Imagick::FILTER_BOX faster than FILTER_LANCZOS so use for createTmb
+ // resize bench: http://app-mgng.rhcloud.com/9
+ // resize sample: http://www.dylanbeattie.net/magick/filters/result.html
+ $filter = ($destformat === 'png' /* createTmb */)? Imagick::FILTER_BOX : Imagick::FILTER_LANCZOS;
+ $img->resizeImage($size_w, $size_h, $filter, 1);
+
+ $result = $img->writeImage($path);
+ $img->destroy();
+
+ return $result ? $path : false;
+
+ break;
+
+ case 'gd':
+ $img = self::gdImageCreate($path,$s['mime']);
+
+ if ($img && false != ($tmp = imagecreatetruecolor($size_w, $size_h))) {
+
+ self::gdImageBackground($tmp,$this->options['tmbBgColor']);
+
+ if (!imagecopyresampled($tmp, $img, 0, 0, 0, 0, $size_w, $size_h, $s[0], $s[1])) {
+ return false;
+ }
+
+ $result = self::gdImage($tmp, $path, $destformat, $s['mime']);
+
+ imagedestroy($img);
+ imagedestroy($tmp);
+
+ return $result ? $path : false;
+
+ }
+ break;
+ }
+
+ return false;
+ }
+
+ /**
+ * Crop image
+ *
+ * @param string $path image file
+ * @param int $width crop width
+ * @param int $height crop height
+ * @param bool $x crop left offset
+ * @param bool $y crop top offset
+ * @param string $destformat image destination format
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ protected function imgCrop($path, $width, $height, $x, $y, $destformat = null) {
+ if (($s = @getimagesize($path)) == false) {
+ return false;
+ }
+
+ $result = false;
+
+ switch ($this->imgLib) {
+ case 'imagick':
+
+ try {
+ $img = new imagick($path);
+ } catch (Exception $e) {
+
+ return false;
+ }
+
+ $img->cropImage($width, $height, $x, $y);
+
+ $result = $img->writeImage($path);
+
+ $img->destroy();
+
+ return $result ? $path : false;
+
+ break;
+
+ case 'gd':
+ $img = self::gdImageCreate($path,$s['mime']);
+
+ if ($img && false != ($tmp = imagecreatetruecolor($width, $height))) {
+
+ self::gdImageBackground($tmp,$this->options['tmbBgColor']);
+
+ $size_w = $width;
+ $size_h = $height;
+
+ if ($s[0] < $width || $s[1] < $height) {
+ $size_w = $s[0];
+ $size_h = $s[1];
+ }
+
+ if (!imagecopy($tmp, $img, 0, 0, $x, $y, $size_w, $size_h)) {
+ return false;
+ }
+
+ $result = self::gdImage($tmp, $path, $destformat, $s['mime']);
+
+ imagedestroy($img);
+ imagedestroy($tmp);
+
+ return $result ? $path : false;
+
+ }
+ break;
+ }
+
+ return false;
+ }
+
+ /**
+ * Put image to square
+ *
+ * @param string $path image file
+ * @param int $width square width
+ * @param int $height square height
+ * @param int $align reserved
+ * @param int $valign reserved
+ * @param string $bgcolor square background color in #rrggbb format
+ * @param string $destformat image destination format
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ protected function imgSquareFit($path, $width, $height, $align = 'center', $valign = 'middle', $bgcolor = '#0000ff', $destformat = null) {
+ if (($s = @getimagesize($path)) == false) {
+ return false;
+ }
+
+ $result = false;
+
+ /* Coordinates for image over square aligning */
+ $y = ceil(abs($height - $s[1]) / 2);
+ $x = ceil(abs($width - $s[0]) / 2);
+
+ switch ($this->imgLib) {
+ case 'imagick':
+ try {
+ $img = new imagick($path);
+ } catch (Exception $e) {
+ return false;
+ }
+
+ $img1 = new Imagick();
+ $img1->newImage($width, $height, new ImagickPixel($bgcolor));
+ $img1->setImageColorspace($img->getImageColorspace());
+ $img1->setImageFormat($destformat != null ? $destformat : $img->getFormat());
+ $img1->compositeImage( $img, imagick::COMPOSITE_OVER, $x, $y );
+ $result = $img1->writeImage($path);
+ $img->destroy();
+ return $result ? $path : false;
+
+ break;
+
+ case 'gd':
+ $img = self::gdImageCreate($path,$s['mime']);
+
+ if ($img && false != ($tmp = imagecreatetruecolor($width, $height))) {
+
+ self::gdImageBackground($tmp,$bgcolor);
+
+ if (!imagecopy($tmp, $img, $x, $y, 0, 0, $s[0], $s[1])) {
+ return false;
+ }
+
+ $result = self::gdImage($tmp, $path, $destformat, $s['mime']);
+
+ imagedestroy($img);
+ imagedestroy($tmp);
+
+ return $result ? $path : false;
+ }
+ break;
+ }
+
+ return false;
+ }
+
+ /**
+ * Rotate image
+ *
+ * @param string $path image file
+ * @param int $degree rotete degrees
+ * @param string $bgcolor square background color in #rrggbb format
+ * @param string $destformat image destination format
+ * @return string|false
+ * @author nao-pon
+ * @author Troex Nevelin
+ **/
+ protected function imgRotate($path, $degree, $bgcolor = '#ffffff', $destformat = null) {
+ if (($s = @getimagesize($path)) == false) {
+ return false;
+ }
+
+ $result = false;
+
+ switch ($this->imgLib) {
+ case 'imagick':
+ try {
+ $img = new imagick($path);
+ } catch (Exception $e) {
+ return false;
+ }
+
+ $img->rotateImage(new ImagickPixel($bgcolor), $degree);
+ $result = $img->writeImage($path);
+ $img->destroy();
+ return $result ? $path : false;
+
+ break;
+
+ case 'gd':
+ $img = self::gdImageCreate($path,$s['mime']);
+
+ $degree = 360 - $degree;
+ list($r, $g, $b) = sscanf($bgcolor, "#%02x%02x%02x");
+ $bgcolor = imagecolorallocate($img, $r, $g, $b);
+ $tmp = imageRotate($img, $degree, (int)$bgcolor);
+
+ $result = self::gdImage($tmp, $path, $destformat, $s['mime']);
+
+ imageDestroy($img);
+ imageDestroy($tmp);
+
+ return $result ? $path : false;
+
+ break;
+ }
+
+ return false;
+ }
+
+ /**
+ * Execute shell command
+ *
+ * @param string $command command line
+ * @param array $output stdout strings
+ * @param array $return_var process exit code
+ * @param array $error_output stderr strings
+ * @return int exit code
+ * @author Alexey Sukhotin
+ **/
+ protected function procExec($command , array &$output = null, &$return_var = -1, array &$error_output = null) {
+
+ $descriptorspec = array(
+ 0 => array("pipe", "r"), // stdin
+ 1 => array("pipe", "w"), // stdout
+ 2 => array("pipe", "w") // stderr
+ );
+
+ $process = proc_open($command, $descriptorspec, $pipes, null, null);
+
+ if (is_resource($process)) {
+
+ fclose($pipes[0]);
+
+ $tmpout = '';
+ $tmperr = '';
+
+ $output = stream_get_contents($pipes[1]);
+ $error_output = stream_get_contents($pipes[2]);
+
+ fclose($pipes[1]);
+ fclose($pipes[2]);
+ $return_var = proc_close($process);
+
+
+ }
+
+ return $return_var;
+
+ }
+
+ /**
+ * Remove thumbnail, also remove recursively if stat is directory
+ *
+ * @param string $stat file stat
+ * @return void
+ * @author Dmitry (dio) Levashov
+ * @author Naoki Sawada
+ * @author Troex Nevelin
+ **/
+ protected function rmTmb($stat) {
+ if ($stat['mime'] === 'directory') {
+ foreach ($this->_scandir($this->decode($stat['hash'])) as $p) {
+ $name = $this->_basename($p);
+ $name != '.' && $name != '..' && $this->rmTmb($this->stat($p));
+ }
+ } else if (!empty($stat['tmb']) && $stat['tmb'] != "1") {
+ $tmb = $this->tmbPath.DIRECTORY_SEPARATOR.$stat['tmb'];
+ file_exists($tmb) && @unlink($tmb);
+ clearstatcache();
+ }
+ }
+
+ /**
+ * Create an gd image according to the specified mime type
+ *
+ * @param string $path image file
+ * @param string $mime
+ * @return gd image resource identifier
+ */
+ protected function gdImageCreate($path,$mime){
+ switch($mime){
+ case 'image/jpeg':
+ return imagecreatefromjpeg($path);
+
+ case 'image/png':
+ return imagecreatefrompng($path);
+
+ case 'image/gif':
+ return imagecreatefromgif($path);
+
+ case 'image/xbm':
+ return imagecreatefromxbm($path);
+ }
+ return false;
+ }
+
+ /**
+ * Output gd image to file
+ *
+ * @param resource $image gd image resource
+ * @param string $filename The path to save the file to.
+ * @param string $destformat The Image type to use for $filename
+ * @param string $mime The original image mime type
+ */
+ protected function gdImage($image, $filename, $destformat, $mime ){
+
+ if ($destformat == 'jpg' || ($destformat == null && $mime == 'image/jpeg')) {
+ return imagejpeg($image, $filename, 100);
+ }
+
+ if ($destformat == 'gif' || ($destformat == null && $mime == 'image/gif')) {
+ return imagegif($image, $filename, 7);
+ }
+
+ return imagepng($image, $filename, 7);
+ }
+
+ /**
+ * Assign the proper background to a gd image
+ *
+ * @param resource $image gd image resource
+ * @param string $bgcolor background color in #rrggbb format
+ */
+ protected function gdImageBackground($image, $bgcolor){
+
+ if( $bgcolor == 'transparent' ){
+ imagesavealpha($image,true);
+ $bgcolor1 = imagecolorallocatealpha($image, 255, 255, 255, 127);
+
+ }else{
+ list($r, $g, $b) = sscanf($bgcolor, "#%02x%02x%02x");
+ $bgcolor1 = imagecolorallocate($image, $r, $g, $b);
+ }
+
+ imagefill($image, 0, 0, $bgcolor1);
+ }
+
+ /*********************** misc *************************/
+
+ /**
+ * Return smart formatted date
+ *
+ * @param int $ts file timestamp
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ // protected function formatDate($ts) {
+ // if ($ts > $this->today) {
+ // return 'Today '.date($this->options['timeFormat'], $ts);
+ // }
+ //
+ // if ($ts > $this->yesterday) {
+ // return 'Yesterday '.date($this->options['timeFormat'], $ts);
+ // }
+ //
+ // return date($this->options['dateFormat'], $ts);
+ // }
+
+ /**
+ * Find position of first occurrence of string in a string with multibyte support
+ *
+ * @param string $haystack The string being checked.
+ * @param string $needle The string to find in haystack.
+ * @param int $offset The search offset. If it is not specified, 0 is used.
+ * @return int|bool
+ * @author Alexey Sukhotin
+ **/
+ protected function stripos($haystack , $needle , $offset = 0) {
+ if (function_exists('mb_stripos')) {
+ return mb_stripos($haystack , $needle , $offset);
+ } else if (function_exists('mb_strtolower') && function_exists('mb_strpos')) {
+ return mb_strpos(mb_strtolower($haystack), mb_strtolower($needle), $offset);
+ }
+ return stripos($haystack , $needle , $offset);
+ }
+
+ /**
+ * Get server side available archivers
+ *
+ * @param bool $use_cache
+ * @return array
+ */
+ protected function getArchivers($use_cache = true) {
+ if (!function_exists('proc_open')) {
+ return array();
+ }
+
+ if ($use_cache && isset($_SESSION['ELFINDER_ARCHIVERS_CACHE']) && is_array($_SESSION['ELFINDER_ARCHIVERS_CACHE'])) {
+ return $_SESSION['ELFINDER_ARCHIVERS_CACHE'];
+ }
+
+ $arcs = array(
+ 'create' => array(),
+ 'extract' => array()
+ );
+
+ $this->procExec('tar --version', $o, $ctar);
+
+ if ($ctar == 0) {
+ $arcs['create']['application/x-tar'] = array('cmd' => 'tar', 'argc' => '-cf', 'ext' => 'tar');
+ $arcs['extract']['application/x-tar'] = array('cmd' => 'tar', 'argc' => '-xf', 'ext' => 'tar');
+ unset($o);
+ $test = $this->procExec('gzip --version', $o, $c);
+
+ if ($c == 0) {
+ $arcs['create']['application/x-gzip'] = array('cmd' => 'tar', 'argc' => '-czf', 'ext' => 'tgz');
+ $arcs['extract']['application/x-gzip'] = array('cmd' => 'tar', 'argc' => '-xzf', 'ext' => 'tgz');
+ }
+ unset($o);
+ $test = $this->procExec('bzip2 --version', $o, $c);
+ if ($c == 0) {
+ $arcs['create']['application/x-bzip2'] = array('cmd' => 'tar', 'argc' => '-cjf', 'ext' => 'tbz');
+ $arcs['extract']['application/x-bzip2'] = array('cmd' => 'tar', 'argc' => '-xjf', 'ext' => 'tbz');
+ }
+ }
+ unset($o);
+ $this->procExec('zip -v', $o, $c);
+ if ($c == 0) {
+ $arcs['create']['application/zip'] = array('cmd' => 'zip', 'argc' => '-r9', 'ext' => 'zip');
+ }
+ unset($o);
+ $this->procExec('unzip --help', $o, $c);
+ if ($c == 0) {
+ $arcs['extract']['application/zip'] = array('cmd' => 'unzip', 'argc' => '', 'ext' => 'zip');
+ }
+ unset($o);
+ $this->procExec('rar --version', $o, $c);
+ if ($c == 0 || $c == 7) {
+ $arcs['create']['application/x-rar'] = array('cmd' => 'rar', 'argc' => 'a -inul', 'ext' => 'rar');
+ $arcs['extract']['application/x-rar'] = array('cmd' => 'rar', 'argc' => 'x -y', 'ext' => 'rar');
+ } else {
+ unset($o);
+ $test = $this->procExec('unrar', $o, $c);
+ if ($c==0 || $c == 7) {
+ $arcs['extract']['application/x-rar'] = array('cmd' => 'unrar', 'argc' => 'x -y', 'ext' => 'rar');
+ }
+ }
+ unset($o);
+ $this->procExec('7za --help', $o, $c);
+ if ($c == 0) {
+ $arcs['create']['application/x-7z-compressed'] = array('cmd' => '7za', 'argc' => 'a', 'ext' => '7z');
+ $arcs['extract']['application/x-7z-compressed'] = array('cmd' => '7za', 'argc' => 'e -y', 'ext' => '7z');
+
+ if (empty($arcs['create']['application/x-gzip'])) {
+ $arcs['create']['application/x-gzip'] = array('cmd' => '7za', 'argc' => 'a -tgzip', 'ext' => 'tar.gz');
+ }
+ if (empty($arcs['extract']['application/x-gzip'])) {
+ $arcs['extract']['application/x-gzip'] = array('cmd' => '7za', 'argc' => 'e -tgzip -y', 'ext' => 'tar.gz');
+ }
+ if (empty($arcs['create']['application/x-bzip2'])) {
+ $arcs['create']['application/x-bzip2'] = array('cmd' => '7za', 'argc' => 'a -tbzip2', 'ext' => 'tar.bz');
+ }
+ if (empty($arcs['extract']['application/x-bzip2'])) {
+ $arcs['extract']['application/x-bzip2'] = array('cmd' => '7za', 'argc' => 'a -tbzip2 -y', 'ext' => 'tar.bz');
+ }
+ if (empty($arcs['create']['application/zip'])) {
+ $arcs['create']['application/zip'] = array('cmd' => '7za', 'argc' => 'a -tzip -l', 'ext' => 'zip');
+ }
+ if (empty($arcs['extract']['application/zip'])) {
+ $arcs['extract']['application/zip'] = array('cmd' => '7za', 'argc' => 'e -tzip -y', 'ext' => 'zip');
+ }
+ if (empty($arcs['create']['application/x-tar'])) {
+ $arcs['create']['application/x-tar'] = array('cmd' => '7za', 'argc' => 'a -ttar -l', 'ext' => 'tar');
+ }
+ if (empty($arcs['extract']['application/x-tar'])) {
+ $arcs['extract']['application/x-tar'] = array('cmd' => '7za', 'argc' => 'e -ttar -y', 'ext' => 'tar');
+ }
+ } else if (substr(PHP_OS,0,3) === 'WIN') {
+ // check `7z` for Windows server.
+ unset($o);
+ $this->procExec('7z', $o, $c);
+ if ($c == 0) {
+ $arcs['create']['application/x-7z-compressed'] = array('cmd' => '7z', 'argc' => 'a -mx0', 'ext' => '7z');
+ $arcs['extract']['application/x-7z-compressed'] = array('cmd' => '7z', 'argc' => 'x -y', 'ext' => '7z');
+
+ if (empty($arcs['create']['application/x-gzip'])) {
+ $arcs['create']['application/x-gzip'] = array('cmd' => '7z', 'argc' => 'a -tgzip -mx0', 'ext' => 'tar.gz');
+ }
+ if (empty($arcs['extract']['application/x-gzip'])) {
+ $arcs['extract']['application/x-gzip'] = array('cmd' => '7z', 'argc' => 'x -tgzip -y', 'ext' => 'tar.gz');
+ }
+ if (empty($arcs['create']['application/x-bzip2'])) {
+ $arcs['create']['application/x-bzip2'] = array('cmd' => '7z', 'argc' => 'a -tbzip2 -mx0', 'ext' => 'tar.bz');
+ }
+ if (empty($arcs['extract']['application/x-bzip2'])) {
+ $arcs['extract']['application/x-bzip2'] = array('cmd' => '7z', 'argc' => 'x -tbzip2 -y', 'ext' => 'tar.bz');
+ }
+ if (empty($arcs['create']['application/zip'])) {
+ $arcs['create']['application/zip'] = array('cmd' => '7z', 'argc' => 'a -tzip -l -mx0', 'ext' => 'zip');
+ }
+ if (empty($arcs['extract']['application/zip'])) {
+ $arcs['extract']['application/zip'] = array('cmd' => '7z', 'argc' => 'x -tzip -y', 'ext' => 'zip');
+ }
+ if (empty($arcs['create']['application/x-tar'])) {
+ $arcs['create']['application/x-tar'] = array('cmd' => '7z', 'argc' => 'a -ttar -l -mx0', 'ext' => 'tar');
+ }
+ if (empty($arcs['extract']['application/x-tar'])) {
+ $arcs['extract']['application/x-tar'] = array('cmd' => '7z', 'argc' => 'x -ttar -y', 'ext' => 'tar');
+ }
+ if (empty($arcs['create']['application/x-rar'])) {
+ $arcs['create']['application/x-rar'] = array('cmd' => '7z', 'argc' => 'a -trar -l -mx0', 'ext' => 'rar');
+ }
+ if (empty($arcs['extract']['application/x-rar'])) {
+ $arcs['extract']['application/x-rar'] = array('cmd' => '7z', 'argc' => 'x -trar -y', 'ext' => 'rar');
+ }
+ }
+ }
+
+ $_SESSION['ELFINDER_ARCHIVERS_CACHE'] = $arcs;
+ return $arcs;
+ }
+
+ /**==================================* abstract methods *====================================**/
+
+ /*********************** paths/urls *************************/
+
+ /**
+ * Return parent directory path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _dirname($path);
+
+ /**
+ * Return file name
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _basename($path);
+
+ /**
+ * Join dir name and file name and return full path.
+ * Some drivers (db) use int as path - so we give to concat path to driver itself
+ *
+ * @param string $dir dir path
+ * @param string $name file name
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _joinPath($dir, $name);
+
+ /**
+ * Return normalized path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _normpath($path);
+
+ /**
+ * Return file path related to root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _relpath($path);
+
+ /**
+ * Convert path related to root dir into real path
+ *
+ * @param string $path rel file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _abspath($path);
+
+ /**
+ * Return fake path started from root dir.
+ * Required to show path on client side.
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _path($path);
+
+ /**
+ * Return true if $path is children of $parent
+ *
+ * @param string $path path to check
+ * @param string $parent parent path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _inpath($path, $parent);
+
+ /**
+ * Return stat for given path.
+ * Stat contains following fields:
+ * - (int) size file size in b. required
+ * - (int) ts file modification time in unix time. required
+ * - (string) mime mimetype. required for folders, others - optionally
+ * - (bool) read read permissions. required
+ * - (bool) write write permissions. required
+ * - (bool) locked is object locked. optionally
+ * - (bool) hidden is object hidden. optionally
+ * - (string) alias for symlinks - link target path relative to root path. optionally
+ * - (string) target for symlinks - link target path. optionally
+ *
+ * If file does not exists - returns empty array or false.
+ *
+ * @param string $path file path
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _stat($path);
+
+
+ /***************** file stat ********************/
+
+
+ /**
+ * Return true if path is dir and has at least one childs directory
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _subdirs($path);
+
+ /**
+ * Return object width and height
+ * Ususaly used for images, but can be realize for video etc...
+ *
+ * @param string $path file path
+ * @param string $mime file mime type
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _dimensions($path, $mime);
+
+ /******************** file/dir content *********************/
+
+ /**
+ * Return files list in directory
+ *
+ * @param string $path dir path
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _scandir($path);
+
+ /**
+ * Open file and return file pointer
+ *
+ * @param string $path file path
+ * @param bool $write open file for writing
+ * @return resource|false
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _fopen($path, $mode="rb");
+
+ /**
+ * Close opened file
+ *
+ * @param resource $fp file pointer
+ * @param string $path file path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _fclose($fp, $path='');
+
+ /******************** file/dir manipulations *************************/
+
+ /**
+ * Create dir and return created dir path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new directory name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _mkdir($path, $name);
+
+ /**
+ * Create file and return it's path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _mkfile($path, $name);
+
+ /**
+ * Create symlink
+ *
+ * @param string $source file to link to
+ * @param string $targetDir folder to create link in
+ * @param string $name symlink name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _symlink($source, $targetDir, $name);
+
+ /**
+ * Copy file into another file (only inside one volume)
+ *
+ * @param string $source source file path
+ * @param string $target target dir path
+ * @param string $name file name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _copy($source, $targetDir, $name);
+
+ /**
+ * Move file into another parent dir.
+ * Return new file path or false.
+ *
+ * @param string $source source file path
+ * @param string $target target dir path
+ * @param string $name file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _move($source, $targetDir, $name);
+
+ /**
+ * Remove file
+ *
+ * @param string $path file path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _unlink($path);
+
+ /**
+ * Remove dir
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _rmdir($path);
+
+ /**
+ * Create new file and write into it from file pointer.
+ * Return new file path or false on error.
+ *
+ * @param resource $fp file pointer
+ * @param string $dir target dir path
+ * @param string $name file name
+ * @param array $stat file stat (required by some virtual fs)
+ * @return bool|string
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _save($fp, $dir, $name, $stat);
+
+ /**
+ * Get file contents
+ *
+ * @param string $path file path
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _getContents($path);
+
+ /**
+ * Write a string to a file
+ *
+ * @param string $path file path
+ * @param string $content new file content
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ abstract protected function _filePutContents($path, $content);
+
+ /**
+ * Extract files from archive
+ *
+ * @param string $path file path
+ * @param array $arc archiver options
+ * @return bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ abstract protected function _extract($path, $arc);
+
+ /**
+ * Create archive and return its path
+ *
+ * @param string $dir target dir
+ * @param array $files files names list
+ * @param string $name archive name
+ * @param array $arc archiver options
+ * @return string|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ abstract protected function _archive($dir, $files, $name, $arc);
+
+ /**
+ * Detect available archivers
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ abstract protected function _checkArchivers();
+
+} // END class
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeDropbox.class.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeDropbox.class.php
new file mode 100644
index 00000000..8996e37d
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeDropbox.class.php
@@ -0,0 +1,1531 @@
+dropbox_phpFound = in_array('Dropbox_autoload', spl_autoload_functions());
+
+ $opts = array(
+ 'consumerKey' => '',
+ 'consumerSecret' => '',
+ 'accessToken' => '',
+ 'accessTokenSecret' => '',
+ 'dropboxUid' => '',
+ 'root' => 'dropbox',
+ 'path' => '/',
+ 'PDO_DSN' => '', // if empty use 'sqlite:(metaCachePath|tmbPath)/elFinder_dropbox_db_(hash:dropboxUid+consumerSecret)'
+ 'PDO_User' => '',
+ 'PDO_Pass' => '',
+ 'PDO_Options' => array(),
+ 'PDO_DBName' => 'dropbox',
+ 'treeDeep' => 0,
+ 'tmbPath' => '../files/.tmb',
+ 'tmbURL' => 'files/.tmb',
+ 'tmpPath' => '',
+ 'getTmbSize' => 'medium', // small: 32x32, medium or s: 64x64, large or m: 128x128, l: 640x480, xl: 1024x768
+ 'metaCachePath' => '',
+ 'metaCacheTime' => '600', // 10m
+ 'acceptedName' => '#^[^/\\?*:|"<>]*[^./\\?*:|"<>]$#',
+ 'icon' => (defined('ELFINDER_IMG_PARENT_URL')? (rtrim(ELFINDER_IMG_PARENT_URL, '/').'/') : '').'img/volume_icon_dropbox.png'
+ );
+ $this->options = array_merge($this->options, $opts);
+ $this->options['mimeDetect'] = 'internal';
+ }
+
+ /**
+ * Prepare
+ * Call from elFinder::netmout() before volume->mount()
+ *
+ * @return Array
+ * @author Naoki Sawada
+ **/
+ public function netmountPrepare($options) {
+ if (empty($options['consumerKey']) && defined('ELFINDER_DROPBOX_CONSUMERKEY')) $options['consumerKey'] = ELFINDER_DROPBOX_CONSUMERKEY;
+ if (empty($options['consumerSecret']) && defined('ELFINDER_DROPBOX_CONSUMERSECRET')) $options['consumerSecret'] = ELFINDER_DROPBOX_CONSUMERSECRET;
+
+ if ($options['user'] === 'init') {
+
+ if (! $this->dropbox_phpFound || empty($options['consumerKey']) || empty($options['consumerSecret']) || !class_exists('PDO')) {
+ return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
+ }
+
+ if (defined('ELFINDER_DROPBOX_USE_CURL_PUT')) {
+ $this->oauth = new Dropbox_OAuth_Curl($options['consumerKey'], $options['consumerSecret']);
+ } else {
+ if (class_exists('OAuth')) {
+ $this->oauth = new Dropbox_OAuth_PHP($options['consumerKey'], $options['consumerSecret']);
+ } else {
+ if (! class_exists('HTTP_OAuth_Consumer')) {
+ // We're going to try to load in manually
+ include 'HTTP/OAuth/Consumer.php';
+ }
+ if (class_exists('HTTP_OAuth_Consumer')) {
+ $this->oauth = new Dropbox_OAuth_PEAR($options['consumerKey'], $options['consumerSecret']);
+ }
+ }
+ }
+
+ if (! $this->oauth) {
+ return array('exit' => true, 'body' => '{msg:errNetMountNoDriver}');
+ }
+
+ if ($options['pass'] === 'init') {
+ $html = '';
+ if (isset($_SESSION['elFinderDropboxTokens'])) {
+ // token check
+ try {
+ list(, $accessToken, $accessTokenSecret) = $_SESSION['elFinderDropboxTokens'];
+ $this->oauth->setToken($accessToken, $accessTokenSecret);
+ $this->dropbox = new Dropbox_API($this->oauth, $this->options['root']);
+ $this->dropbox->getAccountInfo();
+ $script = '';
+ $html = $script;
+ } catch (Dropbox_Exception $e) {
+ unset($_SESSION['elFinderDropboxTokens']);
+ }
+ }
+ if (! $html) {
+ // get customdata
+ $cdata = '';
+ $innerKeys = array('cmd', 'host', 'options', 'pass', 'protocol', 'user');
+ $post = (strtolower($_SERVER['REQUEST_METHOD']) === 'post')? $_POST : $_GET;
+ foreach($post as $k => $v) {
+ if (! in_array($k, $innerKeys)) {
+ $cdata .= '&' . $k . '=' . rawurlencode($v);
+ }
+ }
+ if (strpos($options['url'], 'http') !== 0 ) {
+ $options['url'] = $this->getConnectorUrl();
+ }
+ $callback = $options['url']
+ . '?cmd=netmount&protocol=dropbox&host=dropbox.com&user=init&pass=return&node='.$options['id'].$cdata;
+
+ try {
+ $tokens = $this->oauth->getRequestToken();
+ $url= $this->oauth->getAuthorizeUrl(rawurlencode($callback));
+ } catch (Dropbox_Exception $e) {
+ return array('exit' => true, 'body' => '{msg:errAccess}');
+ }
+
+ $_SESSION['elFinderDropboxAuthTokens'] = $tokens;
+ $html = ' ';
+ $html .= '';
+ }
+ return array('exit' => true, 'body' => $html);
+ } else {
+ $this->oauth->setToken($_SESSION['elFinderDropboxAuthTokens']);
+ unset($_SESSION['elFinderDropboxAuthTokens']);
+ $tokens = $this->oauth->getAccessToken();
+ $_SESSION['elFinderDropboxTokens'] = array($_GET['uid'], $tokens['token'], $tokens['token_secret']);
+
+ $out = array(
+ 'node' => $_GET['node'],
+ 'json' => '{"protocol": "dropbox", "mode": "done"}',
+ 'bind' => 'netmount'
+ );
+
+ return array('exit' => 'callback', 'out' => $out);
+ }
+ }
+ if (isset($_SESSION['elFinderDropboxTokens'])) {
+ list($options['dropboxUid'], $options['accessToken'], $options['accessTokenSecret']) = $_SESSION['elFinderDropboxTokens'];
+ }
+ unset($options['user'], $options['pass']);
+ return $options;
+ }
+
+ /**
+ * process of on netunmount
+ * Drop table `dropbox` & rm thumbs
+ *
+ * @param array $options
+ * @return boolean
+ */
+ public function netunmount($netVolumes, $key) {
+ $count = 0;
+ $dropboxUid = '';
+ if (isset($netVolumes[$key])) {
+ $dropboxUid = $netVolumes[$key]['dropboxUid'];
+ }
+ foreach($netVolumes as $volume) {
+ if (@$volume['host'] === 'dropbox' && @$volume['dropboxUid'] === $dropboxUid) {
+ $count++;
+ }
+ }
+ if ($count === 1) {
+ $this->DB->exec('drop table '.$this->DB_TableName);
+ foreach(glob(rtrim($this->options['tmbPath'], '\\/').DIRECTORY_SEPARATOR.$this->tmbPrefix.'*.png') as $tmb) {
+ unlink($tmb);
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Get script url
+ *
+ * @return string full URL
+ * @author Naoki Sawada
+ */
+ private function getConnectorUrl() {
+ $url = ((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off')? 'https://' : 'http://')
+ . $_SERVER['SERVER_NAME'] // host
+ . ($_SERVER['SERVER_PORT'] == 80 ? '' : ':' . $_SERVER['SERVER_PORT']) // port
+ . $_SERVER['REQUEST_URI']; // path & query
+ list($url) = explode('?', $url);
+ return $url;
+ }
+
+ /*********************************************************************/
+ /* INIT AND CONFIGURE */
+ /*********************************************************************/
+
+ /**
+ * Prepare FTP connection
+ * Connect to remote server and check if credentials are correct, if so, store the connection id in $ftp_conn
+ *
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ * @author Cem (DiscoFever)
+ **/
+ protected function init() {
+ if (!class_exists('PDO')) {
+ return $this->setError('PHP PDO class is require.');
+ }
+
+ if (!$this->options['consumerKey']
+ || !$this->options['consumerSecret']
+ || !$this->options['accessToken']
+ || !$this->options['accessTokenSecret']) {
+ return $this->setError('Required options undefined.');
+ }
+
+ if (empty($this->options['metaCachePath']) && defined('ELFINDER_DROPBOX_META_CACHE_PATH')) {
+ $this->options['metaCachePath'] = ELFINDER_DROPBOX_META_CACHE_PATH;
+ }
+
+ // make net mount key
+ $this->netMountKey = md5(join('-', array('dropbox', $this->options['path'])));
+
+ if (! $this->oauth) {
+ if (defined('ELFINDER_DROPBOX_USE_CURL_PUT')) {
+ $this->oauth = new Dropbox_OAuth_Curl($this->options['consumerKey'], $this->options['consumerSecret']);
+ } else {
+ if (class_exists('OAuth')) {
+ $this->oauth = new Dropbox_OAuth_PHP($this->options['consumerKey'], $this->options['consumerSecret']);
+ } else {
+ if (! class_exists('HTTP_OAuth_Consumer')) {
+ // We're going to try to load in manually
+ include 'HTTP/OAuth/Consumer.php';
+ }
+ if (class_exists('HTTP_OAuth_Consumer')) {
+ $this->oauth = new Dropbox_OAuth_PEAR($this->options['consumerKey'], $this->options['consumerSecret']);
+ }
+ }
+ }
+ }
+
+ if (! $this->oauth) {
+ return $this->setError('OAuth extension not loaded.');
+ }
+
+ // normalize root path
+ $this->root = $this->options['path'] = $this->_normpath($this->options['path']);
+
+ if (empty($this->options['alias'])) {
+ $this->options['alias'] = ($this->options['path'] === '/')? 'Dropbox.com' : 'Dropbox'.$this->options['path'];
+ }
+
+ $this->rootName = $this->options['alias'];
+ $this->options['separator'] = '/';
+
+ try {
+ $this->oauth->setToken($this->options['accessToken'], $this->options['accessTokenSecret']);
+ $this->dropbox = new Dropbox_API($this->oauth, $this->options['root']);
+ } catch (Dropbox_Exception $e) {
+ unset($_SESSION['elFinderDropboxTokens']);
+ return $this->setError('Dropbox error: '.$e->getMessage());
+ }
+
+ // user
+ if (empty($this->options['dropboxUid'])) {
+ try {
+ $res = $this->dropbox->getAccountInfo();
+ $this->options['dropboxUid'] = $res['uid'];
+ } catch (Dropbox_Exception $e) {
+ unset($_SESSION['elFinderDropboxTokens']);
+ return $this->setError('Dropbox error: '.$e->getMessage());
+ }
+ }
+
+ $this->dropboxUid = $this->options['dropboxUid'];
+ $this->tmbPrefix = 'dropbox'.base_convert($this->dropboxUid, 10, 32);
+
+ if (!empty($this->options['tmpPath'])) {
+ if ((is_dir($this->options['tmpPath']) || @mkdir($this->options['tmpPath'])) && is_writable($this->options['tmpPath'])) {
+ $this->tmp = $this->options['tmpPath'];
+ }
+ }
+ if (!$this->tmp && is_writable($this->options['tmbPath'])) {
+ $this->tmp = $this->options['tmbPath'];
+ }
+
+ if (!empty($this->options['metaCachePath'])) {
+ if ((is_dir($this->options['metaCachePath']) || @mkdir($this->options['metaCachePath'])) && is_writable($this->options['metaCachePath'])) {
+ $this->metaCache = $this->options['metaCachePath'];
+ }
+ }
+ if (!$this->metaCache && $this->tmp) {
+ $this->metaCache = $this->tmp;
+ }
+
+ if (!$this->tmp) {
+ $this->disabled[] = 'archive';
+ $this->disabled[] = 'extract';
+ }
+
+ if (!$this->metaCache) {
+ return $this->setError('Cache dirctory (metaCachePath or tmp) is require.');
+ }
+
+ // setup PDO
+ if (! $this->options['PDO_DSN']) {
+ $this->options['PDO_DSN'] = 'sqlite:'.$this->metaCache.DIRECTORY_SEPARATOR.'.elFinder_dropbox_db_'.md5($this->dropboxUid.$this->options['consumerSecret']);
+ }
+ // DataBase table name
+ $this->DB_TableName = $this->options['PDO_DBName'];
+ // DataBase check or make table
+ try {
+ $this->DB = new PDO($this->options['PDO_DSN'], $this->options['PDO_User'], $this->options['PDO_Pass'], $this->options['PDO_Options']);
+ if (! $this->checkDB()) {
+ return $this->setError('Can not make DB table');
+ }
+ } catch (PDOException $e) {
+ return $this->setError('PDO connection failed: '.$e->getMessage());
+ }
+
+ $res = $this->deltaCheck(!empty($_REQUEST['init']));
+ if ($res !== true) {
+ if (is_string($res)) {
+ return $this->setError($res);
+ } else {
+ return $this->setError('Could not check API "delta"');
+ }
+ }
+
+ return true;
+ }
+
+
+ /**
+ * Configure after successfull mount.
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function configure() {
+ parent::configure();
+
+ if (!$this->tmp) {
+ $this->disabled[] = 'archive';
+ $this->disabled[] = 'extract';
+ }
+ }
+
+ /**
+ * Check DB for delta cache
+ *
+ * @return void
+ */
+ private function checkDB() {
+ $res = $this->query('select * from sqlite_master where type=\'table\' and name=\'dropbox\'; ');
+ if (! $res) {
+ try {
+ $this->DB->exec('create table '.$this->DB_TableName.'(path text, fname text, dat blob, isdir integer);');
+ $this->DB->exec('create index nameidx on '.$this->DB_TableName.'(path, fname)');
+ $this->DB->exec('create index isdiridx on '.$this->DB_TableName.'(isdir)');
+ } catch (PDOException $e) {
+ return $this->setError($e->getMessage());
+ }
+ }
+ return true;
+ }
+
+ /**
+ * DB query and fetchAll
+ *
+ * @param string $sql
+ * @return boolean|array
+ */
+ private function query($sql) {
+ if ($sth = $this->DB->query($sql)) {
+ $res = $sth->fetchAll(PDO::FETCH_COLUMN);
+ } else {
+ $res = false;
+ }
+ return $res;
+ }
+
+ /**
+ * Get dat(dropbox metadata) from DB
+ *
+ * @param string $path
+ * @return array dropbox metadata
+ */
+ private function getDBdat($path) {
+ if ($res = $this->query('select dat from '.$this->DB_TableName.' where path='.$this->DB->quote(strtolower(dirname($path))).' and fname='.$this->DB->quote(strtolower(basename($path))).' limit 1')) {
+ return unserialize($res[0]);
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Update DB dat(dropbox metadata)
+ *
+ * @param string $path
+ * @param array $dat
+ * @return bool|array
+ */
+ private function updateDBdat($path, $dat) {
+ return $this->query('update '.$this->DB_TableName.' set dat='.$this->DB->quote(serialize($dat))
+ . ', isdir=' . ($dat['is_dir']? 1 : 0)
+ . ' where path='.$this->DB->quote(strtolower(dirname($path))).' and fname='.$this->DB->quote(strtolower(basename($path))));
+ }
+ /*********************************************************************/
+ /* FS API */
+ /*********************************************************************/
+
+ /**
+ * Close opened connection
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ public function umount() {
+
+ }
+
+ /**
+ * Get local temp filename
+ *
+ * @return string | false
+ * @author Naoki Sawada
+ **/
+ protected function getLocalName($path) {
+ if ($this->tmp) {
+ return $this->tmp.DIRECTORY_SEPARATOR.md5($this->dropboxUid.$path);
+ }
+ return false;
+ }
+
+ /**
+ * Get delta data and DB update
+ *
+ * @param boolean $refresh force refresh
+ * @return true|string error message
+ */
+ protected function deltaCheck($refresh = true) {
+ $chk = false;
+ if (! $refresh && $chk = $this->query('select dat from '.$this->DB_TableName.' where path=\'\' and fname=\'\' limit 1')) {
+ $chk = unserialize($chk[0]);
+ }
+ if ($chk && ($chk['mtime'] + $this->options['metaCacheTime']) > $_SERVER['REQUEST_TIME']) {
+ return true;
+ }
+
+ try {
+ $more = true;
+ $this->DB->beginTransaction();
+
+ if ($res = $this->query('select dat from '.$this->DB_TableName.' where path=\'\' and fname=\'\' limit 1')) {
+ $res = unserialize($res[0]);
+ $cursor = $res['cursor'];
+ } else {
+ $cursor = '';
+ }
+ $delete = false;
+ $reset = false;
+ do {
+ @ ini_set('max_execution_time', 120);
+ $_info = $this->dropbox->delta($cursor);
+ if (! empty($_info['reset'])) {
+ $this->DB->exec('TRUNCATE table '.$this->DB_TableName);
+ $this->DB->exec('insert into '.$this->DB_TableName.' values(\'\', \'\', \''.serialize(array('cursor' => '', 'mtime' => 0)).'\', 0);');
+ $this->DB->exec('insert into '.$this->DB_TableName.' values(\'/\', \'\', \''.serialize(array(
+ 'path' => '/',
+ 'is_dir' => 1,
+ 'mime_type' => '',
+ 'bytes' => 0
+ )).'\', 0);');
+ $reset = true;
+ }
+ $cursor = $_info['cursor'];
+
+ foreach($_info['entries'] as $entry) {
+ $key = strtolower($entry[0]);
+ $pkey = strtolower(dirname($key));
+
+ $path = $this->DB->quote($pkey);
+ $fname = $this->DB->quote(strtolower(basename($key)));
+ $where = 'where path='.$path.' and fname='.$fname;
+
+ if (empty($entry[1])) {
+ $this->DB->exec('delete from '.$this->DB_TableName.' '.$where);
+ ! $delete && $delete = true;
+ continue;
+ }
+
+ $sql = 'select path from '.$this->DB_TableName.' '.$where.' limit 1';
+ if (! $reset && $this->query($sql)) {
+ $this->DB->exec('update '.$this->DB_TableName.' set dat='.$this->DB->quote(serialize($entry[1])).', isdir='.($entry[1]['is_dir']? 1 : 0).' ' .$where);
+ } else {
+ $this->DB->exec('insert into '.$this->DB_TableName.' values ('.$path.', '.$fname.', '.$this->DB->quote(serialize($entry[1])).', '.(int)$entry[1]['is_dir'].')');
+ }
+ }
+ } while (! empty($_info['has_more']));
+ $this->DB->exec('update '.$this->DB_TableName.' set dat='.$this->DB->quote(serialize(array('cursor'=>$cursor, 'mtime'=>$_SERVER['REQUEST_TIME']))).' where path=\'\' and fname=\'\'');
+ if (! $this->DB->commit()) {
+ $e = $this->DB->errorInfo();
+ return $e[2];
+ }
+ if ($delete) {
+ $this->DB->exec('vacuum');
+ }
+ } catch(Dropbox_Exception $e) {
+ return $e->getMessage();
+ }
+ return true;
+ }
+
+ /**
+ * Parse line from dropbox metadata output and return file stat (array)
+ *
+ * @param string $raw line from ftp_rawlist() output
+ * @return array
+ * @author Dmitry Levashov
+ **/
+ protected function parseRaw($raw) {
+ $stat = array();
+
+ $stat['rev'] = isset($raw['rev'])? $raw['rev'] : 'root';
+ $stat['name'] = basename($raw['path']);
+ $stat['mime'] = $raw['is_dir']? 'directory' : $raw['mime_type'];
+ $stat['size'] = $stat['mime'] == 'directory' ? 0 : $raw['bytes'];
+ $stat['ts'] = isset($raw['client_mtime'])? strtotime($raw['client_mtime']) :
+ (isset($raw['modified'])? strtotime($raw['modified']) : $_SERVER['REQUEST_TIME']);
+ $stat['dirs'] = 0;
+ if ($raw['is_dir']) {
+ $stat['dirs'] = (int)(bool)$this->query('select path from '.$this->DB_TableName.' where isdir=1 and path='.$this->DB->quote(strtolower($raw['path'])));
+ }
+
+ if (!empty($raw['url'])) {
+ $stat['url'] = $raw['url'];
+ } else {
+ $stat['url'] = '1';
+ }
+ if (isset($raw['width'])) $stat['width'] = $raw['width'];
+ if (isset($raw['height'])) $stat['height'] = $raw['height'];
+
+ return $stat;
+ }
+
+ /**
+ * Cache dir contents
+ *
+ * @param string $path dir path
+ * @return void
+ * @author Dmitry Levashov
+ **/
+ protected function cacheDir($path) {
+ $this->dirsCache[$path] = array();
+ $res = $this->query('select dat from '.$this->DB_TableName.' where path='.$this->DB->quote(strtolower($path)));
+
+ if ($res) {
+ foreach($res as $raw) {
+ $raw = unserialize($raw);
+ if ($stat = $this->parseRaw($raw)) {
+ $stat = $this->updateCache($raw['path'], $stat);
+ if (empty($stat['hidden'])) {
+ $this->dirsCache[$path][] = $raw['path'];
+ }
+ }
+ }
+ }
+ return $this->dirsCache[$path];
+ }
+
+ /**
+ * Recursive files search
+ *
+ * @param string $path dir path
+ * @param string $q search string
+ * @param array $mimes
+ * @return array
+ * @author Naoki Sawada
+ **/
+ protected function doSearch($path, $q, $mimes) {
+ $result = array();
+ $sth = $this->DB->prepare('select dat from '.$this->DB_TableName.' WHERE path LIKE ? AND fname LIKE ?');
+ $sth->execute(array('%'.(($path === $this->root)? '' : strtolower($path)), '%'.strtolower($q).'%'));
+ $res = $sth->fetchAll(PDO::FETCH_COLUMN);
+ if ($res) {
+ foreach($res as $raw) {
+ $raw = unserialize($raw);
+ if ($stat = $this->parseRaw($raw)) {
+ if (!isset($this->cache[$raw['path']])) {
+ $stat = $this->updateCache($raw['path'], $stat);
+ }
+ if ($stat['mime'] !== 'directory' || $this->mimeAccepted($stat['mime'], $mimes)) {
+ $result[] = $this->stat($raw['path']);
+ }
+ }
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Copy file/recursive copy dir only in current volume.
+ * Return new file path or false.
+ *
+ * @param string $src source path
+ * @param string $dst destination dir path
+ * @param string $name new file name (optionaly)
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ * @author Naoki Sawada
+ **/
+ protected function copy($src, $dst, $name) {
+
+ $this->clearcache();
+
+ return $this->_copy($src, $dst, $name)
+ ? $this->_joinPath($dst, $name)
+ : $this->setError(elFinder::ERROR_COPY, $this->_path($src));
+ }
+
+ /**
+ * Remove file/ recursive remove dir
+ *
+ * @param string $path file path
+ * @param bool $force try to remove even if file locked
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ * @author Naoki Sawada
+ **/
+ protected function remove($path, $force = false, $recursive = false) {
+ $stat = $this->stat($path);
+ $stat['realpath'] = $path;
+ $this->rmTmb($stat);
+ $this->clearcache();
+
+ if (empty($stat)) {
+ return $this->setError(elFinder::ERROR_RM, $this->_path($path), elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ if (!$force && !empty($stat['locked'])) {
+ return $this->setError(elFinder::ERROR_LOCKED, $this->_path($path));
+ }
+
+ if ($stat['mime'] == 'directory') {
+ if (!$recursive && !$this->_rmdir($path)) {
+ return $this->setError(elFinder::ERROR_RM, $this->_path($path));
+ }
+ } else {
+ if (!$recursive && !$this->_unlink($path)) {
+ return $this->setError(elFinder::ERROR_RM, $this->_path($path));
+ }
+ }
+
+ $this->removed[] = $stat;
+ return true;
+ }
+
+ /**
+ * Resize image
+ *
+ * @param string $hash image file
+ * @param int $width new width
+ * @param int $height new height
+ * @param int $x X start poistion for crop
+ * @param int $y Y start poistion for crop
+ * @param string $mode action how to mainpulate image
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ * @author nao-pon
+ * @author Troex Nevelin
+ **/
+ public function resize($hash, $width, $height, $x, $y, $mode = 'resize', $bg = '', $degree = 0) {
+ if ($this->commandDisabled('resize')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($file = $this->file($hash)) == false) {
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ if (!$file['write'] || !$file['read']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ $path = $this->decode($hash);
+
+ if (!$this->canResize($path, $file)) {
+ return $this->setError(elFinder::ERROR_UNSUPPORT_TYPE);
+ }
+
+ $path4stat = $path;
+ if (! $path = $this->getLocalName($path)) {
+ return false;
+ }
+
+ if (! $contents = $this->_getContents($path4stat)) {
+ return false;
+ }
+
+ if (! @ file_put_contents($path, $contents, LOCK_EX)) {
+ return false;
+ }
+
+ switch($mode) {
+
+ case 'propresize':
+ $result = $this->imgResize($path, $width, $height, true, true);
+ break;
+
+ case 'crop':
+ $result = $this->imgCrop($path, $width, $height, $x, $y);
+ break;
+
+ case 'fitsquare':
+ $result = $this->imgSquareFit($path, $width, $height, 'center', 'middle', ($bg ? $bg : $this->options['tmbBgColor']));
+ break;
+
+ case 'rotate':
+ $result = $this->imgRotate($path, $degree, ($bg ? $bg : $this->options['tmbBgColor']));
+ break;
+
+ default:
+ $result = $this->imgResize($path, $width, $height, false, true);
+ break;
+ }
+
+ $result && $size = getimagesize($path);
+
+ if ($result) {
+ clearstatcache();
+ $size = getimagesize($path);
+ if ($fp = @fopen($path, 'rb')) {
+ $res = $this->_save($fp, $path4stat, '', array());
+ @fclose($fp);
+
+ file_exists($path) && @unlink($path);
+
+ $this->rmTmb($file);
+ $this->clearcache();
+
+ if ($size) {
+ $raw = $this->getDBdat($path4stat);
+ $raw['width'] = $size[0];
+ $raw['height'] = $size[1];
+ $this->updateDBdat($path4stat, $raw);
+ }
+
+ return $this->stat($path4stat);
+ }
+ }
+
+ is_file($path) && @unlink($path);
+
+ return false;
+ }
+
+ /**
+ * Create thumnbnail and return it's URL on success
+ *
+ * @param string $path file path
+ * @param string $mime file mime type
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ * @author Naoki Sawada
+ **/
+ protected function createTmb($path, $stat) {
+ if (!$stat || !$this->canCreateTmb($path, $stat)) {
+ return false;
+ }
+
+ $name = $this->tmbname($stat);
+ $tmb = $this->tmbPath.DIRECTORY_SEPARATOR.$name;
+
+ // copy image into tmbPath so some drivers does not store files on local fs
+ if (! $data = $this->getThumbnail($path, $this->options['getTmbSize'])) {
+ return false;
+ }
+ if (! file_put_contents($tmb, $data)) {
+ return false;
+ }
+
+ $result = false;
+
+ $tmbSize = $this->tmbSize;
+
+ if (($s = getimagesize($tmb)) == false) {
+ return false;
+ }
+
+ /* If image smaller or equal thumbnail size - just fitting to thumbnail square */
+ if ($s[0] <= $tmbSize && $s[1] <= $tmbSize) {
+ $result = $this->imgSquareFit($tmb, $tmbSize, $tmbSize, 'center', 'middle', $this->options['tmbBgColor'], 'png' );
+
+ } else {
+
+ if ($this->options['tmbCrop']) {
+
+ /* Resize and crop if image bigger than thumbnail */
+ if (!(($s[0] > $tmbSize && $s[1] <= $tmbSize) || ($s[0] <= $tmbSize && $s[1] > $tmbSize) ) || ($s[0] > $tmbSize && $s[1] > $tmbSize)) {
+ $result = $this->imgResize($tmb, $tmbSize, $tmbSize, true, false, 'png');
+ }
+
+ if (($s = getimagesize($tmb)) != false) {
+ $x = $s[0] > $tmbSize ? intval(($s[0] - $tmbSize)/2) : 0;
+ $y = $s[1] > $tmbSize ? intval(($s[1] - $tmbSize)/2) : 0;
+ $result = $this->imgCrop($tmb, $tmbSize, $tmbSize, $x, $y, 'png');
+ }
+
+ } else {
+ $result = $this->imgResize($tmb, $tmbSize, $tmbSize, true, true, $this->imgLib, 'png');
+ $result = $this->imgSquareFit($tmb, $tmbSize, $tmbSize, 'center', 'middle', $this->options['tmbBgColor'], 'png' );
+ }
+
+ }
+ if (!$result) {
+ unlink($tmb);
+ return false;
+ }
+
+ return $name;
+ }
+
+ /**
+ * Return thumbnail file name for required file
+ *
+ * @param array $stat file stat
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function tmbname($stat) {
+ return $this->tmbPrefix.$stat['rev'].'.png';
+ }
+
+ /**
+ * Get thumbnail from dropbox.com
+ * @param string $path
+ * @param string $size
+ * @return string | boolean
+ */
+ protected function getThumbnail($path, $size = 'small') {
+ try {
+ return $this->dropbox->getThumbnail($path, $size);
+ } catch (Dropbox_Exception $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Return content URL
+ *
+ * @param string $hash file hash
+ * @param array $options options
+ * @return array
+ * @author Naoki Sawada
+ **/
+ public function getContentUrl($hash, $options = array()) {
+ if (($file = $this->file($hash)) == false || !$file['url'] || $file['url'] == 1) {
+ $path = $this->decode($hash);
+ $cache = $this->getDBdat($path);
+ $url = '';
+ if (isset($cache['share'])) {
+ $res = $this->getHttpResponseHeader($cache['share']);
+ if (preg_match("/^HTTP\/[01\.]+ ([0-9]{3})/", $res, $match)) {
+ if (preg_match('/^location:\s*(http[^\s]+)/im', $res, $match)) {
+ $url = $match[1];
+ } else if ($match[1] >= 400) {
+ $url = '';
+ }
+ } else {
+ $url = '';
+ }
+ }
+ if (! $url) {
+ try {
+ $res = $this->dropbox->share($path);
+ $res = $this->getHttpResponseHeader($res['url']);
+ if (preg_match('/^location:\s*(http[^\s]+)/im', $res, $match)) {
+ $url = $match[1] . '?dl=1';
+ }
+ if ($url) {
+ if (! isset($cache['share']) || $cache['share'] !== $url) {
+ $cache['share'] = $url;
+ $this->updateDBdat($path, $cache);
+ }
+ $res = $this->getHttpResponseHeader($url);
+ if (preg_match('/^location:\s*(http[^\s?]+)/im', $res, $match)) {
+ $url = $match[1];
+ }
+ }
+ } catch (Dropbox_Exception $e) {
+ return false;
+ }
+ }
+ if ($url) {
+ list($url) = explode('?', $url);
+ }
+ return $url;
+ }
+ return $file['url'];
+ }
+
+ /**
+ * Get HTTP request response header string
+ *
+ * @param string $url target URL
+ * @return string
+ * @author Naoki Sawada
+ */
+ private function getHttpResponseHeader($url) {
+ if (function_exists('curl_exec')) {
+
+ $c = curl_init();
+ curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
+ curl_setopt( $c, CURLOPT_CUSTOMREQUEST, 'HEAD' );
+ curl_setopt( $c, CURLOPT_HEADER, 1 );
+ curl_setopt( $c, CURLOPT_NOBODY, true );
+ curl_setopt( $c, CURLOPT_URL, $url );
+ $res = curl_exec( $c );
+
+ } else {
+
+ require_once 'HTTP/Request2.php';
+ try {
+ $request2 = new HTTP_Request2();
+ $request2->setConfig(array(
+ 'ssl_verify_peer' => false,
+ 'ssl_verify_host' => false
+ ));
+ $request2->setUrl($url);
+ $request2->setMethod(HTTP_Request2::METHOD_HEAD);
+ $result = $request2->send();
+ $res = array();
+ $res[] = 'HTTP/'.$result->getVersion().' '.$result->getStatus().' '.$result->getReasonPhrase();
+ foreach($result->getHeader() as $key => $val) {
+ $res[] = $key . ': ' . $val;
+ }
+ $res = join("\r\n", $res);
+ } catch( HTTP_Request2_Exception $e ){
+ $res = '';
+ } catch (Exception $e){
+ $res = '';
+ }
+
+ }
+ return $res;
+ }
+
+ /*********************** paths/urls *************************/
+
+ /**
+ * Return parent directory path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dirname($path) {
+ return dirname($path);
+ }
+
+ /**
+ * Return file name
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _basename($path) {
+ return basename($path);
+ }
+
+ /**
+ * Join dir name and file name and retur full path
+ *
+ * @param string $dir
+ * @param string $name
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _joinPath($dir, $name) {
+ return $this->_normpath($dir.'/'.$name);
+ }
+
+ /**
+ * Return normalized path, this works the same as os.path.normpath() in Python
+ *
+ * @param string $path path
+ * @return string
+ * @author Troex Nevelin
+ **/
+ protected function _normpath($path) {
+ $path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
+ $path = '/' . ltrim($path, '/');
+ return $path;
+ }
+
+ /**
+ * Return file path related to root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _relpath($path) {
+ return $path;
+ }
+
+ /**
+ * Convert path related to root dir into real path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _abspath($path) {
+ return $path;
+ }
+
+ /**
+ * Return fake path started from root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _path($path) {
+ return $path;
+ }
+
+ /**
+ * Return true if $path is children of $parent
+ *
+ * @param string $path path to check
+ * @param string $parent parent path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _inpath($path, $parent) {
+ return $path == $parent || strpos($path, $parent.'/') === 0;
+ }
+
+ /***************** file stat ********************/
+ /**
+ * Return stat for given path.
+ * Stat contains following fields:
+ * - (int) size file size in b. required
+ * - (int) ts file modification time in unix time. required
+ * - (string) mime mimetype. required for folders, others - optionally
+ * - (bool) read read permissions. required
+ * - (bool) write write permissions. required
+ * - (bool) locked is object locked. optionally
+ * - (bool) hidden is object hidden. optionally
+ * - (string) alias for symlinks - link target path relative to root path. optionally
+ * - (string) target for symlinks - link target path. optionally
+ *
+ * If file does not exists - returns empty array or false.
+ *
+ * @param string $path file path
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _stat($path) {
+ if ($raw = $this->getDBdat($path)) {
+ return $this->parseRaw($raw);
+ }
+ return false;
+ }
+
+ /**
+ * Return true if path is dir and has at least one childs directory
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _subdirs($path) {
+ return ($stat = $this->stat($path)) && isset($stat['dirs']) ? $stat['dirs'] : false;
+ }
+
+ /**
+ * Return object width and height
+ * Ususaly used for images, but can be realize for video etc...
+ *
+ * @param string $path file path
+ * @param string $mime file mime type
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dimensions($path, $mime) {
+ if (strpos($mime, 'image') !== 0) return '';
+ $cache = $this->getDBdat($path);
+ if (isset($cache['width']) && isset($cache['height'])) {
+ return $cache['width'].'x'.$cache['height'];
+ }
+ if ($local = $this->getLocalName($path)) {
+ if (file_put_contents($local, $this->dropbox->getFile($path), LOCK_EX)) {
+ if ($size = @getimagesize($local)) {
+ $cache['width'] = $size[0];
+ $cache['height'] = $size[1];
+ $this->updateDBdat($path, $cache);
+ unlink($local);
+ return $size[0].'x'.$size[1];
+ }
+ unlink($local);
+ }
+ }
+ return '';
+ }
+
+ /******************** file/dir content *********************/
+
+ /**
+ * Return files list in directory.
+ *
+ * @param string $path dir path
+ * @return array
+ * @author Dmitry (dio) Levashov
+ * @author Cem (DiscoFever)
+ **/
+ protected function _scandir($path) {
+ return isset($this->dirsCache[$path])
+ ? $this->dirsCache[$path]
+ : $this->cacheDir($path);
+ }
+
+ /**
+ * Open file and return file pointer
+ *
+ * @param string $path file path
+ * @param bool $write open file for writing
+ * @return resource|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fopen($path, $mode='rb') {
+
+ if (($mode == 'rb' || $mode == 'r')) {
+ try {
+ $res = $this->dropbox->media($path);
+ $url = parse_url($res['url']);
+ $fp = stream_socket_client('ssl://'.$url['host'].':443');
+ fputs($fp, "GET {$url['path']} HTTP/1.0\r\n");
+ fputs($fp, "Host: {$url['host']}\r\n");
+ fputs($fp, "\r\n");
+ while(trim(fgets($fp)) !== ''){};
+ return $fp;
+ } catch (Dropbox_Exception $e) {
+ return false;
+ }
+ }
+
+ if ($this->tmp) {
+ $contents = $this->_getContents($path);
+
+ if ($contents === false) {
+ return false;
+ }
+
+ if ($local = $this->getLocalName($path)) {
+ if (file_put_contents($local, $contents, LOCK_EX) !== false) {
+ return @fopen($local, $mode);
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Close opened file
+ *
+ * @param resource $fp file pointer
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fclose($fp, $path='') {
+ @fclose($fp);
+ if ($path) {
+ @unlink($this->getLocalName($path));
+ }
+ }
+
+ /******************** file/dir manipulations *************************/
+
+ /**
+ * Create dir and return created dir path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new directory name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _mkdir($path, $name) {
+ $path = $this->_normpath($path.'/'.$name);
+ try {
+ $this->dropbox->createFolder($path);
+ } catch (Dropbox_Exception $e) {
+ $this->deltaCheck();
+ if ($this->dir($this->encode($path))) {
+ return $path;
+ }
+ return $this->setError('Dropbox error: '.$e->getMessage());
+ }
+ $this->deltaCheck();
+ return $path;
+ }
+
+ /**
+ * Create file and return it's path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _mkfile($path, $name) {
+ return $this->_filePutContents($path.'/'.$name, '');
+ }
+
+ /**
+ * Create symlink. FTP driver does not support symlinks.
+ *
+ * @param string $target link target
+ * @param string $path symlink path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _symlink($target, $path, $name) {
+ return false;
+ }
+
+ /**
+ * Copy file into another file
+ *
+ * @param string $source source file path
+ * @param string $targetDir target directory path
+ * @param string $name new file name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _copy($source, $targetDir, $name) {
+ $path = $this->_normpath($targetDir.'/'.$name);
+ try {
+ $this->dropbox->copy($source, $path);
+ } catch (Dropbox_Exception $e) {
+ return $this->setError('Dropbox error: '.$e->getMessage());
+ }
+ $this->deltaCheck();
+ return true;
+ }
+
+ /**
+ * Move file into another parent dir.
+ * Return new file path or false.
+ *
+ * @param string $source source file path
+ * @param string $target target dir path
+ * @param string $name file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _move($source, $targetDir, $name) {
+ $target = $this->_normpath($targetDir.'/'.$name);
+ try {
+ $this->dropbox->move($source, $target);
+ } catch (Dropbox_Exception $e) {
+ return $this->setError('Dropbox error: '.$e->getMessage());
+ }
+ $this->deltaCheck();
+ return $target;
+ }
+
+ /**
+ * Remove file
+ *
+ * @param string $path file path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _unlink($path) {
+ try {
+ $this->dropbox->delete($path);
+ } catch (Dropbox_Exception $e) {
+ return $this->setError('Dropbox error: '.$e->getMessage());
+ }
+ $this->deltaCheck();
+ return true;
+ }
+
+ /**
+ * Remove dir
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _rmdir($path) {
+ return $this->_unlink($path);
+ }
+
+ /**
+ * Create new file and write into it from file pointer.
+ * Return new file path or false on error.
+ *
+ * @param resource $fp file pointer
+ * @param string $dir target dir path
+ * @param string $name file name
+ * @param array $stat file stat (required by some virtual fs)
+ * @return bool|string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _save($fp, $path, $name, $stat) {
+ if ($name) $path .= '/'.$name;
+ $path = $this->_normpath($path);
+ try {
+ $this->dropbox->putFile($path, $fp);
+ } catch (Dropbox_Exception $e) {
+ return $this->setError('Dropbox error: '.$e->getMessage());
+ }
+ $this->deltaCheck();
+ return $path;
+ }
+
+ /**
+ * Get file contents
+ *
+ * @param string $path file path
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _getContents($path) {
+ $contents = '';
+ try {
+ $contents = $this->dropbox->getFile($path);
+ } catch (Dropbox_Exception $e) {
+ return $this->setError('Dropbox error: '.$e->getMessage());
+ }
+ return $contents;
+ }
+
+ /**
+ * Write a string to a file
+ *
+ * @param string $path file path
+ * @param string $content new file content
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _filePutContents($path, $content) {
+ $res = false;
+
+ if ($local = $this->getLocalName($path)) {
+ $local .= '.txt';
+
+ if (@file_put_contents($local, $content, LOCK_EX) !== false
+ && ($fp = @fopen($local, 'rb'))) {
+ clearstatcache();
+ $res = $this->_save($fp, $path, '', array());
+ @fclose($fp);
+ }
+ file_exists($local) && @unlink($local);
+ }
+
+ return $res;
+ }
+
+ /**
+ * Detect available archivers
+ *
+ * @return void
+ **/
+ protected function _checkArchivers() {
+ // die('Not yet implemented. (_checkArchivers)');
+ return array();
+ }
+
+ /**
+ * Unpack archive
+ *
+ * @param string $path archive path
+ * @param array $arc archiver command and arguments (same as in $this->archivers)
+ * @return true
+ * @return void
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ protected function _unpack($path, $arc) {
+ die('Not yet implemented. (_unpack)');
+ return false;
+ }
+
+ /**
+ * Recursive symlinks search
+ *
+ * @param string $path file/dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _findSymlinks($path) {
+ die('Not yet implemented. (_findSymlinks)');
+ if (is_link($path)) {
+ return true;
+ }
+ if (is_dir($path)) {
+ foreach (scandir($path) as $name) {
+ if ($name != '.' && $name != '..') {
+ $p = $path.DIRECTORY_SEPARATOR.$name;
+ if (is_link($p)) {
+ return true;
+ }
+ if (is_dir($p) && $this->_findSymlinks($p)) {
+ return true;
+ } elseif (is_file($p)) {
+ $this->archiveSize += filesize($p);
+ }
+ }
+ }
+ } else {
+ $this->archiveSize += filesize($path);
+ }
+
+ return false;
+ }
+
+ /**
+ * Extract files from archive
+ *
+ * @param string $path archive path
+ * @param array $arc archiver command and arguments (same as in $this->archivers)
+ * @return true
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _extract($path, $arc) {
+ die('Not yet implemented. (_extract)');
+
+ }
+
+ /**
+ * Create archive and return its path
+ *
+ * @param string $dir target dir
+ * @param array $files files names list
+ * @param string $name archive name
+ * @param array $arc archiver options
+ * @return string|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _archive($dir, $files, $name, $arc) {
+ die('Not yet implemented. (_archive)');
+ return false;
+ }
+
+} // END class
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeFTP.class.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeFTP.class.php
new file mode 100644
index 00000000..1887de92
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeFTP.class.php
@@ -0,0 +1,1430 @@
+ '0', 'r' => '4', 'w' => '2', 'x' => '1');
+ $chmod = substr(strtr($chmod, $trans), 1);
+ $array = str_split($chmod, 3);
+ return array_sum(str_split($array[0])) . array_sum(str_split($array[1])) . array_sum(str_split($array[2]));
+}
+
+elFinder::$netDrivers['ftp'] = 'FTP';
+
+/**
+ * Simple elFinder driver for FTP
+ *
+ * @author Dmitry (dio) Levashov
+ * @author Cem (discofever)
+ **/
+class elFinderVolumeFTP extends elFinderVolumeDriver {
+
+ /**
+ * Driver id
+ * Must be started from letter and contains [a-z0-9]
+ * Used as part of volume id
+ *
+ * @var string
+ **/
+ protected $driverId = 'f';
+
+ /**
+ * FTP Connection Instance
+ *
+ * @var ftp
+ **/
+ protected $connect = null;
+
+ /**
+ * Directory for tmp files
+ * If not set driver will try to use tmbDir as tmpDir
+ *
+ * @var string
+ **/
+ protected $tmpPath = '';
+
+ /**
+ * Last FTP error message
+ *
+ * @var string
+ **/
+ protected $ftpError = '';
+
+ /**
+ * FTP server output list as ftp on linux
+ *
+ * @var bool
+ **/
+ protected $ftpOsUnix;
+
+ /**
+ * Tmp folder path
+ *
+ * @var string
+ **/
+ protected $tmp = '';
+
+ /**
+ * Net mount key
+ *
+ * @var string
+ **/
+ public $netMountKey = '';
+
+ /**
+ * Constructor
+ * Extend options with required fields
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ * @author Cem (DiscoFever)
+ **/
+ public function __construct() {
+ $opts = array(
+ 'host' => 'localhost',
+ 'user' => '',
+ 'pass' => '',
+ 'port' => 21,
+ 'mode' => 'passive',
+ 'path' => '/',
+ 'timeout' => 20,
+ 'owner' => true,
+ 'tmbPath' => '',
+ 'tmpPath' => '',
+ 'dirMode' => 0755,
+ 'fileMode' => 0644,
+ 'icon' => (defined('ELFINDER_IMG_PARENT_URL')? (rtrim(ELFINDER_IMG_PARENT_URL, '/').'/') : '').'img/volume_icon_ftp.png'
+
+ );
+ $this->options = array_merge($this->options, $opts);
+ $this->options['mimeDetect'] = 'internal';
+ }
+
+ /*********************************************************************/
+ /* INIT AND CONFIGURE */
+ /*********************************************************************/
+
+ /**
+ * Prepare FTP connection
+ * Connect to remote server and check if credentials are correct, if so, store the connection id in $ftp_conn
+ *
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ * @author Cem (DiscoFever)
+ **/
+ protected function init() {
+ if (!$this->options['host']
+ || !$this->options['user']
+ || !$this->options['pass']
+ || !$this->options['port']) {
+ return $this->setError('Required options undefined.');
+ }
+
+ // make ney mount key
+ $this->netMountKey = md5(join('-', array('ftp', $this->options['host'], $this->options['port'], $this->options['path'], $this->options['user'])));
+
+ if (!function_exists('ftp_connect')) {
+ return $this->setError('FTP extension not loaded.');
+ }
+
+ // remove protocol from host
+ $scheme = parse_url($this->options['host'], PHP_URL_SCHEME);
+
+ if ($scheme) {
+ $this->options['host'] = substr($this->options['host'], strlen($scheme)+3);
+ }
+
+ // normalize root path
+ $this->root = $this->options['path'] = $this->_normpath($this->options['path']);
+
+ if (empty($this->options['alias'])) {
+ $this->options['alias'] = $this->options['user'].'@'.$this->options['host'];
+ // $num = elFinder::$volumesCnt-1;
+ // $this->options['alias'] = $this->root == '/' || $this->root == '.' ? 'FTP folder '.$num : basename($this->root);
+ }
+
+ $this->rootName = $this->options['alias'];
+ $this->options['separator'] = '/';
+
+ return $this->connect();
+
+ }
+
+
+ /**
+ * Configure after successfull mount.
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function configure() {
+ parent::configure();
+
+ if (!empty($this->options['tmpPath'])) {
+ if ((is_dir($this->options['tmpPath']) || @mkdir($this->options['tmpPath'], 0755, true)) && is_writable($this->options['tmpPath'])) {
+ $this->tmp = $this->options['tmpPath'];
+ }
+ }
+
+ if (!$this->tmp && $this->tmbPath) {
+ $this->tmp = $this->tmbPath;
+ }
+
+ if (!$this->tmp) {
+ $this->disabled[] = 'mkfile';
+ $this->disabled[] = 'paste';
+ $this->disabled[] = 'duplicate';
+ $this->disabled[] = 'upload';
+ $this->disabled[] = 'edit';
+ $this->disabled[] = 'archive';
+ $this->disabled[] = 'extract';
+ }
+
+ // echo $this->tmp;
+
+ }
+
+ /**
+ * Connect to ftp server
+ *
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function connect() {
+ if (!($this->connect = ftp_connect($this->options['host'], $this->options['port'], $this->options['timeout']))) {
+ return $this->setError('Unable to connect to FTP server '.$this->options['host']);
+ }
+ if (!ftp_login($this->connect, $this->options['user'], $this->options['pass'])) {
+ $this->umount();
+ return $this->setError('Unable to login into '.$this->options['host']);
+ }
+
+ // switch off extended passive mode - may be usefull for some servers
+ @ftp_exec($this->connect, 'epsv4 off' );
+ // enter passive mode if required
+ ftp_pasv($this->connect, $this->options['mode'] == 'passive');
+
+ // enter root folder
+ if (!ftp_chdir($this->connect, $this->root)
+ || $this->root != ftp_pwd($this->connect)) {
+ $this->umount();
+ return $this->setError('Unable to open root folder.');
+ }
+
+ // check for MLST support
+ $features = ftp_raw($this->connect, 'FEAT');
+ if (!is_array($features)) {
+ $this->umount();
+ return $this->setError('Server does not support command FEAT.');
+ }
+
+ foreach ($features as $feat) {
+ if (strpos(trim($feat), 'MLST') === 0) {
+ return true;
+ }
+ }
+
+ return $this->setError('Server does not support command MLST.');
+ }
+
+ /*********************************************************************/
+ /* FS API */
+ /*********************************************************************/
+
+ /**
+ * Close opened connection
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ public function umount() {
+ $this->connect && @ftp_close($this->connect);
+ }
+
+
+ /**
+ * Parse line from ftp_rawlist() output and return file stat (array)
+ *
+ * @param string $raw line from ftp_rawlist() output
+ * @return array
+ * @author Dmitry Levashov
+ **/
+ protected function parseRaw($raw) {
+ $info = preg_split("/\s+/", $raw, 9);
+ $stat = array();
+
+ if (count($info) < 9 || $info[8] == '.' || $info[8] == '..') {
+ return false;
+ }
+
+ if (!isset($this->ftpOsUnix)) {
+ $this->ftpOsUnix = !preg_match('/\d/', substr($info[0], 0, 1));
+ }
+
+ if ($this->ftpOsUnix) {
+
+ $stat['ts'] = strtotime($info[5].' '.$info[6].' '.$info[7]);
+ if (empty($stat['ts'])) {
+ $stat['ts'] = strtotime($info[6].' '.$info[5].' '.$info[7]);
+ }
+
+ $name = $info[8];
+
+ if (preg_match('|(.+)\-\>(.+)|', $name, $m)) {
+ $name = trim($m[1]);
+ $target = trim($m[2]);
+ if (substr($target, 0, 1) != '/') {
+ $target = $this->root.'/'.$target;
+ }
+ $target = $this->_normpath($target);
+ $stat['name'] = $name;
+ if ($this->_inpath($target, $this->root)
+ && ($tstat = $this->stat($target))) {
+ $stat['size'] = $tstat['mime'] == 'directory' ? 0 : $info[4];
+ $stat['alias'] = $this->_relpath($target);
+ $stat['thash'] = $tstat['hash'];
+ $stat['mime'] = $tstat['mime'];
+ $stat['read'] = $tstat['read'];
+ $stat['write'] = $tstat['write'];
+ } else {
+
+ $stat['mime'] = 'symlink-broken';
+ $stat['read'] = false;
+ $stat['write'] = false;
+ $stat['size'] = 0;
+
+ }
+ return $stat;
+ }
+
+ $perm = $this->parsePermissions($info[0]);
+ $stat['name'] = $name;
+ $stat['mime'] = substr(strtolower($info[0]), 0, 1) == 'd' ? 'directory' : $this->mimetype($stat['name']);
+ $stat['size'] = $stat['mime'] == 'directory' ? 0 : $info[4];
+ $stat['read'] = $perm['read'];
+ $stat['write'] = $perm['write'];
+ $stat['perm'] = substr($info[0], 1);
+ } else {
+ die('Windows ftp servers not supported yet');
+ }
+
+ return $stat;
+ }
+
+ /**
+ * Parse permissions string. Return array(read => true/false, write => true/false)
+ *
+ * @param string $perm permissions string
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function parsePermissions($perm) {
+ $res = array();
+ $parts = array();
+ $owner = $this->options['owner'];
+ for ($i = 0, $l = strlen($perm); $i < $l; $i++) {
+ $parts[] = substr($perm, $i, 1);
+ }
+
+ $read = ($owner && $parts[0] == 'r') || $parts[4] == 'r' || $parts[7] == 'r';
+
+ return array(
+ 'read' => $parts[0] == 'd' ? $read && (($owner && $parts[3] == 'x') || $parts[6] == 'x' || $parts[9] == 'x') : $read,
+ 'write' => ($owner && $parts[2] == 'w') || $parts[5] == 'w' || $parts[8] == 'w'
+ );
+ }
+
+ /**
+ * Cache dir contents
+ *
+ * @param string $path dir path
+ * @return void
+ * @author Dmitry Levashov
+ **/
+ protected function cacheDir($path) {
+ $this->dirsCache[$path] = array();
+
+ if (preg_match('/\'|\"/', $path)) {
+ foreach (ftp_nlist($this->connect, $path) as $p) {
+ if (($stat = $this->_stat($p)) &&empty($stat['hidden'])) {
+ // $files[] = $stat;
+ $this->dirsCache[$path][] = $p;
+ }
+ }
+ return;
+ }
+ foreach (ftp_rawlist($this->connect, $path) as $raw) {
+ if (($stat = $this->parseRaw($raw))) {
+ $p = $path.'/'.$stat['name'];
+ $stat = $this->updateCache($p, $stat);
+ if (empty($stat['hidden'])) {
+ // $files[] = $stat;
+ $this->dirsCache[$path][] = $p;
+ }
+ }
+ }
+ }
+
+ /**
+ * Return ftp transfer mode for file
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function ftpMode($path) {
+ return strpos($this->mimetype($path), 'text/') === 0 ? FTP_ASCII : FTP_BINARY;
+ }
+
+ /*********************** paths/urls *************************/
+
+ /**
+ * Return parent directory path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dirname($path) {
+ return dirname($path);
+ }
+
+ /**
+ * Return file name
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _basename($path) {
+ return basename($path);
+ }
+
+ /**
+ * Join dir name and file name and retur full path
+ *
+ * @param string $dir
+ * @param string $name
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _joinPath($dir, $name) {
+ return $dir.DIRECTORY_SEPARATOR.$name;
+ }
+
+ /**
+ * Return normalized path, this works the same as os.path.normpath() in Python
+ *
+ * @param string $path path
+ * @return string
+ * @author Troex Nevelin
+ **/
+ protected function _normpath($path) {
+ if (empty($path)) {
+ $path = '.';
+ }
+ // path must be start with /
+ $path = preg_replace('|^\.\/?|', '/', $path);
+ $path = preg_replace('/^([^\/])/', "/$1", $path);
+
+ if (strpos($path, '/') === 0) {
+ $initial_slashes = true;
+ } else {
+ $initial_slashes = false;
+ }
+
+ if (($initial_slashes)
+ && (strpos($path, '//') === 0)
+ && (strpos($path, '///') === false)) {
+ $initial_slashes = 2;
+ }
+
+ $initial_slashes = (int) $initial_slashes;
+
+ $comps = explode('/', $path);
+ $new_comps = array();
+ foreach ($comps as $comp) {
+ if (in_array($comp, array('', '.'))) {
+ continue;
+ }
+
+ if (($comp != '..')
+ || (!$initial_slashes && !$new_comps)
+ || ($new_comps && (end($new_comps) == '..'))) {
+ array_push($new_comps, $comp);
+ } elseif ($new_comps) {
+ array_pop($new_comps);
+ }
+ }
+ $comps = $new_comps;
+ $path = implode('/', $comps);
+ if ($initial_slashes) {
+ $path = str_repeat('/', $initial_slashes) . $path;
+ }
+
+ return $path ? $path : '.';
+ }
+
+ /**
+ * Return file path related to root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _relpath($path) {
+ return $path == $this->root ? '' : substr($path, strlen($this->root)+1);
+ }
+
+ /**
+ * Convert path related to root dir into real path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _abspath($path) {
+ return $path == $this->separator ? $this->root : $this->root.$this->separator.$path;
+ }
+
+ /**
+ * Return fake path started from root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _path($path) {
+ return $this->rootName.($path == $this->root ? '' : $this->separator.$this->_relpath($path));
+ }
+
+ /**
+ * Return true if $path is children of $parent
+ *
+ * @param string $path path to check
+ * @param string $parent parent path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _inpath($path, $parent) {
+ return $path == $parent || strpos($path, $parent.'/') === 0;
+ }
+
+ /***************** file stat ********************/
+ /**
+ * Return stat for given path.
+ * Stat contains following fields:
+ * - (int) size file size in b. required
+ * - (int) ts file modification time in unix time. required
+ * - (string) mime mimetype. required for folders, others - optionally
+ * - (bool) read read permissions. required
+ * - (bool) write write permissions. required
+ * - (bool) locked is object locked. optionally
+ * - (bool) hidden is object hidden. optionally
+ * - (string) alias for symlinks - link target path relative to root path. optionally
+ * - (string) target for symlinks - link target path. optionally
+ *
+ * If file does not exists - returns empty array or false.
+ *
+ * @param string $path file path
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _stat($path) {
+ $raw = ftp_raw($this->connect, 'MLST '.$path);
+
+ if (is_array($raw) && count($raw) > 1 && substr(trim($raw[0]), 0, 1) == 2) {
+ $parts = explode(';', trim($raw[1]));
+ array_pop($parts);
+ $parts = array_map('strtolower', $parts);
+ $stat = array();
+ // debug($parts);
+ foreach ($parts as $part) {
+
+ list($key, $val) = explode('=', $part);
+
+ switch ($key) {
+ case 'type':
+ $stat['mime'] = strpos($val, 'dir') !== false ? 'directory' : $this->mimetype($path);
+ break;
+
+ case 'size':
+ $stat['size'] = $val;
+ break;
+
+ case 'modify':
+ $ts = mktime(intval(substr($val, 8, 2)), intval(substr($val, 10, 2)), intval(substr($val, 12, 2)), intval(substr($val, 4, 2)), intval(substr($val, 6, 2)), substr($val, 0, 4));
+ $stat['ts'] = $ts;
+ // $stat['date'] = $this->formatDate($ts);
+ break;
+
+ case 'unix.mode':
+ $stat['chmod'] = $val;
+ break;
+
+ case 'perm':
+ $val = strtolower($val);
+ $stat['read'] = (int)preg_match('/e|l|r/', $val);
+ $stat['write'] = (int)preg_match('/w|m|c/', $val);
+ if (!preg_match('/f|d/', $val)) {
+ $stat['locked'] = 1;
+ }
+ break;
+ }
+ }
+ if (empty($stat['mime'])) {
+ return array();
+ }
+ if ($stat['mime'] == 'directory') {
+ $stat['size'] = 0;
+ }
+
+ if (isset($stat['chmod'])) {
+ $stat['perm'] = '';
+ if ($stat['chmod'][0] == 0) {
+ $stat['chmod'] = substr($stat['chmod'], 1);
+ }
+
+ for ($i = 0; $i <= 2; $i++) {
+ $perm[$i] = array(false, false, false);
+ $n = isset($stat['chmod'][$i]) ? $stat['chmod'][$i] : 0;
+
+ if ($n - 4 >= 0) {
+ $perm[$i][0] = true;
+ $n = $n - 4;
+ $stat['perm'] .= 'r';
+ } else {
+ $stat['perm'] .= '-';
+ }
+
+ if ($n - 2 >= 0) {
+ $perm[$i][1] = true;
+ $n = $n - 2;
+ $stat['perm'] .= 'w';
+ } else {
+ $stat['perm'] .= '-';
+ }
+
+ if ($n - 1 == 0) {
+ $perm[$i][2] = true;
+ $stat['perm'] .= 'x';
+ } else {
+ $stat['perm'] .= '-';
+ }
+
+ $stat['perm'] .= ' ';
+ }
+
+ $stat['perm'] = trim($stat['perm']);
+
+ $owner = $this->options['owner'];
+ $read = ($owner && $perm[0][0]) || $perm[1][0] || $perm[2][0];
+
+ $stat['read'] = $stat['mime'] == 'directory' ? $read && (($owner && $perm[0][2]) || $perm[1][2] || $perm[2][2]) : $read;
+ $stat['write'] = ($owner && $perm[0][1]) || $perm[1][1] || $perm[2][1];
+ unset($stat['chmod']);
+
+ }
+
+ return $stat;
+
+ }
+
+ return array();
+ }
+
+ /**
+ * Return true if path is dir and has at least one childs directory
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _subdirs($path) {
+
+ if (preg_match('/\s|\'|\"/', $path)) {
+ foreach (ftp_nlist($this->connect, $path) as $p) {
+ if (($stat = $this->stat($path.'/'.$p)) && $stat['mime'] == 'directory') {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ foreach (ftp_rawlist($this->connect, $path) as $str) {
+ if (($stat = $this->parseRaw($str)) && $stat['mime'] == 'directory') {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Return object width and height
+ * Ususaly used for images, but can be realize for video etc...
+ *
+ * @param string $path file path
+ * @param string $mime file mime type
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dimensions($path, $mime) {
+ return false;
+ }
+
+ /******************** file/dir content *********************/
+
+ /**
+ * Return files list in directory.
+ *
+ * @param string $path dir path
+ * @return array
+ * @author Dmitry (dio) Levashov
+ * @author Cem (DiscoFever)
+ **/
+ protected function _scandir($path) {
+ $files = array();
+
+ foreach (ftp_rawlist($this->connect, $path) as $str) {
+ if (($stat = $this->parseRaw($str))) {
+ $files[] = $path.DIRECTORY_SEPARATOR.$stat['name'];
+ }
+ }
+
+ return $files;
+ }
+
+ /**
+ * Open file and return file pointer
+ *
+ * @param string $path file path
+ * @param bool $write open file for writing
+ * @return resource|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fopen($path, $mode='rb') {
+
+ if ($this->tmp) {
+ $local = $this->tmp.DIRECTORY_SEPARATOR.md5($path);
+
+ if (ftp_get($this->connect, $local, $path, FTP_BINARY)) {
+ return @fopen($local, $mode);
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Close opened file
+ *
+ * @param resource $fp file pointer
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fclose($fp, $path='') {
+ @fclose($fp);
+ if ($path) {
+ @unlink($this->tmp.DIRECTORY_SEPARATOR.md5($path));
+ }
+ }
+
+ /******************** file/dir manipulations *************************/
+
+ /**
+ * Create dir and return created dir path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new directory name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _mkdir($path, $name) {
+ $path = $path.'/'.$name;
+ if (ftp_mkdir($this->connect, $path) === false) {
+ return false;
+ }
+
+ $this->options['dirMode'] && @ftp_chmod($this->connect, $this->options['dirMode'], $path);
+ return $path;
+ }
+
+ /**
+ * Create file and return it's path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _mkfile($path, $name) {
+ if ($this->tmp) {
+ $path = $path.'/'.$name;
+ $local = $this->tmp.DIRECTORY_SEPARATOR.md5($path);
+ $res = touch($local) && ftp_put($this->connect, $path, $local, FTP_ASCII);
+ @unlink($local);
+ return $res ? $path : false;
+ }
+ return false;
+ }
+
+ /**
+ * Create symlink. FTP driver does not support symlinks.
+ *
+ * @param string $target link target
+ * @param string $path symlink path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _symlink($target, $path, $name) {
+ return false;
+ }
+
+ /**
+ * Copy file into another file
+ *
+ * @param string $source source file path
+ * @param string $targetDir target directory path
+ * @param string $name new file name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _copy($source, $targetDir, $name) {
+ $res = false;
+
+ if ($this->tmp) {
+ $local = $this->tmp.DIRECTORY_SEPARATOR.md5($source);
+ $target = $targetDir.DIRECTORY_SEPARATOR.$name;
+
+ if (ftp_get($this->connect, $local, $source, FTP_BINARY)
+ && ftp_put($this->connect, $target, $local, $this->ftpMode($target))) {
+ $res = $target;
+ }
+ @unlink($local);
+ }
+
+ return $res;
+ }
+
+ /**
+ * Move file into another parent dir.
+ * Return new file path or false.
+ *
+ * @param string $source source file path
+ * @param string $target target dir path
+ * @param string $name file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _move($source, $targetDir, $name) {
+ $target = $targetDir.DIRECTORY_SEPARATOR.$name;
+ return ftp_rename($this->connect, $source, $target) ? $target : false;
+ }
+
+ /**
+ * Remove file
+ *
+ * @param string $path file path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _unlink($path) {
+ return ftp_delete($this->connect, $path);
+ }
+
+ /**
+ * Remove dir
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _rmdir($path) {
+ return ftp_rmdir($this->connect, $path);
+ }
+
+ /**
+ * Create new file and write into it from file pointer.
+ * Return new file path or false on error.
+ *
+ * @param resource $fp file pointer
+ * @param string $dir target dir path
+ * @param string $name file name
+ * @param array $stat file stat (required by some virtual fs)
+ * @return bool|string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _save($fp, $dir, $name, $stat) {
+ $path = $dir.'/'.$name;
+ return ftp_fput($this->connect, $path, $fp, $this->ftpMode($path))
+ ? $path
+ : false;
+ }
+
+ /**
+ * Get file contents
+ *
+ * @param string $path file path
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _getContents($path) {
+ $contents = '';
+ if (($fp = $this->_fopen($path))) {
+ while (!feof($fp)) {
+ $contents .= fread($fp, 8192);
+ }
+ $this->_fclose($fp, $path);
+ return $contents;
+ }
+ return false;
+ }
+
+ /**
+ * Write a string to a file
+ *
+ * @param string $path file path
+ * @param string $content new file content
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _filePutContents($path, $content) {
+ $res = false;
+
+ if ($this->tmp) {
+ $local = $this->tmp.DIRECTORY_SEPARATOR.md5($path).'.txt';
+
+ if (@file_put_contents($local, $content, LOCK_EX) !== false
+ && ($fp = @fopen($local, 'rb'))) {
+ clearstatcache();
+ $res = ftp_fput($this->connect, $path, $fp, $this->ftpMode($path));
+ @fclose($fp);
+ }
+ file_exists($local) && @unlink($local);
+ }
+
+ return $res;
+ }
+
+ /**
+ * Detect available archivers
+ *
+ * @return void
+ **/
+ protected function _checkArchivers() {
+ // die('Not yet implemented. (_checkArchivers)');
+ return array();
+ }
+
+ /**
+ * Unpack archive
+ *
+ * @param string $path archive path
+ * @param array $arc archiver command and arguments (same as in $this->archivers)
+ * @return true
+ * @return void
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ protected function _unpack($path, $arc) {
+ die('Not yet implemented. (_unpack)');
+ return false;
+ }
+
+ /**
+ * Recursive symlinks search
+ *
+ * @param string $path file/dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _findSymlinks($path) {
+ die('Not yet implemented. (_findSymlinks)');
+ if (is_link($path)) {
+ return true;
+ }
+ if (is_dir($path)) {
+ foreach (scandir($path) as $name) {
+ if ($name != '.' && $name != '..') {
+ $p = $path.DIRECTORY_SEPARATOR.$name;
+ if (is_link($p)) {
+ return true;
+ }
+ if (is_dir($p) && $this->_findSymlinks($p)) {
+ return true;
+ } elseif (is_file($p)) {
+ $this->archiveSize += filesize($p);
+ }
+ }
+ }
+ } else {
+ $this->archiveSize += filesize($path);
+ }
+
+ return false;
+ }
+
+ /**
+ * Extract files from archive
+ *
+ * @param string $path archive path
+ * @param array $arc archiver command and arguments (same as in $this->archivers)
+ * @return true
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _extract($path, $arc)
+ {
+ // get current directory
+ $cwd = getcwd();
+
+ $tmpDir = $this->tempDir();
+ if (!$tmpDir) {
+ return false;
+ }
+
+ $basename = $this->_basename($path);
+ $localPath = $tmpDir . DIRECTORY_SEPARATOR . $basename;
+
+ if (!ftp_get($this->connect, $localPath, $path, FTP_BINARY)) {
+ //cleanup
+ $this->deleteDir($tmpDir);
+ return false;
+ }
+
+ $remoteDirectory = dirname($path);
+ chdir($tmpDir);
+ $command = escapeshellcmd($arc['cmd'] . ' ' . $arc['argc'] . ' "' . $basename . '"');
+ $descriptorspec = array(
+ 0 => array("pipe", "r"), // stdin is a pipe that the child will read from
+ 1 => array("pipe", "w"), // stdout is a pipe that the child will write to
+ 2 => array("pipe", "w") // stderr is a file to write to
+ );
+
+
+ $process = proc_open($command, $descriptorspec, $pipes, $cwd);
+
+ if (is_resource($process)) {
+ fclose($pipes[0]);
+ fclose($pipes[1]);
+ $return_value = proc_close($process);
+ }
+
+ unlink($basename);
+ $filesToProcess = elFinderVolumeFTP::listFilesInDirectory($tmpDir, true);
+ if(!$filesToProcess) {
+ $this->setError(elFinder::ERROR_EXTRACT_EXEC, $tmpDir." is not a directory");
+ $this->deleteDir($tmpDir); //cleanup
+ return false;
+ }
+ if (count($filesToProcess) > 1) {
+
+ // for several files - create new directory
+ // create unique name for directory
+ $name = basename($path);
+ if (preg_match('/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/i', $name, $m)) {
+ $name = substr($name, 0, strlen($name) - strlen($m[0]));
+ }
+
+ $test = dirname($path) . DIRECTORY_SEPARATOR . $name;
+ if ($this->stat($test)) {
+ $name = $this->uniqueName(dirname($path), $name, '-', false);
+ }
+
+ $newPath = dirname($path) . DIRECTORY_SEPARATOR . $name;
+
+ $success = $this->_mkdir(dirname($path), $name);
+ foreach ($filesToProcess as $filename) {
+ if (!$success) {
+ break;
+ }
+ $targetPath = $newPath . DIRECTORY_SEPARATOR . $filename;
+ if (is_dir($filename)) {
+ $success = $this->_mkdir($newPath, $filename);
+ } else {
+ $success = ftp_put($this->connect, $targetPath, $filename, FTP_BINARY);
+ }
+ }
+ unset($filename);
+
+ } else {
+ $filename = $filesToProcess[0];
+ $newPath = $remoteDirectory . DIRECTORY_SEPARATOR . $filename;
+ $success = ftp_put($this->connect, $newPath, $filename, FTP_BINARY);
+ }
+
+ // return to initial directory
+ chdir($cwd);
+
+ //cleanup
+ if(!$this->deleteDir($tmpDir)) {
+ return false;
+ }
+
+ if (!$success) {
+ $this->setError(elFinder::ERROR_FTP_UPLOAD_FILE, $newPath);
+ return false;
+ }
+ $this->clearcache();
+ return $newPath;
+ }
+
+ /**
+ * Create archive and return its path
+ *
+ * @param string $dir target dir
+ * @param array $files files names list
+ * @param string $name archive name
+ * @param array $arc archiver options
+ * @return string|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _archive($dir, $files, $name, $arc)
+ {
+ // get current directory
+ $cwd = getcwd();
+
+ $tmpDir = $this->tempDir();
+ if (!$tmpDir) {
+ return false;
+ }
+
+ //download data
+ if (!$this->ftp_download_files($dir, $files, $tmpDir)) {
+ //cleanup
+ $this->deleteDir($tmpDir);
+ return false;
+ }
+
+ // go to the temporary directory
+ chdir($tmpDir);
+
+ // path to local copy of archive
+ $path = $tmpDir . DIRECTORY_SEPARATOR . $name;
+
+ $file_names_string = "";
+ foreach (scandir($tmpDir) as $filename) {
+ if ('.' == $filename) {
+ continue;
+ }
+ if ('..' == $filename) {
+ continue;
+ }
+ $file_names_string = $file_names_string . '"' . $filename . '" ';
+ }
+ $command = escapeshellcmd($arc['cmd'] . ' ' . $arc['argc'] . ' "' . $name . '" ' . $file_names_string);
+
+ $descriptorspec = array(
+ 0 => array("pipe", "r"), // stdin is a pipe that the child will read from
+ 1 => array("pipe", "w"), // stdout is a pipe that the child will write to
+ 2 => array("pipe", "w") // stderr is a file to write to
+ );
+
+
+ $process = proc_open($command, $descriptorspec, $pipes, $cwd);
+
+ if (is_resource($process)) {
+ fclose($pipes[0]);
+ fclose($pipes[1]);
+ $return_value = proc_close($process);
+ }
+
+ $remoteArchiveFile = $dir . DIRECTORY_SEPARATOR . $name;
+
+ // upload archive
+ if (!ftp_put($this->connect, $remoteArchiveFile, $path, FTP_BINARY)) {
+ $this->setError(elFinder::ERROR_FTP_UPLOAD_FILE, $remoteArchiveFile);
+ $this->deleteDir($tmpDir); //cleanup
+ return false;
+ }
+
+ // return to initial work directory
+ chdir($cwd);
+
+ //cleanup
+ if(!$this->deleteDir($tmpDir)) {
+ return false;
+ }
+
+ return $remoteArchiveFile;
+ }
+
+ /**
+ * Create writable temporary directory and return path to it.
+ * @return string path to the new temporary directory or false in case of error.
+ */
+ private function tempDir()
+ {
+ $tempPath = tempnam($this->tmp, 'elFinder');
+ if (!$tempPath) {
+ $this->setError(elFinder::ERROR_CREATING_TEMP_DIR, $this->tmp);
+ return false;
+ }
+ $success = unlink($tempPath);
+ if (!$success) {
+ $this->setError(elFinder::ERROR_CREATING_TEMP_DIR, $this->tmp);
+ return false;
+ }
+ $success = mkdir($tempPath, 0700, true);
+ if (!$success) {
+ $this->setError(elFinder::ERROR_CREATING_TEMP_DIR, $this->tmp);
+ return false;
+ }
+ return $tempPath;
+ }
+
+ /**
+ * Gets in a single FTP request an array of absolute remote FTP paths of files and
+ * folders in $remote_directory omitting symbolic links.
+ * @param $remote_directory string remote FTP path to scan for file and folders recursively
+ * @return array of elements each of which is an array of two elements:
+ *
+ * $item['path'] - absolute remote FTP path
+ * $item['type'] - either 'f' for file or 'd' for directory
+ *
+ */
+ protected function ftp_scan_dir($remote_directory)
+ {
+ $buff = ftp_rawlist($this->connect, $remote_directory, true);
+ $next_folder = false;
+ $items = array();
+ foreach ($buff as $str) {
+ if ('' == $str) {
+ $next_folder = true;
+ continue;
+ }
+ if ($next_folder) {
+ $remote_directory = preg_replace('/\:/', '', $str);
+ $next_folder = false;
+ $item = array();
+ $item['path'] = $remote_directory;
+ $item['type'] = 'd'; // directory
+ $items[] = $item;
+ continue;
+ }
+ $info = preg_split("/\s+/", $str, 9);
+ $type = substr($info[0], 0, 1);
+ switch ($type) {
+ case 'l' : //omit symbolic links
+ case 'd' :
+ break;
+ default:
+ $remote_file_path = $remote_directory . DIRECTORY_SEPARATOR . $info[8];
+ $item = array();
+ $item['path'] = $remote_file_path;
+ $item['type'] = 'f'; // normal file
+ $items[] = $item;
+ }
+ }
+ return $items;
+ }
+
+ /**
+ * Downloads specified files from remote directory
+ * if there is a directory among files it is downloaded recursively (omitting symbolic links).
+ * @param $remote_directory string remote FTP path to a source directory to download from.
+ * @param array $files list of files to download from remote directory.
+ * @param $dest_local_directory string destination folder to store downloaded files.
+ * @return bool true on success and false on failure.
+ */
+ private function ftp_download_files($remote_directory, array $files, $dest_local_directory)
+ {
+ $contents = $this->ftp_scan_dir($remote_directory);
+ if (!isset($contents)) {
+ $this->setError(elFinder::ERROR_FTP_DOWNLOAD_FILE, $remote_directory);
+ return false;
+ }
+ foreach ($contents as $item) {
+ $drop = true;
+ foreach ($files as $file) {
+ if ($remote_directory . DIRECTORY_SEPARATOR . $file == $item['path'] || strstr($item['path'], $remote_directory . DIRECTORY_SEPARATOR . $file . DIRECTORY_SEPARATOR)) {
+ $drop = false;
+ break;
+ }
+ }
+ if ($drop) continue;
+ $relative_path = str_replace($remote_directory, '', $item['path']);
+ $local_path = $dest_local_directory . DIRECTORY_SEPARATOR . $relative_path;
+ switch ($item['type']) {
+ case 'd':
+ $success = mkdir($local_path);
+ break;
+ case 'f':
+ $success = ftp_get($this->connect, $local_path, $item['path'], FTP_BINARY);
+ break;
+ default:
+ $success = true;
+ }
+ if (!$success) {
+ $this->setError(elFinder::ERROR_FTP_DOWNLOAD_FILE, $remote_directory);
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Delete local directory recursively.
+ * @param $dirPath string to directory to be erased.
+ * @return bool true on success and false on failure.
+ */
+ private function deleteDir($dirPath)
+ {
+ if (!is_dir($dirPath)) {
+ $success = unlink($dirPath);
+ } else {
+ $success = true;
+ foreach (array_reverse(elFinderVolumeFTP::listFilesInDirectory($dirPath, false)) as $path) {
+ $path = $dirPath . DIRECTORY_SEPARATOR . $path;
+ if(is_link($path)) {
+ unlink($path);
+ } else if (is_dir($path)) {
+ $success = rmdir($path);
+ } else {
+ $success = unlink($path);
+ }
+ if (!$success) {
+ break;
+ }
+ }
+ if($success) {
+ $success = rmdir($dirPath);
+ }
+ }
+ if(!$success) {
+ $this->setError(elFinder::ERROR_RM, $dirPath);
+ return false;
+ }
+ return $success;
+ }
+
+ /**
+ * Returns array of strings containing all files and folders in the specified local directory.
+ * @param $dir
+ * @param string $prefix
+ * @internal param string $path path to directory to scan.
+ * @return array array of files and folders names relative to the $path
+ * or an empty array if the directory $path is empty,
+ *
+ * false if $path is not a directory or does not exist.
+ */
+ private static function listFilesInDirectory($dir, $omitSymlinks, $prefix = '')
+ {
+ if (!is_dir($dir)) {
+ return false;
+ }
+ $excludes = array(".","..");
+ $result = array();
+ $files = scandir($dir);
+ if(!$files) {
+ return array();
+ }
+ foreach($files as $file) {
+ if(!in_array($file, $excludes)) {
+ $path = $dir.DIRECTORY_SEPARATOR.$file;
+ if(is_link($path)) {
+ if($omitSymlinks) {
+ continue;
+ } else {
+ $result[] = $prefix.$file;
+ }
+ } else if(is_dir($path)) {
+ $result[] = $prefix.$file.DIRECTORY_SEPARATOR;
+ $subs = elFinderVolumeFTP::listFilesInDirectory($path, $omitSymlinks, $prefix.$file.DIRECTORY_SEPARATOR);
+ if($subs) {
+ $result = array_merge($result, $subs);
+ }
+
+ } else {
+ $result[] = $prefix.$file;
+ }
+ }
+ }
+ return $result;
+ }
+
+/**
+ * Resize image
+ * @param string $hash
+ * @param int $width
+ * @param int $height
+ * @param int $x
+ * @param int $y
+ * @param string $mode
+ * @param string $bg
+ * @param int $degree
+ * @return array|bool|false
+ */
+ public function resize($hash, $width, $height, $x, $y, $mode = 'resize', $bg = '', $degree = 0) {
+ if ($this->commandDisabled('resize')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($file = $this->file($hash)) == false) {
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ if (!$file['write'] || !$file['read']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ $path = $this->decode($hash);
+
+ $tmpDir = $this->tempDir();
+ if (!$tmpDir) {
+ return false;
+ }
+
+ $local_path = $tmpDir . DIRECTORY_SEPARATOR . basename($path);
+ $remote_directory = ftp_pwd($this->connect);
+ $success = ftp_get($this->connect, $local_path, $path, FTP_BINARY);
+ if (!$success) {
+ $this->setError(elFinder::ERROR_FTP_DOWNLOAD_FILE, $remote_directory);
+ return false;
+ }
+
+ if (!$this->canResize($path, $file)) {
+ return $this->setError(elFinder::ERROR_UNSUPPORT_TYPE);
+ }
+
+ switch($mode) {
+
+ case 'propresize':
+ $result = $this->imgResize($local_path, $width, $height, true, true);
+ break;
+
+ case 'crop':
+ $result = $this->imgCrop($local_path, $width, $height, $x, $y);
+ break;
+
+ case 'fitsquare':
+ $result = $this->imgSquareFit($local_path, $width, $height, 'center', 'middle', ($bg ? $bg : $this->options['tmbBgColor']));
+ break;
+
+ case 'rotate':
+ $result = $this->imgRotate($local_path, $degree, ($bg ? $bg : $this->options['tmbBgColor']));
+ break;
+
+ default:
+ $result = $this->imgResize($local_path, $width, $height, false, true);
+ break;
+ }
+
+ if ($result) {
+
+ // upload to FTP and clear temp local file
+
+ if (!ftp_put($this->connect, $path, $local_path, FTP_BINARY)) {
+ $this->setError(elFinder::ERROR_FTP_UPLOAD_FILE, $path);
+ $this->deleteDir($tmpDir); //cleanup
+ }
+
+ $this->clearcache();
+ return $this->stat($path);
+ }
+
+ $this->setError(elFinder::ERROR_UNKNOWN);
+ return false;
+ }
+
+} // END class
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeFTPIIS.class.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeFTPIIS.class.php
new file mode 100644
index 00000000..baf780b0
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeFTPIIS.class.php
@@ -0,0 +1,134 @@
+connect = ftp_connect($this->options['host'], $this->options['port'], $this->options['timeout']))) {
+ return $this->setError('Unable to connect to FTP server '.$this->options['host']);
+ }
+ if (!ftp_login($this->connect, $this->options['user'], $this->options['pass'])) {
+ $this->umount();
+ return $this->setError('Unable to login into '.$this->options['host']);
+ }
+
+ // switch off extended passive mode - may be usefull for some servers
+ //@ftp_exec($this->connect, 'epsv4 off' );
+ // enter passive mode if required
+ $this->options['mode'] = 'active';
+ ftp_pasv($this->connect, $this->options['mode'] == 'passive');
+
+ // enter root folder
+ if (!ftp_chdir($this->connect, $this->root))
+ {
+ $this->umount();
+ return $this->setError('Unable to open root folder.');
+ }
+
+ $stat = array();
+ $stat['name'] = $this->root;
+ $stat['mime'] = 'directory';
+ $this->filesCache[$this->root] = $stat;
+ $this->cacheDir($this->root);
+
+ return true;
+ }
+
+ /**
+ * Parse line from ftp_rawlist() output and return file stat (array)
+ *
+ * @param string $raw line from ftp_rawlist() output
+ * @return array
+ **/
+ protected function parseRaw($raw) {
+ $info = preg_split("/\s+/", $raw, 9);
+ $stat = array();
+
+ $stat['name'] = join(" ", array_slice($info, 3, 9));
+ $stat['read'] = true;
+ if ($info[2] == '')
+ {
+ $stat['size'] = 0;
+ $stat['mime'] = 'directory';
+ }
+ else
+ {
+ $stat['size'] = $info[2];
+ $stat['mime'] = $this->mimetype($stat['name']);
+ }
+
+ return $stat;
+ }
+
+ /**
+ * Cache dir contents
+ *
+ * @param string $path dir path
+ * @return void
+ **/
+ protected function cacheDir($path) {
+ $this->dirsCache[$path] = array();
+
+ if (preg_match('/\'|\"/', $path)) {
+ foreach (ftp_nlist($this->connect, $path) as $p) {
+ if (($stat = $this->_stat($p)) &&empty($stat['hidden'])) {
+ // $files[] = $stat;
+ $this->dirsCache[$path][] = $p;
+ }
+ }
+ return;
+ }
+ foreach (ftp_rawlist($this->connect, $path) as $raw) {
+ if (($stat = $this->parseRaw($raw))) {
+ $p = $path.DIRECTORY_SEPARATOR.$stat['name'];
+ // $files[] = $stat;
+ $this->dirsCache[$path][] = $p;
+ //$stat['name'] = $p;
+ $this->filesCache[$p] = $stat;
+ }
+ }
+ }
+
+ protected function _stat($path) {
+ $stat = array();
+
+ $stat = $this->filesCache[$path];
+
+ if (empty($stat))
+ {
+ $this->cacheDir($this->_dirname($path));
+ $stat = $this->filesCache[$path];
+
+ }
+
+ return $stat;
+ }
+
+
+ protected function ftp_scan_dir($remote_directory)
+ {
+ $buff = ftp_rawlist($this->connect, $remote_directory, true);
+ $items = array();
+ foreach ($buff as $str) {
+ $info = preg_split("/\s+/", $str, 9);
+ $remote_file_path = $remote_directory . DIRECTORY_SEPARATOR . join(" ", array_slice($info, 3, 9));
+ $item = array();
+ $item['type'] = $info[2] == '' ? 'd' : 'f';
+ $item['path'] = $remote_file_path;
+ $items[] = $item;
+
+ if ($item['type'] == 'd')
+ $items = array_merge($items, $this->ftp_scan_dir($item['path']));
+ }
+ return $items;
+ }
+} // END class
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeLocalFileSystem.class.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeLocalFileSystem.class.php
new file mode 100644
index 00000000..4f2ca4eb
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeLocalFileSystem.class.php
@@ -0,0 +1,763 @@
+options['alias'] = ''; // alias to replace root dir name
+ $this->options['dirMode'] = 0755; // new dirs mode
+ $this->options['fileMode'] = 0644; // new files mode
+ $this->options['quarantine'] = '.quarantine'; // quarantine folder name - required to check archive (must be hidden)
+ $this->options['maxArcFilesSize'] = 0; // max allowed archive files size (0 - no limit)
+ $this->options['icon'] = (defined('ELFINDER_IMG_PARENT_URL')? (rtrim(ELFINDER_IMG_PARENT_URL, '/').'/') : '').'img/volume_icon_local.png';
+ }
+
+ /*********************************************************************/
+ /* INIT AND CONFIGURE */
+ /*********************************************************************/
+
+ /**
+ * Configure after successfull mount.
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function configure() {
+ $this->aroot = realpath($this->root);
+ $root = $this->stat($this->root);
+
+ if ($this->options['quarantine']) {
+ $this->attributes[] = array(
+ 'pattern' => '~^'.preg_quote(DIRECTORY_SEPARATOR.$this->options['quarantine']).'$~',
+ 'read' => false,
+ 'write' => false,
+ 'locked' => true,
+ 'hidden' => true
+ );
+ }
+
+ // chek thumbnails path
+ if ($this->options['tmbPath']) {
+ $this->options['tmbPath'] = strpos($this->options['tmbPath'], DIRECTORY_SEPARATOR) === false
+ // tmb path set as dirname under root dir
+ ? $this->root.DIRECTORY_SEPARATOR.$this->options['tmbPath']
+ // tmb path as full path
+ : $this->_normpath($this->options['tmbPath']);
+ }
+
+ parent::configure();
+
+ // if no thumbnails url - try detect it
+ if ($root['read'] && !$this->tmbURL && $this->URL) {
+ if (strpos($this->tmbPath, $this->root) === 0) {
+ $this->tmbURL = $this->URL.str_replace(DIRECTORY_SEPARATOR, '/', substr($this->tmbPath, strlen($this->root)+1));
+ if (preg_match("|[^/?&=]$|", $this->tmbURL)) {
+ $this->tmbURL .= '/';
+ }
+ }
+ }
+
+ // check quarantine dir
+ if (!empty($this->options['quarantine'])) {
+ $this->quarantine = $this->root.DIRECTORY_SEPARATOR.$this->options['quarantine'];
+ if ((!is_dir($this->quarantine) && !$this->_mkdir($this->root, $this->options['quarantine'])) || !is_writable($this->quarantine)) {
+ $this->archivers['extract'] = array();
+ $this->disabled[] = 'extract';
+ }
+ } else {
+ $this->archivers['extract'] = array();
+ $this->disabled[] = 'extract';
+ }
+
+ }
+
+ /*********************************************************************/
+ /* FS API */
+ /*********************************************************************/
+
+ /*********************** paths/urls *************************/
+
+ /**
+ * Return parent directory path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dirname($path) {
+ return dirname($path);
+ }
+
+ /**
+ * Return file name
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _basename($path) {
+ return basename($path);
+ }
+
+ /**
+ * Join dir name and file name and retur full path
+ *
+ * @param string $dir
+ * @param string $name
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _joinPath($dir, $name) {
+ return $dir.DIRECTORY_SEPARATOR.$name;
+ }
+
+ /**
+ * Return normalized path, this works the same as os.path.normpath() in Python
+ *
+ * @param string $path path
+ * @return string
+ * @author Troex Nevelin
+ **/
+ protected function _normpath($path) {
+ if (empty($path)) {
+ return '.';
+ }
+
+ if (strpos($path, '/') === 0) {
+ $initial_slashes = true;
+ } else {
+ $initial_slashes = false;
+ }
+
+ if (($initial_slashes)
+ && (strpos($path, '//') === 0)
+ && (strpos($path, '///') === false)) {
+ $initial_slashes = 2;
+ }
+
+ $initial_slashes = (int) $initial_slashes;
+
+ $comps = explode('/', $path);
+ $new_comps = array();
+ foreach ($comps as $comp) {
+ if (in_array($comp, array('', '.'))) {
+ continue;
+ }
+
+ if (($comp != '..')
+ || (!$initial_slashes && !$new_comps)
+ || ($new_comps && (end($new_comps) == '..'))) {
+ array_push($new_comps, $comp);
+ } elseif ($new_comps) {
+ array_pop($new_comps);
+ }
+ }
+ $comps = $new_comps;
+ $path = implode('/', $comps);
+ if ($initial_slashes) {
+ $path = str_repeat('/', $initial_slashes) . $path;
+ }
+
+ return $path ? $path : '.';
+ }
+
+ /**
+ * Return file path related to root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _relpath($path) {
+ return $path == $this->root ? '' : substr($path, strlen($this->root)+1);
+ }
+
+ /**
+ * Convert path related to root dir into real path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _abspath($path) {
+ return $path == DIRECTORY_SEPARATOR ? $this->root : $this->root.DIRECTORY_SEPARATOR.$path;
+ }
+
+ /**
+ * Return fake path started from root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _path($path) {
+ return $this->rootName.($path == $this->root ? '' : $this->separator.$this->_relpath($path));
+ }
+
+ /**
+ * Return true if $path is children of $parent
+ *
+ * @param string $path path to check
+ * @param string $parent parent path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _inpath($path, $parent) {
+ $real_path = realpath($path);
+ $real_parent = realpath($parent);
+ if ($real_path && $real_parent) {
+ return $real_path === $real_parent || strpos($real_path, $real_parent.DIRECTORY_SEPARATOR) === 0;
+ }
+ return false;
+ }
+
+
+
+ /***************** file stat ********************/
+
+ /**
+ * Return stat for given path.
+ * Stat contains following fields:
+ * - (int) size file size in b. required
+ * - (int) ts file modification time in unix time. required
+ * - (string) mime mimetype. required for folders, others - optionally
+ * - (bool) read read permissions. required
+ * - (bool) write write permissions. required
+ * - (bool) locked is object locked. optionally
+ * - (bool) hidden is object hidden. optionally
+ * - (string) alias for symlinks - link target path relative to root path. optionally
+ * - (string) target for symlinks - link target path. optionally
+ *
+ * If file does not exists - returns empty array or false.
+ *
+ * @param string $path file path
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _stat($path) {
+ $stat = array();
+
+ if (!file_exists($path)) {
+ return $stat;
+ }
+
+ //Verifies the given path is the root or is inside the root. Prevents directory traveral.
+ if (!$this->aroot) {
+ // for Inheritance class ( not calling parent::configure() )
+ $this->aroot = realpath($this->root);
+ }
+ if (!$this->_inpath($path, $this->aroot)) {
+ return $stat;
+ }
+
+ if ($path != $this->root && is_link($path)) {
+ if (($target = $this->readlink($path)) == false
+ || $target == $path) {
+ $stat['mime'] = 'symlink-broken';
+ $stat['read'] = false;
+ $stat['write'] = false;
+ $stat['size'] = 0;
+ return $stat;
+ }
+ $stat['alias'] = $this->_path($target);
+ $stat['target'] = $target;
+ $path = $target;
+ $lstat = lstat($path);
+ $size = $lstat['size'];
+ } else {
+ $size = @filesize($path);
+ }
+
+ $dir = is_dir($path);
+
+ $stat['mime'] = $dir ? 'directory' : $this->mimetype($path);
+ $stat['ts'] = filemtime($path);
+ $stat['read'] = is_readable($path);
+ $stat['write'] = is_writable($path);
+ if ($stat['read']) {
+ $stat['size'] = $dir ? 0 : $size;
+ }
+
+ return $stat;
+ }
+
+
+ /**
+ * Return true if path is dir and has at least one childs directory
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _subdirs($path) {
+
+ if (($dir = dir($path))) {
+ $dir = dir($path);
+ while (($entry = $dir->read()) !== false) {
+ $p = $dir->path.DIRECTORY_SEPARATOR.$entry;
+ if ($entry != '.' && $entry != '..' && is_dir($p) && !$this->attr($p, 'hidden')) {
+ $dir->close();
+ return true;
+ }
+ }
+ $dir->close();
+ }
+ return false;
+ }
+
+ /**
+ * Return object width and height
+ * Usualy used for images, but can be realize for video etc...
+ *
+ * @param string $path file path
+ * @param string $mime file mime type
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dimensions($path, $mime) {
+ clearstatcache();
+ return strpos($mime, 'image') === 0 && ($s = @getimagesize($path)) !== false
+ ? $s[0].'x'.$s[1]
+ : false;
+ }
+ /******************** file/dir content *********************/
+
+ /**
+ * Return symlink target file
+ *
+ * @param string $path link path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function readlink($path) {
+ if (!($target = @readlink($path))) {
+ return false;
+ }
+
+ if (substr($target, 0, 1) != DIRECTORY_SEPARATOR) {
+ $target = dirname($path).DIRECTORY_SEPARATOR.$target;
+ }
+
+ if ($this->_inpath($target, $this->aroot)) {
+ $atarget = realpath($target);
+ return $this->_normpath($this->root.DIRECTORY_SEPARATOR.substr($atarget, strlen($this->aroot)+1));
+ }
+
+ return false;
+ }
+
+ /**
+ * Return files list in directory.
+ *
+ * @param string $path dir path
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _scandir($path) {
+ $files = array();
+
+ foreach (scandir($path) as $name) {
+ if ($name != '.' && $name != '..') {
+ $files[] = $path.DIRECTORY_SEPARATOR.$name;
+ }
+ }
+ return $files;
+ }
+
+ /**
+ * Open file and return file pointer
+ *
+ * @param string $path file path
+ * @param bool $write open file for writing
+ * @return resource|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fopen($path, $mode='rb') {
+ return @fopen($path, 'r');
+ }
+
+ /**
+ * Close opened file
+ *
+ * @param resource $fp file pointer
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fclose($fp, $path='') {
+ return @fclose($fp);
+ }
+
+ /******************** file/dir manipulations *************************/
+
+ /**
+ * Create dir and return created dir path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new directory name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _mkdir($path, $name) {
+ $path = $path.DIRECTORY_SEPARATOR.$name;
+
+ if (@mkdir($path)) {
+ @chmod($path, $this->options['dirMode']);
+ return $path;
+ }
+
+ return false;
+ }
+
+ /**
+ * Create file and return it's path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _mkfile($path, $name) {
+ $path = $path.DIRECTORY_SEPARATOR.$name;
+
+ if (($fp = @fopen($path, 'w'))) {
+ @fclose($fp);
+ @chmod($path, $this->options['fileMode']);
+ return $path;
+ }
+ return false;
+ }
+
+ /**
+ * Create symlink
+ *
+ * @param string $source file to link to
+ * @param string $targetDir folder to create link in
+ * @param string $name symlink name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _symlink($source, $targetDir, $name) {
+ return @symlink($source, $targetDir.DIRECTORY_SEPARATOR.$name);
+ }
+
+ /**
+ * Copy file into another file
+ *
+ * @param string $source source file path
+ * @param string $targetDir target directory path
+ * @param string $name new file name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _copy($source, $targetDir, $name) {
+ return copy($source, $targetDir.DIRECTORY_SEPARATOR.$name);
+ }
+
+ /**
+ * Move file into another parent dir.
+ * Return new file path or false.
+ *
+ * @param string $source source file path
+ * @param string $target target dir path
+ * @param string $name file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _move($source, $targetDir, $name) {
+ $target = $targetDir.DIRECTORY_SEPARATOR.$name;
+ return @rename($source, $target) ? $target : false;
+ }
+
+ /**
+ * Remove file
+ *
+ * @param string $path file path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _unlink($path) {
+ return @unlink($path);
+ }
+
+ /**
+ * Remove dir
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _rmdir($path) {
+ return @rmdir($path);
+ }
+
+ /**
+ * Create new file and write into it from file pointer.
+ * Return new file path or false on error.
+ *
+ * @param resource $fp file pointer
+ * @param string $dir target dir path
+ * @param string $name file name
+ * @param array $stat file stat (required by some virtual fs)
+ * @return bool|string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _save($fp, $dir, $name, $stat) {
+ $path = $dir.DIRECTORY_SEPARATOR.$name;
+
+ if (!($target = @fopen($path, 'wb'))) {
+ return false;
+ }
+
+ while (!feof($fp)) {
+ fwrite($target, fread($fp, 8192));
+ }
+ fclose($target);
+ @chmod($path, $this->options['fileMode']);
+ clearstatcache();
+ return $path;
+ }
+
+ /**
+ * Get file contents
+ *
+ * @param string $path file path
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _getContents($path) {
+ return file_get_contents($path);
+ }
+
+ /**
+ * Write a string to a file
+ *
+ * @param string $path file path
+ * @param string $content new file content
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _filePutContents($path, $content) {
+ if (@file_put_contents($path, $content, LOCK_EX) !== false) {
+ clearstatcache();
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Detect available archivers
+ *
+ * @return void
+ **/
+ protected function _checkArchivers() {
+ $this->archivers = $this->getArchivers();
+ return;
+ }
+
+ /**
+ * Unpack archive
+ *
+ * @param string $path archive path
+ * @param array $arc archiver command and arguments (same as in $this->archivers)
+ * @return void
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ protected function _unpack($path, $arc) {
+ $cwd = getcwd();
+ $dir = $this->_dirname($path);
+ chdir($dir);
+ $cmd = $arc['cmd'].' '.$arc['argc'].' '.escapeshellarg($this->_basename($path));
+ $this->procExec($cmd, $o, $c);
+ chdir($cwd);
+ }
+
+ /**
+ * Recursive symlinks search
+ *
+ * @param string $path file/dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _findSymlinks($path) {
+ if (is_link($path)) {
+ return true;
+ }
+
+ if (is_dir($path)) {
+ foreach (scandir($path) as $name) {
+ if ($name != '.' && $name != '..') {
+ $p = $path.DIRECTORY_SEPARATOR.$name;
+ if (is_link($p) || !$this->nameAccepted($name)) {
+ return true;
+ }
+ if (is_dir($p) && $this->_findSymlinks($p)) {
+ return true;
+ } elseif (is_file($p)) {
+ $this->archiveSize += filesize($p);
+ }
+ }
+ }
+ } else {
+
+ $this->archiveSize += filesize($path);
+ }
+
+ return false;
+ }
+
+ /**
+ * Extract files from archive
+ *
+ * @param string $path archive path
+ * @param array $arc archiver command and arguments (same as in $this->archivers)
+ * @return true
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _extract($path, $arc) {
+
+ if ($this->quarantine) {
+ $dir = $this->quarantine.DIRECTORY_SEPARATOR.str_replace(' ', '_', microtime()).basename($path);
+ $archive = $dir.DIRECTORY_SEPARATOR.basename($path);
+
+ if (!@mkdir($dir)) {
+ return false;
+ }
+
+ chmod($dir, 0777);
+
+ // copy in quarantine
+ if (!copy($path, $archive)) {
+ return false;
+ }
+
+ // extract in quarantine
+ $this->_unpack($archive, $arc);
+ unlink($archive);
+
+ // get files list
+ $ls = array();
+ foreach (scandir($dir) as $i => $name) {
+ if ($name != '.' && $name != '..') {
+ $ls[] = $name;
+ }
+ }
+
+ // no files - extract error ?
+ if (empty($ls)) {
+ return false;
+ }
+
+ $this->archiveSize = 0;
+
+ // find symlinks
+ $symlinks = $this->_findSymlinks($dir);
+ // remove arc copy
+ $this->remove($dir);
+
+ if ($symlinks) {
+ return $this->setError(elFinder::ERROR_ARC_SYMLINKS);
+ }
+
+ // check max files size
+ if ($this->options['maxArcFilesSize'] > 0 && $this->options['maxArcFilesSize'] < $this->archiveSize) {
+ return $this->setError(elFinder::ERROR_ARC_MAXSIZE);
+ }
+
+
+
+ // archive contains one item - extract in archive dir
+ if (count($ls) == 1) {
+ $this->_unpack($path, $arc);
+ $result = dirname($path).DIRECTORY_SEPARATOR.$ls[0];
+
+
+ } else {
+ // for several files - create new directory
+ // create unique name for directory
+ $name = basename($path);
+ if (preg_match('/\.((tar\.(gz|bz|bz2|z|lzo))|cpio\.gz|ps\.gz|xcf\.(gz|bz2)|[a-z0-9]{1,4})$/i', $name, $m)) {
+ $name = substr($name, 0, strlen($name)-strlen($m[0]));
+ }
+ $test = dirname($path).DIRECTORY_SEPARATOR.$name;
+ if (file_exists($test) || is_link($test)) {
+ $name = $this->uniqueName(dirname($path), $name, '-', false);
+ }
+
+ $result = dirname($path).DIRECTORY_SEPARATOR.$name;
+ $archive = $result.DIRECTORY_SEPARATOR.basename($path);
+
+ if (!$this->_mkdir(dirname($path), $name) || !copy($path, $archive)) {
+ return false;
+ }
+
+ $this->_unpack($archive, $arc);
+ @unlink($archive);
+ }
+
+ return file_exists($result) ? $result : false;
+ }
+ }
+
+ /**
+ * Create archive and return its path
+ *
+ * @param string $dir target dir
+ * @param array $files files names list
+ * @param string $name archive name
+ * @param array $arc archiver options
+ * @return string|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _archive($dir, $files, $name, $arc) {
+ $cwd = getcwd();
+ chdir($dir);
+
+ $files = array_map('escapeshellarg', $files);
+
+ $cmd = $arc['cmd'].' '.$arc['argc'].' '.escapeshellarg($name).' '.implode(' ', $files);
+ $this->procExec($cmd, $o, $c);
+ chdir($cwd);
+
+ $path = $dir.DIRECTORY_SEPARATOR.$name;
+ return file_exists($path) ? $path : false;
+ }
+
+} // END class
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeMySQL.class.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeMySQL.class.php
new file mode 100644
index 00000000..d9a7ce1f
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeMySQL.class.php
@@ -0,0 +1,961 @@
+ 'localhost',
+ 'user' => '',
+ 'pass' => '',
+ 'db' => '',
+ 'port' => null,
+ 'socket' => null,
+ 'files_table' => 'elfinder_file',
+ 'tmbPath' => '',
+ 'tmpPath' => '',
+ 'icon' => (defined('ELFINDER_IMG_PARENT_URL')? (rtrim(ELFINDER_IMG_PARENT_URL, '/').'/') : '').'img/volume_icon_sql.png'
+ );
+ $this->options = array_merge($this->options, $opts);
+ $this->options['mimeDetect'] = 'internal';
+ }
+
+ /*********************************************************************/
+ /* INIT AND CONFIGURE */
+ /*********************************************************************/
+
+ /**
+ * Prepare driver before mount volume.
+ * Connect to db, check required tables and fetch root path
+ *
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function init() {
+
+ if (!($this->options['host'] || $this->options['socket'])
+ || !$this->options['user']
+ || !$this->options['pass']
+ || !$this->options['db']
+ || !$this->options['path']
+ || !$this->options['files_table']) {
+ return false;
+ }
+
+
+ $this->db = new mysqli($this->options['host'], $this->options['user'], $this->options['pass'], $this->options['db'], $this->options['port'], $this->options['socket']);
+ if ($this->db->connect_error || @mysqli_connect_error()) {
+ return false;
+ }
+
+ $this->db->set_charset('utf8');
+
+ if ($res = $this->db->query('SHOW TABLES')) {
+ while ($row = $res->fetch_array()) {
+ if ($row[0] == $this->options['files_table']) {
+ $this->tbf = $this->options['files_table'];
+ break;
+ }
+ }
+ }
+
+ if (!$this->tbf) {
+ return false;
+ }
+
+ $this->updateCache($this->options['path'], $this->_stat($this->options['path']));
+
+ return true;
+ }
+
+
+
+ /**
+ * Set tmp path
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function configure() {
+ parent::configure();
+
+ if (($tmp = $this->options['tmpPath'])) {
+ if (!file_exists($tmp)) {
+ if (@mkdir($tmp)) {
+ @chmod($tmp, $this->options['tmbPathMode']);
+ }
+ }
+
+ $this->tmpPath = is_dir($tmp) && is_writable($tmp) ? $tmp : false;
+ }
+
+ if (!$this->tmpPath && $this->tmbPath && $this->tmbPathWritable) {
+ $this->tmpPath = $this->tmbPath;
+ }
+
+ $this->mimeDetect = 'internal';
+ }
+
+ /**
+ * Close connection
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov
+ **/
+ public function umount() {
+ $this->db->close();
+ }
+
+ /**
+ * Return debug info for client
+ *
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function debug() {
+ $debug = parent::debug();
+ $debug['sqlCount'] = $this->sqlCnt;
+ if ($this->dbError) {
+ $debug['dbError'] = $this->dbError;
+ }
+ return $debug;
+ }
+
+ /**
+ * Perform sql query and return result.
+ * Increase sqlCnt and save error if occured
+ *
+ * @param string $sql query
+ * @return misc
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function query($sql) {
+ $this->sqlCnt++;
+ $res = $this->db->query($sql);
+ if (!$res) {
+ $this->dbError = $this->db->error;
+ }
+ return $res;
+ }
+
+ /**
+ * Create empty object with required mimetype
+ *
+ * @param string $path parent dir path
+ * @param string $name object name
+ * @param string $mime mime type
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function make($path, $name, $mime) {
+ $sql = 'INSERT INTO %s (`parent_id`, `name`, `size`, `mtime`, `mime`, `content`, `read`, `write`) VALUES ("%s", "%s", 0, %d, "%s", "", "%d", "%d")';
+ $sql = sprintf($sql, $this->tbf, $path, $this->db->real_escape_string($name), time(), $mime, $this->defaults['read'], $this->defaults['write']);
+ // echo $sql;
+ return $this->query($sql) && $this->db->affected_rows > 0;
+ }
+
+ /**
+ * Search files
+ *
+ * @param string $q search string
+ * @param array $mimes
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ public function search($q, $mimes) {
+ $result = array();
+
+ $sql = 'SELECT f.id, f.parent_id, f.name, f.size, f.mtime AS ts, f.mime, f.read, f.write, f.locked, f.hidden, f.width, f.height, 0 AS dirs
+ FROM %s AS f
+ WHERE f.name RLIKE "%s"';
+
+ $sql = sprintf($sql, $this->tbf, $this->db->real_escape_string($q));
+
+ if (($res = $this->query($sql))) {
+ while ($row = $res->fetch_assoc()) {
+ if ($this->mimeAccepted($row['mime'], $mimes)) {
+ $id = $row['id'];
+ if ($row['parent_id']) {
+ $row['phash'] = $this->encode($row['parent_id']);
+ }
+
+ if ($row['mime'] == 'directory') {
+ unset($row['width']);
+ unset($row['height']);
+ } else {
+ unset($row['dirs']);
+ }
+
+ unset($row['id']);
+ unset($row['parent_id']);
+
+
+
+ if (($stat = $this->updateCache($id, $row)) && empty($stat['hidden'])) {
+ $result[] = $stat;
+ }
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Return temporary file path for required file
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function tmpname($path) {
+ return $this->tmpPath.DIRECTORY_SEPARATOR.md5($path);
+ }
+
+ /**
+ * Resize image
+ *
+ * @param string $hash image file
+ * @param int $width new width
+ * @param int $height new height
+ * @param bool $crop crop image
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ public function resize($hash, $width, $height, $x, $y, $mode = 'resize', $bg = '', $degree = 0) {
+ if ($this->commandDisabled('resize')) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ if (($file = $this->file($hash)) == false) {
+ return $this->setError(elFinder::ERROR_FILE_NOT_FOUND);
+ }
+
+ if (!$file['write'] || !$file['read']) {
+ return $this->setError(elFinder::ERROR_PERM_DENIED);
+ }
+
+ $path = $this->decode($hash);
+
+ if (!$this->canResize($path, $file)) {
+ return $this->setError(elFinder::ERROR_UNSUPPORT_TYPE);
+ }
+
+ $img = $this->tmpname($path);
+
+ if (!($fp = @fopen($img, 'w+'))) {
+ return false;
+ }
+
+ if (($res = $this->query('SELECT content FROM '.$this->tbf.' WHERE id="'.$path.'"'))
+ && ($r = $res->fetch_assoc())) {
+ fwrite($fp, $r['content']);
+ rewind($fp);
+ fclose($fp);
+ } else {
+ return false;
+ }
+
+
+ switch($mode) {
+
+ case 'propresize':
+ $result = $this->imgResize($img, $width, $height, true, true);
+ break;
+
+ case 'crop':
+ $result = $this->imgCrop($img, $width, $height, $x, $y);
+ break;
+
+ case 'fitsquare':
+ $result = $this->imgSquareFit($img, $width, $height, 'center', 'middle', $bg ? $bg : $this->options['tmbBgColor']);
+ break;
+
+ default:
+ $result = $this->imgResize($img, $width, $height, false, true);
+ break;
+ }
+
+ if ($result) {
+
+ $sql = sprintf('UPDATE %s SET content=LOAD_FILE("%s"), mtime=UNIX_TIMESTAMP() WHERE id=%d', $this->tbf, $this->loadFilePath($img), $path);
+
+ if (!$this->query($sql)) {
+ $content = file_get_contents($img);
+ $sql = sprintf('UPDATE %s SET content="%s", mtime=UNIX_TIMESTAMP() WHERE id=%d', $this->tbf, $this->db->real_escape_string($content), $path);
+ if (!$this->query($sql)) {
+ @unlink($img);
+ return false;
+ }
+ }
+ @unlink($img);
+ $this->rmTmb($file);
+ $this->clearcache();
+ return $this->stat($path);
+ }
+
+ return false;
+ }
+
+
+ /*********************************************************************/
+ /* FS API */
+ /*********************************************************************/
+
+ /**
+ * Cache dir contents
+ *
+ * @param string $path dir path
+ * @return void
+ * @author Dmitry Levashov
+ **/
+ protected function cacheDir($path) {
+ $this->dirsCache[$path] = array();
+
+ $sql = 'SELECT f.id, f.parent_id, f.name, f.size, f.mtime AS ts, f.mime, f.read, f.write, f.locked, f.hidden, f.width, f.height, IF(ch.id, 1, 0) AS dirs
+ FROM '.$this->tbf.' AS f
+ LEFT JOIN '.$this->tbf.' AS ch ON ch.parent_id=f.id AND ch.mime="directory"
+ WHERE f.parent_id="'.$path.'"
+ GROUP BY f.id';
+
+ $res = $this->query($sql);
+ if ($res) {
+ while ($row = $res->fetch_assoc()) {
+ // debug($row);
+ $id = $row['id'];
+ if ($row['parent_id']) {
+ $row['phash'] = $this->encode($row['parent_id']);
+ }
+
+ if ($row['mime'] == 'directory') {
+ unset($row['width']);
+ unset($row['height']);
+ } else {
+ unset($row['dirs']);
+ }
+
+ unset($row['id']);
+ unset($row['parent_id']);
+
+
+
+ if (($stat = $this->updateCache($id, $row)) && empty($stat['hidden'])) {
+ $this->dirsCache[$path][] = $id;
+ }
+ }
+ }
+
+ return $this->dirsCache[$path];
+ }
+
+ /**
+ * Return array of parents paths (ids)
+ *
+ * @param int $path file path (id)
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function getParents($path) {
+ $parents = array();
+
+ while ($path) {
+ if ($file = $this->stat($path)) {
+ array_unshift($parents, $path);
+ $path = isset($file['phash']) ? $this->decode($file['phash']) : false;
+ }
+ }
+
+ if (count($parents)) {
+ array_pop($parents);
+ }
+ return $parents;
+ }
+
+ /**
+ * Return correct file path for LOAD_FILE method
+ *
+ * @param string $path file path (id)
+ * @return string
+ * @author Troex Nevelin
+ **/
+ protected function loadFilePath($path) {
+ $realPath = realpath($path);
+ if (DIRECTORY_SEPARATOR == '\\') { // windows
+ $realPath = str_replace('\\', '\\\\', $realPath);
+ }
+ return $this->db->real_escape_string($realPath);
+ }
+
+ /**
+ * Recursive files search
+ *
+ * @param string $path dir path
+ * @param string $q search string
+ * @param array $mimes
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function doSearch($path, $q, $mimes) {
+ return array();
+ }
+
+
+ /*********************** paths/urls *************************/
+
+ /**
+ * Return parent directory path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dirname($path) {
+ return ($stat = $this->stat($path)) ? ($stat['phash'] ? $this->decode($stat['phash']) : $this->root) : false;
+ }
+
+ /**
+ * Return file name
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _basename($path) {
+ return ($stat = $this->stat($path)) ? $stat['name'] : false;
+ }
+
+ /**
+ * Join dir name and file name and return full path
+ *
+ * @param string $dir
+ * @param string $name
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _joinPath($dir, $name) {
+ $sql = 'SELECT id FROM '.$this->tbf.' WHERE parent_id="'.$dir.'" AND name="'.$this->db->real_escape_string($name).'"';
+
+ if (($res = $this->query($sql)) && ($r = $res->fetch_assoc())) {
+ $this->updateCache($r['id'], $this->_stat($r['id']));
+ return $r['id'];
+ }
+ return -1;
+ }
+
+ /**
+ * Return normalized path, this works the same as os.path.normpath() in Python
+ *
+ * @param string $path path
+ * @return string
+ * @author Troex Nevelin
+ **/
+ protected function _normpath($path) {
+ return $path;
+ }
+
+ /**
+ * Return file path related to root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _relpath($path) {
+ return $path;
+ }
+
+ /**
+ * Convert path related to root dir into real path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _abspath($path) {
+ return $path;
+ }
+
+ /**
+ * Return fake path started from root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _path($path) {
+ if (($file = $this->stat($path)) == false) {
+ return '';
+ }
+
+ $parentsIds = $this->getParents($path);
+ $path = '';
+ foreach ($parentsIds as $id) {
+ $dir = $this->stat($id);
+ $path .= $dir['name'].$this->separator;
+ }
+ return $path.$file['name'];
+ }
+
+ /**
+ * Return true if $path is children of $parent
+ *
+ * @param string $path path to check
+ * @param string $parent parent path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _inpath($path, $parent) {
+ return $path == $parent
+ ? true
+ : in_array($parent, $this->getParents($path));
+ }
+
+ /***************** file stat ********************/
+ /**
+ * Return stat for given path.
+ * Stat contains following fields:
+ * - (int) size file size in b. required
+ * - (int) ts file modification time in unix time. required
+ * - (string) mime mimetype. required for folders, others - optionally
+ * - (bool) read read permissions. required
+ * - (bool) write write permissions. required
+ * - (bool) locked is object locked. optionally
+ * - (bool) hidden is object hidden. optionally
+ * - (string) alias for symlinks - link target path relative to root path. optionally
+ * - (string) target for symlinks - link target path. optionally
+ *
+ * If file does not exists - returns empty array or false.
+ *
+ * @param string $path file path
+ * @return array|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _stat($path) {
+ $sql = 'SELECT f.id, f.parent_id, f.name, f.size, f.mtime AS ts, f.mime, f.read, f.write, f.locked, f.hidden, f.width, f.height, IF(ch.id, 1, 0) AS dirs
+ FROM '.$this->tbf.' AS f
+ LEFT JOIN '.$this->tbf.' AS p ON p.id=f.parent_id
+ LEFT JOIN '.$this->tbf.' AS ch ON ch.parent_id=f.id AND ch.mime="directory"
+ WHERE f.id="'.$path.'"
+ GROUP BY f.id';
+
+ $res = $this->query($sql);
+
+ if ($res) {
+ $stat = $res->fetch_assoc();
+ if ($stat['parent_id']) {
+ $stat['phash'] = $this->encode($stat['parent_id']);
+ }
+ if ($stat['mime'] == 'directory') {
+ unset($stat['width']);
+ unset($stat['height']);
+ } else {
+ unset($stat['dirs']);
+ }
+ unset($stat['id']);
+ unset($stat['parent_id']);
+ return $stat;
+
+ }
+ return array();
+ }
+
+ /**
+ * Return true if path is dir and has at least one childs directory
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _subdirs($path) {
+ return ($stat = $this->stat($path)) && isset($stat['dirs']) ? $stat['dirs'] : false;
+ }
+
+ /**
+ * Return object width and height
+ * Usualy used for images, but can be realize for video etc...
+ *
+ * @param string $path file path
+ * @param string $mime file mime type
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dimensions($path, $mime) {
+ return ($stat = $this->stat($path)) && isset($stat['width']) && isset($stat['height']) ? $stat['width'].'x'.$stat['height'] : '';
+ }
+
+ /******************** file/dir content *********************/
+
+ /**
+ * Return files list in directory.
+ *
+ * @param string $path dir path
+ * @return array
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _scandir($path) {
+ return isset($this->dirsCache[$path])
+ ? $this->dirsCache[$path]
+ : $this->cacheDir($path);
+ }
+
+ /**
+ * Open file and return file pointer
+ *
+ * @param string $path file path
+ * @param string $mode open file mode (ignored in this driver)
+ * @return resource|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fopen($path, $mode='rb') {
+ $fp = $this->tmbPath
+ ? @fopen($this->tmpname($path), 'w+')
+ : @tmpfile();
+
+
+ if ($fp) {
+ if (($res = $this->query('SELECT content FROM '.$this->tbf.' WHERE id="'.$path.'"'))
+ && ($r = $res->fetch_assoc())) {
+ fwrite($fp, $r['content']);
+ rewind($fp);
+ return $fp;
+ } else {
+ $this->_fclose($fp, $path);
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Close opened file
+ *
+ * @param resource $fp file pointer
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fclose($fp, $path='') {
+ @fclose($fp);
+ if ($path) {
+ @unlink($this->tmpname($path));
+ }
+ }
+
+ /******************** file/dir manipulations *************************/
+
+ /**
+ * Create dir and return created dir path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new directory name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _mkdir($path, $name) {
+ return $this->make($path, $name, 'directory') ? $this->_joinPath($path, $name) : false;
+ }
+
+ /**
+ * Create file and return it's path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _mkfile($path, $name) {
+ return $this->make($path, $name, 'text/plain') ? $this->_joinPath($path, $name) : false;
+ }
+
+ /**
+ * Create symlink. FTP driver does not support symlinks.
+ *
+ * @param string $target link target
+ * @param string $path symlink path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _symlink($target, $path, $name) {
+ return false;
+ }
+
+ /**
+ * Copy file into another file
+ *
+ * @param string $source source file path
+ * @param string $targetDir target directory path
+ * @param string $name new file name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _copy($source, $targetDir, $name) {
+ $this->clearcache();
+ $id = $this->_joinPath($targetDir, $name);
+
+ $sql = $id > 0
+ ? sprintf('REPLACE INTO %s (id, parent_id, name, content, size, mtime, mime, width, height, `read`, `write`, `locked`, `hidden`) (SELECT %d, %d, name, content, size, mtime, mime, width, height, `read`, `write`, `locked`, `hidden` FROM %s WHERE id=%d)', $this->tbf, $id, $this->_dirname($id), $this->tbf, $source)
+ : sprintf('INSERT INTO %s (parent_id, name, content, size, mtime, mime, width, height, `read`, `write`, `locked`, `hidden`) SELECT %d, "%s", content, size, %d, mime, width, height, `read`, `write`, `locked`, `hidden` FROM %s WHERE id=%d', $this->tbf, $targetDir, $this->db->real_escape_string($name), time(), $this->tbf, $source);
+
+ return $this->query($sql);
+ }
+
+ /**
+ * Move file into another parent dir.
+ * Return new file path or false.
+ *
+ * @param string $source source file path
+ * @param string $target target dir path
+ * @param string $name file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _move($source, $targetDir, $name) {
+ $sql = 'UPDATE %s SET parent_id=%d, name="%s" WHERE id=%d LIMIT 1';
+ $sql = sprintf($sql, $this->tbf, $targetDir, $this->db->real_escape_string($name), $source);
+ return $this->query($sql) && $this->db->affected_rows > 0 ? $source : false;
+ }
+
+ /**
+ * Remove file
+ *
+ * @param string $path file path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _unlink($path) {
+ return $this->query(sprintf('DELETE FROM %s WHERE id=%d AND mime!="directory" LIMIT 1', $this->tbf, $path)) && $this->db->affected_rows;
+ }
+
+ /**
+ * Remove dir
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _rmdir($path) {
+ return $this->query(sprintf('DELETE FROM %s WHERE id=%d AND mime="directory" LIMIT 1', $this->tbf, $path)) && $this->db->affected_rows;
+ }
+
+ /**
+ * undocumented function
+ *
+ * @return void
+ * @author Dmitry Levashov
+ **/
+ protected function _setContent($path, $fp) {
+ rewind($fp);
+ $fstat = fstat($fp);
+ $size = $fstat['size'];
+
+
+ }
+
+ /**
+ * Create new file and write into it from file pointer.
+ * Return new file path or false on error.
+ *
+ * @param resource $fp file pointer
+ * @param string $dir target dir path
+ * @param string $name file name
+ * @param array $stat file stat (required by some virtual fs)
+ * @return bool|string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _save($fp, $dir, $name, $stat) {
+ $this->clearcache();
+
+ $mime = $stat['mime'];
+ $w = !empty($stat['width']) ? $stat['width'] : 0;
+ $h = !empty($stat['height']) ? $stat['height'] : 0;
+
+ $id = $this->_joinPath($dir, $name);
+ rewind($fp);
+ $stat = fstat($fp);
+ $size = $stat['size'];
+
+ if (($tmpfile = tempnam($this->tmpPath, $this->id))) {
+ if (($trgfp = fopen($tmpfile, 'wb')) == false) {
+ unlink($tmpfile);
+ } else {
+ while (!feof($fp)) {
+ fwrite($trgfp, fread($fp, 8192));
+ }
+ fclose($trgfp);
+
+ $sql = $id > 0
+ ? 'REPLACE INTO %s (id, parent_id, name, content, size, mtime, mime, width, height) VALUES ('.$id.', %d, "%s", LOAD_FILE("%s"), %d, %d, "%s", %d, %d)'
+ : 'INSERT INTO %s (parent_id, name, content, size, mtime, mime, width, height) VALUES (%d, "%s", LOAD_FILE("%s"), %d, %d, "%s", %d, %d)';
+ $sql = sprintf($sql, $this->tbf, $dir, $this->db->real_escape_string($name), $this->loadFilePath($tmpfile), $size, time(), $mime, $w, $h);
+
+ $res = $this->query($sql);
+ unlink($tmpfile);
+
+ if ($res) {
+ return $id > 0 ? $id : $this->db->insert_id;
+ }
+ }
+ }
+
+
+ $content = '';
+ rewind($fp);
+ while (!feof($fp)) {
+ $content .= fread($fp, 8192);
+ }
+
+ $sql = $id > 0
+ ? 'REPLACE INTO %s (id, parent_id, name, content, size, mtime, mime, width, height) VALUES ('.$id.', %d, "%s", "%s", %d, %d, "%s", %d, %d)'
+ : 'INSERT INTO %s (parent_id, name, content, size, mtime, mime, width, height) VALUES (%d, "%s", "%s", %d, %d, "%s", %d, %d)';
+ $sql = sprintf($sql, $this->tbf, $dir, $this->db->real_escape_string($name), $this->db->real_escape_string($content), $size, time(), $mime, $w, $h);
+
+ unset($content);
+
+ if ($this->query($sql)) {
+ return $id > 0 ? $id : $this->db->insert_id;
+ }
+
+ return false;
+ }
+
+ /**
+ * Get file contents
+ *
+ * @param string $path file path
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _getContents($path) {
+ return ($res = $this->query(sprintf('SELECT content FROM %s WHERE id=%d', $this->tbf, $path))) && ($r = $res->fetch_assoc()) ? $r['content'] : false;
+ }
+
+ /**
+ * Write a string to a file
+ *
+ * @param string $path file path
+ * @param string $content new file content
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _filePutContents($path, $content) {
+ return $this->query(sprintf('UPDATE %s SET content="%s", size=%d, mtime=%d WHERE id=%d LIMIT 1', $this->tbf, $this->db->real_escape_string($content), strlen($content), time(), $path));
+ }
+
+ /**
+ * Detect available archivers
+ *
+ * @return void
+ **/
+ protected function _checkArchivers() {
+ return;
+ }
+
+ /**
+ * Unpack archive
+ *
+ * @param string $path archive path
+ * @param array $arc archiver command and arguments (same as in $this->archivers)
+ * @return void
+ * @author Dmitry (dio) Levashov
+ * @author Alexey Sukhotin
+ **/
+ protected function _unpack($path, $arc) {
+ return;
+ }
+
+ /**
+ * Recursive symlinks search
+ *
+ * @param string $path file/dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _findSymlinks($path) {
+ return false;
+ }
+
+ /**
+ * Extract files from archive
+ *
+ * @param string $path archive path
+ * @param array $arc archiver command and arguments (same as in $this->archivers)
+ * @return true
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _extract($path, $arc) {
+ return false;
+ }
+
+ /**
+ * Create archive and return its path
+ *
+ * @param string $dir target dir
+ * @param array $files files names list
+ * @param string $name archive name
+ * @param array $arc archiver options
+ * @return string|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _archive($dir, $files, $name, $arc) {
+ return false;
+ }
+
+} // END class
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeS3.class.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeS3.class.php
new file mode 100644
index 00000000..b1e900e1
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/elFinderVolumeS3.class.php
@@ -0,0 +1,732 @@
+ '',
+ 'secretkey' => '',
+ 'bucket' => '',
+ 'tmpPath' => '',
+ );
+ $this->options = array_merge($this->options, $opts);
+ $this->options['mimeDetect'] = 'internal';
+
+ }
+
+
+ protected function init() {
+ if (!$this->options['accesskey']
+ || !$this->options['secretkey']
+ || !$this->options['bucket']) {
+ return $this->setError('Required options undefined.');
+ }
+
+ $this->s3 = new S3SoapClient($this->options['accesskey'], $this->options['secretkey']);
+
+ $this->root = $this->options['path'];
+
+ $this->rootName = 's3';
+
+ return true;
+ }
+
+ protected function configure() {
+ parent::configure();
+ if (!empty($this->options['tmpPath'])) {
+ if ((is_dir($this->options['tmpPath']) || @mkdir($this->options['tmpPath'])) && is_writable($this->options['tmpPath'])) {
+ $this->tmpPath = $this->options['tmpPath'];
+ }
+ }
+ $this->mimeDetect = 'internal';
+ }
+
+ /**
+ * Return parent directory path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dirname($path) {
+
+ $newpath = preg_replace("/\/$/", "", $path);
+ $dn = substr($path, 0, strrpos($newpath, '/')) ;
+
+ if (substr($dn, 0, 1) != '/') {
+ $dn = "/$dn";
+ }
+
+ return $dn;
+ }
+
+ /**
+ * Return file name
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _basename($path) {
+ return basename($path);
+ }
+
+
+
+ /**
+ * Join dir name and file name and return full path.
+ * Some drivers (db) use int as path - so we give to concat path to driver itself
+ *
+ * @param string $dir dir path
+ * @param string $name file name
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _joinPath($dir, $name) {
+ return $dir.DIRECTORY_SEPARATOR.$name;
+ }
+
+ /**
+ * Return normalized path, this works the same as os.path.normpath() in Python
+ *
+ * @param string $path path
+ * @return string
+ * @author Troex Nevelin
+ **/
+ protected function _normpath($path) {
+ $tmp = preg_replace("/^\//", "", $path);
+ $tmp = preg_replace("/\/\//", "/", $tmp);
+ $tmp = preg_replace("/\/$/", "", $tmp);
+ return $tmp;
+ }
+
+ /**
+ * Return file path related to root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _relpath($path) {
+
+
+ $newpath = $path;
+
+
+ if (substr($path, 0, 1) != '/') {
+ $newpath = "/$newpath";
+ }
+
+ $newpath = preg_replace("/\/$/", "", $newpath);
+
+ $ret = ($newpath == $this->root) ? '' : substr($newpath, strlen($this->root)+1);
+
+ return $ret;
+ }
+
+ /**
+ * Convert path related to root dir into real path
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _abspath($path) {
+ return $path == $this->separator ? $this->root : $this->root.$this->separator.$path;
+ }
+
+ /**
+ * Return fake path started from root dir
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _path($path) {
+ return $this->rootName.($path == $this->root ? '' : $this->separator.$this->_relpath($path));
+ }
+
+ /**
+ * Return true if $path is children of $parent
+ *
+ * @param string $path path to check
+ * @param string $parent parent path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _inpath($path, $parent) {
+ return $path == $parent || strpos($path, $parent.'/') === 0;
+ }
+
+
+ /**
+ * Converting array of objects with name and value properties to
+ * array[key] = value
+ * @param array $metadata source array
+ * @return array
+ * @author Alexey Sukhotin
+ **/
+ protected function metaobj2array($metadata) {
+ $arr = array();
+
+ if (is_array($metadata)) {
+ foreach ($metadata as $meta) {
+ $arr[$meta->Name] = $meta->Value;
+ }
+ } else {
+ $arr[$metadata->Name] = $metadata->Value;
+ }
+ return $arr;
+ }
+
+ /**
+ * Return stat for given path.
+ * Stat contains following fields:
+ * - (int) size file size in b. required
+ * - (int) ts file modification time in unix time. required
+ * - (string) mime mimetype. required for folders, others - optionally
+ * - (bool) read read permissions. required
+ * - (bool) write write permissions. required
+ * - (bool) locked is object locked. optionally
+ * - (bool) hidden is object hidden. optionally
+ * - (string) alias for symlinks - link target path relative to root path. optionally
+ * - (string) target for symlinks - link target path. optionally
+ *
+ * If file does not exists - returns empty array or false.
+ *
+ * @param string $path file path
+ * @return array|false
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _stat($path) {
+
+ $stat = array(
+ 'size' => 0,
+ 'ts' => time(),
+ 'read' => true,
+ 'write' => true,
+ 'locked' => false,
+ 'hidden' => false,
+ 'mime' => 'directory',
+ );
+
+
+ if ($this->root == $path) {
+ return $stat;
+ }
+
+
+ $np = $this->_normpath($path);
+
+ try {
+ $obj = $this->s3->GetObject(array('Bucket' => $this->options['bucket'], 'Key' => $np , 'GetMetadata' => true, 'InlineData' => false, 'GetData' => false));
+ } catch (Exception $e) {
+
+ }
+
+ if (!isset($obj) || ($obj->GetObjectResponse->Status->Code != 200)) {
+ $np .= '/';
+ try {
+ $obj = $this->s3->GetObject(array('Bucket' => $this->options['bucket'], 'Key' => $np , 'GetMetadata' => true, 'InlineData' => false, 'GetData' => false));
+ } catch (Exception $e) {
+
+ }
+ }
+
+ if (!(isset($obj) && $obj->GetObjectResponse->Status->Code == 200)) {
+ return array();
+ }
+
+ $mime = '';
+
+ $metadata = $this->metaobj2array($obj->GetObjectResponse->Metadata);
+
+ $mime = $metadata['Content-Type'];
+
+ if (!empty($mime)) {
+ $stat['mime'] = ($mime == 'binary/octet-stream') ? 'directory' : $mime;
+ }
+
+ if (isset($obj->GetObjectResponse->LastModified)) {
+ $stat['ts'] = strtotime($obj->GetObjectResponse->LastModified);
+ }
+
+ try {
+ $files = $this->s3->ListBucket(array('Bucket' => $this->options['bucket'], 'Prefix' => $np, 'Delimiter' => '/'))->ListBucketResponse->Contents;
+ } catch (Exception $e) {
+
+ }
+
+ if (!is_array($files)) {
+ $files = array($files);
+ }
+
+ foreach ($files as $file) {
+ if ($file->Key == $np) {
+ $stat['size'] = $file->Size;
+ }
+ }
+
+ return $stat;
+ }
+
+
+
+ /***************** file stat ********************/
+
+
+ /**
+ * Return true if path is dir and has at least one childs directory
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Alexey Sukhotin
+ **/
+ protected function _subdirs($path) {
+ $stat = $this->_stat($path);
+
+ if ($stat['mime'] == 'directory') {
+ $files = $this->_scandir($path);
+ foreach ($files as $file) {
+ $fstat = $this->_stat($file);
+ if ($fstat['mime'] == 'directory') {
+ return true;
+ }
+ }
+
+ }
+
+ return false;
+ }
+
+ /**
+ * Return object width and height
+ * Ususaly used for images, but can be realize for video etc...
+ *
+ * @param string $path file path
+ * @param string $mime file mime type
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _dimensions($path, $mime) {
+ return false;
+ }
+
+ /******************** file/dir content *********************/
+
+ /**
+ * Return files list in directory
+ *
+ * @param string $path dir path
+ * @return array
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _scandir($path) {
+
+ $s3path = preg_replace("/^\//", "", $path) . '/';
+
+ $files = $this->s3->ListBucket(array('Bucket' => $this->options['bucket'], 'delimiter' => '/', 'Prefix' => $s3path))->ListBucketResponse->Contents;
+
+ $finalfiles = array();
+
+ foreach ($files as $file) {
+ if (preg_match("|^" . $s3path . "[^/]*/?$|", $file->Key)) {
+ $fname = preg_replace("/\/$/", "", $file->Key);
+ $fname = $file->Key;
+
+ if ($fname != preg_replace("/\/$/", "", $s3path)) {
+
+ }
+
+ $finalfiles[] = $fname;
+ }
+ }
+
+ sort($finalfiles);
+ return $finalfiles;
+ }
+
+ /**
+ * Return temporary file path for required file
+ *
+ * @param string $path file path
+ * @return string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function tmpname($path) {
+ return $this->tmpPath.DIRECTORY_SEPARATOR.md5($path);
+ }
+
+ /**
+ * Open file and return file pointer
+ *
+ * @param string $path file path
+ * @param bool $write open file for writing
+ * @return resource|false
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _fopen($path, $mode="rb") {
+
+ $tn = $this->tmpname($path);
+
+ $fp = $this->tmbPath
+ ? @fopen($tn, 'w+')
+ : @tmpfile();
+
+
+ if ($fp) {
+
+ try {
+ $obj = $this->s3->GetObject(array('Bucket' => $this->options['bucket'], 'Key' => $this->_normpath($path) , 'GetMetadata' => true, 'InlineData' => true, 'GetData' => true));
+ } catch (Exception $e) {
+
+ }
+
+ $mime = '';
+
+ $metadata = $this->metaobj2array($obj->GetObjectResponse->Metadata);
+
+ fwrite($fp, $obj->GetObjectResponse->Data);
+ rewind($fp);
+ return $fp;
+ }
+
+ return false;
+ }
+
+ /**
+ * Close opened file
+ *
+ * @param resource $fp file pointer
+ * @param string $path file path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _fclose($fp, $path='') {
+ @fclose($fp);
+ if ($path) {
+ @unlink($this->tmpname($path));
+ }
+ }
+
+ /******************** file/dir manipulations *************************/
+
+ /**
+ * Create dir and return created dir path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new directory name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _mkdir($path, $name) {
+
+ $newkey = $this->_normpath($path);
+ $newkey = preg_replace("/\/$/", "", $newkey);
+ $newkey = "$newkey/$name/";
+
+ try {
+ $obj = $this->s3->PutObjectInline(array('Bucket' => $this->options['bucket'], 'Key' => $newkey , 'ContentLength' => 0, 'Data' => ''));
+ } catch (Exception $e) {
+
+ }
+
+ if (isset($obj)) {
+ return "$path/$name";
+ }
+
+ return false;
+ }
+
+ /**
+ * Create file and return it's path or false on failed
+ *
+ * @param string $path parent dir path
+ * @param string $name new file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _mkfile($path, $name) {
+ $newkey = $this->_normpath($path);
+ $newkey = preg_replace("/\/$/", "", $newkey);
+ $newkey = "$newkey/$name";
+
+ try {
+ $obj = $this->s3->PutObjectInline(array('Bucket' => $this->options['bucket'], 'Key' => $newkey , 'ContentLength' => 0, 'Data' => '', 'Metadata' => array(array('Name' => 'Content-Type', 'Value' => 'text/plain'))));
+ } catch (Exception $e) {
+
+ }
+
+ if (isset($obj)) {
+ return "$path/$name";
+ }
+
+ return false;
+
+ }
+
+ /**
+ * Create symlink
+ *
+ * @param string $source file to link to
+ * @param string $targetDir folder to create link in
+ * @param string $name symlink name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _symlink($source, $targetDir, $name) {
+ return false;
+ }
+
+ /**
+ * Copy file into another file (only inside one volume)
+ *
+ * @param string $source source file path
+ * @param string $target target dir path
+ * @param string $name file name
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _copy($source, $targetDir, $name) {
+ return false;
+ }
+
+ /**
+ * Move file into another parent dir.
+ * Return new file path or false.
+ *
+ * @param string $source source file path
+ * @param string $target target dir path
+ * @param string $name file name
+ * @return string|bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _move($source, $targetDir, $name) {
+ return false;
+ }
+
+ /**
+ * Remove file
+ *
+ * @param string $path file path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _unlink($path) {
+
+ $newkey = $this->_normpath($path);
+ $newkey = preg_replace("/\/$/", "", $newkey);
+
+ try {
+ $obj = $this->s3->DeleteObject(array('Bucket' => $this->options['bucket'], 'Key' => $newkey));
+ } catch (Exception $e) {
+
+ }
+
+ /*$fp = fopen('/tmp/eltest.txt','a+');
+
+ fwrite($fp, 'key='.$newkey);*/
+
+ if (is_object($obj)) {
+ //fwrite($fp, 'obj='.var_export($obj,true));
+
+ if (isset($obj->DeleteObjectResponse->Code)) {
+ $rc = $obj->DeleteObjectResponse->Code;
+
+ if (substr($rc, 0, 1) == '2') {
+ return true;
+ }
+ }
+ }
+
+
+ //fclose($fp);
+
+ return false;
+ }
+
+ /**
+ * Remove dir
+ *
+ * @param string $path dir path
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _rmdir($path) {
+ return $this->_unlink($path . '/');
+ }
+
+ /**
+ * Create new file and write into it from file pointer.
+ * Return new file path or false on error.
+ *
+ * @param resource $fp file pointer
+ * @param string $dir target dir path
+ * @param string $name file name
+ * @return bool|string
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _save($fp, $dir, $name, $mime, $stat) {
+ return false;
+ }
+
+ /**
+ * Get file contents
+ *
+ * @param string $path file path
+ * @return string|false
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _getContents($path) {
+ return false;
+ }
+
+ /**
+ * Write a string to a file
+ *
+ * @param string $path file path
+ * @param string $content new file content
+ * @return bool
+ * @author Dmitry (dio) Levashov
+ **/
+ protected function _filePutContents($path, $content) {
+ return false;
+ }
+
+ /**
+ * Extract files from archive
+ *
+ * @param string $path file path
+ * @param array $arc archiver options
+ * @return bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _extract($path, $arc) {
+ return false;
+ }
+
+ /**
+ * Create archive and return its path
+ *
+ * @param string $dir target dir
+ * @param array $files files names list
+ * @param string $name archive name
+ * @param array $arc archiver options
+ * @return string|bool
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _archive($dir, $files, $name, $arc) {
+ return false;
+ }
+
+ /**
+ * Detect available archivers
+ *
+ * @return void
+ * @author Dmitry (dio) Levashov,
+ * @author Alexey Sukhotin
+ **/
+ protected function _checkArchivers() {
+
+ }
+
+}
+
+/**
+ * SoapClient extension with Amazon S3 WSDL and request signing support
+ *
+ * @author Alexey Sukhotin
+ **/
+class S3SoapClient extends SoapClient {
+
+ private $accesskey = '';
+ private $secretkey = '';
+ public $client = NULL;
+
+
+ public function __construct($key = '', $secret = '') {
+ $this->accesskey = $key;
+ $this->secretkey = $secret;
+ parent::__construct('http://s3.amazonaws.com/doc/2006-03-01/AmazonS3.wsdl');
+ }
+
+
+ /**
+ * Method call wrapper which adding S3 signature and default arguments to all S3 operations
+ *
+ * @author Alexey Sukhotin
+ **/
+ public function __call($method, $arguments) {
+
+ /* Getting list of S3 web service functions which requires signing */
+ $funcs = $this->__getFunctions();
+
+ $funcnames = array();
+
+ foreach ($funcs as $func) {
+ preg_match("/\S+\s+([^\)]+)\(/", $func, $m);
+
+ if (isset($m[1])) {
+ $funcnames[] = $m[1];
+ }
+ }
+
+ /* adding signature to arguments */
+ if (in_array("{$method}", $funcnames)) {
+
+ if (is_array($arguments[0])) {
+ $arguments[0] = array_merge($arguments[0], $this->sign("{$method}"));
+ } else {
+ $arguments[0] = $this->sign("{$method}");
+ }
+
+ }
+
+ /*$fp = fopen('/tmp/s3debug.txt', 'a+');
+ fwrite($fp, 'method='."{$method}". ' timestamp='.date('Y-m-d H:i:s').' args='.var_export($arguments,true) . "\n");
+ fclose($fp);*/
+ return parent::__call($method, $arguments);
+ }
+
+ /**
+ * Generating signature and timestamp for specified S3 operation
+ *
+ * @param string $operation S3 operation name
+ * @return array
+ * @author Alexey Sukhotin
+ **/
+ protected function sign($operation) {
+
+ $params = array(
+ 'AWSAccessKeyId' => $this->accesskey,
+ 'Timestamp' => gmdate('Y-m-d\TH:i:s.000\Z'),
+ );
+
+ $sign_str = 'AmazonS3' . $operation . $params['Timestamp'];
+
+ $params['Signature'] = base64_encode(hash_hmac('sha1', $sign_str, $this->secretkey, TRUE));
+
+ return $params;
+ }
+
+}
+
+?>
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/mime.types b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/mime.types
new file mode 100644
index 00000000..94b99b77
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/mime.types
@@ -0,0 +1,512 @@
+# This file controls what Internet media types are sent to the client for
+# given file extension(s). Sending the correct media type to the client
+# is important so they know how to handle the content of the file.
+# For more information about Internet media types, please read
+# RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type
+# registry is at .
+
+# MIME type Extension
+application/andrew-inset ez
+application/chemtool cht
+application/dicom dcm
+application/docbook+xml docbook
+application/ecmascript ecma
+application/flash-video flv
+application/illustrator ai
+application/javascript js
+application/mac-binhex40
+application/mathematica nb
+application/msword doc
+application/octet-stream bin
+application/oda oda
+application/ogg ogg
+application/pdf pdf
+application/pgp pgp
+application/pgp-encrypted
+application/pgp-encrypted pgp gpg
+application/pgp-keys
+application/pgp-keys skr pkr
+application/pgp-signature
+application/pgp-signature sig
+application/pkcs7-mime
+application/pkcs7-signature p7s
+application/postscript ps
+application/rtf rtf
+application/sdp sdp
+application/smil smil smi sml
+application/stuffit sit
+application/vnd.corel-draw cdr
+application/vnd.hp-hpgl hpgl
+application/vnd.hp-pcl pcl
+application/vnd.lotus-1-2-3 123 wk1 wk3 wk4 wks
+application/vnd.mozilla.xul+xml xul
+application/vnd.ms-excel xls xlc xll xlm xlw xla xlt xld
+application/vnd.ms-powerpoint ppz ppt pps pot
+application/vnd.oasis.opendocument.chart odc
+application/vnd.oasis.opendocument.database odb
+application/vnd.oasis.opendocument.formula odf
+application/vnd.oasis.opendocument.graphics odg
+application/vnd.oasis.opendocument.graphics-template otg
+application/vnd.oasis.opendocument.image odi
+application/vnd.oasis.opendocument.presentation odp
+application/vnd.oasis.opendocument.presentation-template otp
+application/vnd.oasis.opendocument.spreadsheet ods
+application/vnd.oasis.opendocument.spreadsheet-template ots
+application/vnd.oasis.opendocument.text odt
+application/vnd.oasis.opendocument.text-master odm
+application/vnd.oasis.opendocument.text-template ott
+application/vnd.oasis.opendocument.text-web oth
+application/vnd.palm pdb
+application/vnd.rn-realmedia
+application/vnd.rn-realmedia rm
+application/vnd.rn-realmedia-secure rms
+application/vnd.rn-realmedia-vbr rmvb
+application/vnd.stardivision.calc sdc
+application/vnd.stardivision.chart sds
+application/vnd.stardivision.draw sda
+application/vnd.stardivision.impress sdd sdp
+application/vnd.stardivision.mail smd
+application/vnd.stardivision.math smf
+application/vnd.stardivision.writer sdw vor sgl
+application/vnd.sun.xml.calc sxc
+application/vnd.sun.xml.calc.template stc
+application/vnd.sun.xml.draw sxd
+application/vnd.sun.xml.draw.template std
+application/vnd.sun.xml.impress sxi
+application/vnd.sun.xml.impress.template sti
+application/vnd.sun.xml.math sxm
+application/vnd.sun.xml.writer sxw
+application/vnd.sun.xml.writer.global sxg
+application/vnd.sun.xml.writer.template stw
+application/vnd.wordperfect wpd
+application/x-abiword abw abw.CRASHED abw.gz zabw
+application/x-amipro sam
+application/x-anjuta-project prj
+application/x-applix-spreadsheet as
+application/x-applix-word aw
+application/x-arc
+application/x-archive a
+application/x-arj arj
+application/x-asax asax
+application/x-ascx ascx
+application/x-ashx ashx
+application/x-asix asix
+application/x-asmx asmx
+application/x-asp asp
+application/x-awk
+application/x-axd axd
+application/x-bcpio bcpio
+application/x-bittorrent torrent
+application/x-blender blender blend BLEND
+application/x-bzip bz bz2
+application/x-bzip bz2 bz
+application/x-bzip-compressed-tar tar.bz tar.bz2
+application/x-bzip-compressed-tar tar.bz tar.bz2 tbz tbz2
+application/x-cd-image iso
+application/x-cgi cgi
+application/x-chess-pgn pgn
+application/x-chm chm
+application/x-class-file
+application/x-cmbx cmbx
+application/x-compress Z
+application/x-compressed-tar tar.gz tar.Z tgz taz
+application/x-compressed-tar tar.gz tgz
+application/x-config config
+application/x-core
+application/x-cpio cpio
+application/x-cpio-compressed cpio.gz
+application/x-csh csh
+application/x-cue cue
+application/x-dbase dbf
+application/x-dbm
+application/x-dc-rom dc
+application/x-deb deb
+application/x-designer ui
+application/x-desktop desktop kdelnk
+application/x-devhelp devhelp
+application/x-dia-diagram dia
+application/x-disco disco
+application/x-dvi dvi
+application/x-e-theme etheme
+application/x-egon egon
+application/x-executable exe
+application/x-font-afm afm
+application/x-font-bdf bdf
+application/x-font-dos
+application/x-font-framemaker
+application/x-font-libgrx
+application/x-font-linux-psf psf
+application/x-font-otf
+application/x-font-pcf pcf
+application/x-font-pcf pcf.gz
+application/x-font-speedo spd
+application/x-font-sunos-news
+application/x-font-tex
+application/x-font-tex-tfm
+application/x-font-ttf ttc TTC
+application/x-font-ttf ttf
+application/x-font-type1 pfa pfb gsf pcf.Z
+application/x-font-vfont
+application/x-frame
+application/x-frontline aop
+application/x-gameboy-rom gb
+application/x-gdbm
+application/x-gdesklets-display display
+application/x-genesis-rom gen md
+application/x-gettext-translation gmo
+application/x-glabels glabels
+application/x-glade glade
+application/x-gmc-link
+application/x-gnome-db-connection connection
+application/x-gnome-db-database database
+application/x-gnome-stones caves
+application/x-gnucash gnucash gnc xac
+application/x-gnumeric gnumeric
+application/x-graphite gra
+application/x-gtar gtar
+application/x-gtktalog
+application/x-gzip gz
+application/x-gzpostscript ps.gz
+application/x-hdf hdf
+application/x-ica ica
+application/x-ipod-firmware
+application/x-jamin jam
+application/x-jar jar
+application/x-java class
+application/x-java-archive jar ear war
+
+application/x-jbuilder-project jpr jpx
+application/x-karbon karbon
+application/x-kchart chrt
+application/x-kformula kfo
+application/x-killustrator kil
+application/x-kivio flw
+application/x-kontour kon
+application/x-kpovmodeler kpm
+application/x-kpresenter kpr kpt
+application/x-krita kra
+application/x-kspread ksp
+application/x-kspread-crypt
+application/x-ksysv-package
+application/x-kugar kud
+application/x-kword kwd kwt
+application/x-kword-crypt
+application/x-lha lha lzh
+application/x-lha lzh
+application/x-lhz lhz
+application/x-linguist ts
+application/x-lyx lyx
+application/x-lzop lzo
+application/x-lzop-compressed-tar tar.lzo tzo
+application/x-macbinary
+application/x-machine-config
+application/x-magicpoint mgp
+application/x-master-page master
+application/x-matroska mkv
+application/x-mdp mdp
+application/x-mds mds
+application/x-mdsx mdsx
+application/x-mergeant mergeant
+application/x-mif mif
+application/x-mozilla-bookmarks
+application/x-mps mps
+application/x-ms-dos-executable exe
+application/x-mswinurl
+application/x-mswrite wri
+application/x-msx-rom msx
+application/x-n64-rom n64
+application/x-nautilus-link
+application/x-nes-rom nes
+application/x-netcdf cdf nc
+application/x-netscape-bookmarks
+application/x-object o
+application/x-ole-storage
+application/x-oleo oleo
+application/x-palm-database
+application/x-palm-database pdb prc
+application/x-par2 PAR2 par2
+application/x-pef-executable
+application/x-perl pl pm al perl
+application/x-php php php3 php4
+application/x-pkcs12 p12 pfx
+application/x-planner planner mrproject
+application/x-planperfect pln
+application/x-prjx prjx
+application/x-profile
+application/x-ptoptimizer-script pto
+application/x-pw pw
+application/x-python-bytecode pyc pyo
+application/x-quattro-pro wb1 wb2 wb3
+application/x-quattropro wb1 wb2 wb3
+application/x-qw qif
+application/x-rar rar
+application/x-rar-compressed rar
+application/x-rdp rdp
+application/x-reject rej
+application/x-remoting rem
+application/x-resources resources
+application/x-resourcesx resx
+application/x-rpm rpm
+application/x-ruby
+application/x-sc
+application/x-sc sc
+application/x-scribus sla sla.gz scd scd.gz
+application/x-shar shar
+application/x-shared-library-la la
+application/x-sharedlib so
+application/x-shellscript sh
+application/x-shockwave-flash swf
+application/x-siag siag
+application/x-slp
+application/x-smil kino
+application/x-smil smi smil
+application/x-sms-rom sms gg
+application/x-soap-remoting soap
+application/x-streamingmedia ssm
+application/x-stuffit
+application/x-stuffit bin sit
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-tar tar
+application/x-tarz tar.Z
+application/x-tex-gf gf
+application/x-tex-pk k
+application/x-tgif obj
+application/x-theme theme
+application/x-toc toc
+application/x-toutdoux
+application/x-trash bak old sik
+application/x-troff tr roff t
+application/x-troff-man man
+application/x-troff-man-compressed
+application/x-tzo tar.lzo tzo
+application/x-ustar ustar
+application/x-wais-source src
+application/x-web-config
+application/x-wpg wpg
+application/x-wsdl wsdl
+application/x-x509-ca-cert der cer crt cert pem
+application/x-xbel xbel
+application/x-zerosize
+application/x-zoo zoo
+application/xhtml+xml xhtml
+application/zip zip
+audio/ac3 ac3
+audio/basic au snd
+audio/midi mid midi
+audio/mpeg mp3
+audio/prs.sid sid psid
+audio/vnd.rn-realaudio ra
+audio/x-aac aac
+audio/x-adpcm
+audio/x-aifc
+audio/x-aiff aif aiff
+audio/x-aiff aiff aif aifc
+audio/x-aiffc
+audio/x-flac flac
+audio/x-m4a m4a
+audio/x-mod mod ult uni XM m15 mtm 669
+audio/x-mp3-playlist
+audio/x-mpeg
+audio/x-mpegurl m3u
+audio/x-ms-asx
+audio/x-pn-realaudio ra ram rm
+audio/x-pn-realaudio ram rmm
+audio/x-riff
+audio/x-s3m s3m
+audio/x-scpls pls
+audio/x-scpls pls xpl
+audio/x-stm stm
+audio/x-voc voc
+audio/x-wav wav
+audio/x-xi xi
+audio/x-xm xm
+image/bmp bmp
+image/cgm cgm
+image/dpx
+image/fax-g3 g3
+image/g3fax
+image/gif gif
+image/ief ief
+image/jpeg jpeg jpg jpe
+image/jpeg2000 jp2
+image/png png
+image/rle rle
+image/svg+xml svg
+image/tiff tif tiff
+image/vnd.djvu djvu djv
+image/vnd.dwg dwg
+image/vnd.dxf dxf
+image/x-3ds 3ds
+image/x-applix-graphics ag
+image/x-cmu-raster ras
+image/x-compressed-xcf xcf.gz xcf.bz2
+image/x-dcraw bay BAY bmq BMQ cr2 CR2 crw CRW cs1 CS1 dc2 DC2 dcr DCR fff FFF k25 K25 kdc KDC mos MOS mrw MRW nef NEF orf ORF pef PEF raf RAF rdc RDC srf SRF x3f X3F
+image/x-dib
+image/x-eps eps epsi epsf
+image/x-fits fits
+image/x-fpx
+image/x-icb icb
+image/x-ico ico
+image/x-iff iff
+image/x-ilbm ilbm
+image/x-jng jng
+image/x-lwo lwo lwob
+image/x-lws lws
+image/x-msod msod
+image/x-niff
+image/x-pcx
+image/x-photo-cd pcd
+image/x-pict pict pict1 pict2
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-psd psd
+image/x-rgb rgb
+image/x-sgi sgi
+image/x-sun-raster sun
+image/x-tga tga
+image/x-win-bitmap cur
+image/x-wmf wmf
+image/x-xbitmap xbm
+image/x-xcf xcf
+image/x-xfig fig
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+inode/blockdevice
+inode/chardevice
+inode/directory
+inode/fifo
+inode/mount-point
+inode/socket
+inode/symlink
+message/delivery-status
+message/disposition-notification
+message/external-body
+message/news
+message/partial
+message/rfc822
+message/x-gnu-rmail
+model/vrml wrl
+multipart/alternative
+multipart/appledouble
+multipart/digest
+multipart/encrypted
+multipart/mixed
+multipart/related
+multipart/report
+multipart/signed
+multipart/x-mixed-replace
+text/calendar vcs ics
+text/css css CSSL
+text/directory vcf vct gcrd
+text/enriched
+text/html html htm
+text/htmlh
+text/mathml mml
+text/plain txt asc
+text/rdf rdf
+text/rfc822-headers
+text/richtext rtx
+text/rss rss
+text/sgml sgml sgm
+text/spreadsheet sylk slk
+text/tab-separated-values tsv
+text/vnd.rn-realtext rt
+text/vnd.wap.wml wml
+text/x-adasrc adb ads
+text/x-authors
+text/x-bibtex bib
+text/x-boo boo
+text/x-c++hdr hh
+text/x-c++src cpp cxx cc C c++
+text/x-chdr h h++ hp
+text/x-comma-separated-values csv
+text/x-copying
+text/x-credits
+text/x-csrc c
+text/x-dcl dcl
+text/x-dsl dsl
+text/x-dsrc d
+text/x-dtd dtd
+text/x-emacs-lisp el
+text/x-fortran f
+text/x-gettext-translation po
+text/x-gettext-translation-template pot
+text/x-gtkrc
+text/x-haskell hs
+text/x-idl idl
+text/x-install
+text/x-java java
+text/x-js js
+text/x-ksysv-log
+text/x-literate-haskell lhs
+text/x-log log
+text/x-makefile
+text/x-moc moc
+text/x-msil il
+text/x-nemerle n
+text/x-objcsrc m
+text/x-pascal p pas
+text/x-patch diff patch
+text/x-python py
+text/x-readme
+text/x-rng rng
+text/x-scheme scm
+text/x-setext etx
+text/x-speech
+text/x-sql sql
+text/x-suse-ymp ymp
+text/x-suse-ymu ymu
+text/x-tcl tcl tk
+text/x-tex tex ltx sty cls
+text/x-texinfo texi texinfo
+text/x-texmacs tm ts
+text/x-troff-me me
+text/x-troff-mm mm
+text/x-troff-ms ms
+text/x-uil uil
+text/x-uri uri url
+text/x-vb vb
+text/x-xds xds
+text/x-xmi xmi
+text/x-xsl xsl
+text/x-xslfo fo xslfo
+text/x-xslt xslt xsl
+text/xmcd
+text/xml xml
+video/3gpp 3gp
+video/dv dv dif
+video/isivideo
+video/mpeg mpeg mpg mp2 mpe vob dat
+video/quicktime qt mov moov qtvr
+video/vivo
+video/vnd.rn-realvideo rv
+video/wavelet
+video/x-3gpp2 3g2
+video/x-anim anim[1-9j]
+video/x-avi
+video/x-flic fli flc
+video/x-mng mng
+video/x-ms-asf asf asx
+video/x-ms-wmv wmv
+video/x-msvideo avi
+video/x-nsv nsv NSV
+video/x-real-video
+video/x-sgi-movie movie
+application/x-java-jnlp-file jnlp
+application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
+application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
+application/vnd.ms-word.document.macroEnabled.12 docm
+application/vnd.ms-word.template.macroEnabled.12 dotm
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
+application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx
+application/vnd.ms-excel.sheet.macroEnabled.12 xlsm
+application/vnd.ms-excel.template.macroEnabled.12 xltm
+application/vnd.ms-excel.addin.macroEnabled.12 xlam
+application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb
+application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
+application/vnd.openxmlformats-officedocument.presentationml.template potx
+application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
+application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/AutoResize/plugin.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/AutoResize/plugin.php
new file mode 100644
index 00000000..d9f0e676
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/AutoResize/plugin.php
@@ -0,0 +1,157 @@
+ true, // For control by volume driver
+ 'maxWidth' => 1024, // Path to Water mark image
+ 'maxHeight' => 1024, // Margin right pixel
+ 'quality' => 95, // JPEG image save quality
+ 'targetType' => IMG_GIF|IMG_JPG|IMG_PNG|IMG_WBMP // Target image formats ( bit-field )
+ );
+
+ $this->opts = array_merge($defaults, $opts);
+
+ }
+
+ public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
+ $opts = $this->opts;
+ $volOpts = $volume->getOptionsPlugin('AutoResize');
+ if (is_array($volOpts)) {
+ $opts = array_merge($this->opts, $volOpts);
+ }
+
+ if (! $opts['enable']) {
+ return false;
+ }
+
+ $srcImgInfo = @getimagesize($src);
+ if ($srcImgInfo === false) {
+ return false;
+ }
+
+ // check target image type
+ $imgTypes = array(
+ IMAGETYPE_GIF => IMG_GIF,
+ IMAGETYPE_JPEG => IMG_JPEG,
+ IMAGETYPE_PNG => IMG_PNG,
+ IMAGETYPE_WBMP => IMG_WBMP,
+ );
+ if (! ($opts['targetType'] & $imgTypes[$srcImgInfo[2]])) {
+ return false;
+ }
+
+ if ($srcImgInfo[0] > $opts['maxWidth'] || $srcImgInfo[1] > $opts['maxHeight']) {
+ return $this->resize($src, $srcImgInfo, $opts['maxWidth'], $opts['maxHeight'], $opts['quality']);
+ }
+
+ return false;
+ }
+
+ private function resize($src, $srcImgInfo, $maxWidth, $maxHeight, $quality) {
+ $zoom = min(($maxWidth/$srcImgInfo[0]),($maxHeight/$srcImgInfo[1]));
+ $width = round($srcImgInfo[0] * $zoom);
+ $height = round($srcImgInfo[1] * $zoom);
+
+ if (class_exists('Imagick')) {
+ return $this->resize_imagick($src, $width, $height, $quality);
+ } else {
+ return $this->resize_gd($src, $width, $height, $quality, $srcImgInfo);
+ }
+ }
+
+ private function resize_gd($src, $width, $height, $quality, $srcImgInfo) {
+ switch ($srcImgInfo['mime']) {
+ case 'image/gif':
+ if (@imagetypes() & IMG_GIF) {
+ $oSrcImg = @imagecreatefromgif($src);
+ } else {
+ $ermsg = 'GIF images are not supported';
+ }
+ break;
+ case 'image/jpeg':
+ if (@imagetypes() & IMG_JPG) {
+ $oSrcImg = @imagecreatefromjpeg($src) ;
+ } else {
+ $ermsg = 'JPEG images are not supported';
+ }
+ break;
+ case 'image/png':
+ if (@imagetypes() & IMG_PNG) {
+ $oSrcImg = @imagecreatefrompng($src) ;
+ } else {
+ $ermsg = 'PNG images are not supported';
+ }
+ break;
+ case 'image/wbmp':
+ if (@imagetypes() & IMG_WBMP) {
+ $oSrcImg = @imagecreatefromwbmp($src);
+ } else {
+ $ermsg = 'WBMP images are not supported';
+ }
+ break;
+ default:
+ $oSrcImg = false;
+ $ermsg = $srcImgInfo['mime'].' images are not supported';
+ break;
+ }
+
+ if ($oSrcImg && false != ($tmp = imagecreatetruecolor($width, $height))) {
+
+ if (!imagecopyresampled($tmp, $oSrcImg, 0, 0, 0, 0, $width, $height, $srcImgInfo[0], $srcImgInfo[1])) {
+ return false;
+ }
+
+ switch ($srcImgInfo['mime']) {
+ case 'image/gif':
+ imagegif($tmp, $src);
+ break;
+ case 'image/jpeg':
+ imagejpeg($tmp, $src, $quality);
+ break;
+ case 'image/png':
+ if (function_exists('imagesavealpha') && function_exists('imagealphablending')) {
+ imagealphablending($tmp, false);
+ imagesavealpha($tmp, true);
+ }
+ imagepng($tmp, $src);
+ break;
+ case 'image/wbmp':
+ imagewbmp($tmp, $src);
+ break;
+ }
+
+ imagedestroy($oSrcImg);
+ imagedestroy($tmp);
+
+ return true;
+
+ }
+ return false;
+ }
+
+ private function resize_imagick($src, $width, $height, $quality) {
+ try {
+ $img = new imagick($src);
+
+ if (strtoupper($img->getImageFormat()) === 'JPEG') {
+ $img->setImageCompression(imagick::COMPRESSION_JPEG);
+ $img->setCompressionQuality($quality);
+ }
+
+ $img->resizeImage($width, $height, Imagick::FILTER_LANCZOS, true);
+
+ $result = $img->writeImage($src);
+
+ $img->clear();
+ $img->destroy();
+
+ return $result ? true : false;
+ } catch (Exception $e) {
+ return false;
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Normalizer/plugin.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Normalizer/plugin.php
new file mode 100644
index 00000000..9f5e78c7
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Normalizer/plugin.php
@@ -0,0 +1,121 @@
+= 5.3.0, PECL intl >= 1.0.0)
+ * or PEAR package "I18N_UnicodeNormalizer"
+ *
+ * ex. binding, configure on connector options
+ * $opts = array(
+ * 'bind' => array(
+ * 'mkdir.pre mkfile.pre rename.pre' => array(
+ * 'Plugin.Normalizer.cmdPreprocess'
+ * ),
+ * 'upload.presave' => array(
+ * 'Plugin.Normalizer.onUpLoadPreSave'
+ * )
+ * ),
+ * // global configure (optional)
+ * 'plugin' => array(
+ * 'Normalizer' => array(
+ * 'enable' => true,
+ * 'nfc' => true,
+ * 'nfkc' => true
+ * )
+ * ),
+ * // each volume configure (optional)
+ * 'roots' => array(
+ * array(
+ * 'driver' => 'LocalFileSystem',
+ * 'path' => '/path/to/files/',
+ * 'URL' => 'http://localhost/to/files/'
+ * 'plugin' => array(
+ * 'Normalizer' => array(
+ * 'enable' => true,
+ * 'nfc' => true,
+ * 'nfkc' => true
+ * )
+ * )
+ * )
+ * )
+ * );
+ *
+ * @package elfinder
+ * @author Naoki Sawada
+ * @license New BSD
+ */
+class elFinderPluginNormalizer
+{
+ private $opts = array();
+
+ public function __construct($opts) {
+ $defaults = array(
+ 'enable' => true, // For control by volume driver
+ 'nfc' => true, // Canonical Decomposition followed by Canonical Composition
+ 'nfkc' => true // Compatibility Decomposition followed by Canonical
+ );
+
+ $this->opts = array_merge($defaults, $opts);
+ }
+
+ public function cmdPreprocess($cmd, &$args, $elfinder, $volume) {
+ $opts = $this->getOpts($volume);
+ if (! $opts['enable']) {
+ return false;
+ }
+
+ if (isset($args['name'])) {
+ $args['name'] = $this->normalize($args['name'], $opts);
+ }
+ return true;
+ }
+
+ public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
+ $opts = $this->getOpts($volume);
+ if (! $opts['enable']) {
+ return false;
+ }
+
+ if ($path) {
+ $path = $this->normalize($path, $opts);
+ }
+ $name = $this->normalize($name, $opts);
+ return true;
+ }
+
+ private function getOpts($volume) {
+ $opts = $this->opts;
+ if (is_object($volume)) {
+ $volOpts = $volume->getOptionsPlugin('Normalizer');
+ if (is_array($volOpts)) {
+ $opts = array_merge($this->opts, $volOpts);
+ }
+ }
+ return $opts;
+ }
+
+ private function normalize($str, $opts) {
+ if (class_exists('Normalizer')) {
+ if ($opts['nfc'] && ! Normalizer::isNormalized($str, Normalizer::FORM_C))
+ $str = Normalizer::normalize($str, Normalizer::FORM_C);
+ if ($opts['nfkc'] && ! Normalizer::isNormalized($str, Normalizer::FORM_KC))
+ $str = Normalizer::normalize($str, Normalizer::FORM_KC);
+ } else {
+ if (! class_exists('I18N_UnicodeNormalizer')) {
+ @ include_once 'I18N/UnicodeNormalizer.php';
+ }
+ if (class_exists('I18N_UnicodeNormalizer')) {
+ $normalizer = new I18N_UnicodeNormalizer();
+ if ($opts['nfc'])
+ $str = $normalizer->normalize($str, 'NFC');
+ if ($opts['nfkc'])
+ $str = $normalizer->normalize($str, 'NFKC');
+ }
+ }
+ return $str;
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Sanitizer/plugin.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Sanitizer/plugin.php
new file mode 100644
index 00000000..9f548caf
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Sanitizer/plugin.php
@@ -0,0 +1,100 @@
+ array(
+ * 'mkdir.pre mkfile.pre rename.pre' => array(
+ * 'Plugin.Sanitizer.cmdPreprocess'
+ * ),
+ * 'upload.presave' => array(
+ * 'Plugin.Sanitizer.onUpLoadPreSave'
+ * )
+ * ),
+ * // global configure (optional)
+ * 'plugin' => array(
+ * 'Sanitizer' => array(
+ * 'enable' => true,
+ * 'targets' => array('\\','/',':','*','?','"','<','>','|'), // target chars
+ * 'replace' => '_' // replace to this
+ * )
+ * ),
+ * // each volume configure (optional)
+ * 'roots' => array(
+ * array(
+ * 'driver' => 'LocalFileSystem',
+ * 'path' => '/path/to/files/',
+ * 'URL' => 'http://localhost/to/files/'
+ * 'plugin' => array(
+ * 'Sanitizer' => array(
+ * 'enable' => true,
+ * 'targets' => array('\\','/',':','*','?','"','<','>','|'), // target chars
+ * 'replace' => '_' // replace to this
+ * )
+ * )
+ * )
+ * )
+ * );
+ *
+ * @package elfinder
+ * @author Naoki Sawada
+ * @license New BSD
+ */
+class elFinderPluginSanitizer
+{
+ private $opts = array();
+
+ public function __construct($opts) {
+ $defaults = array(
+ 'enable' => true, // For control by volume driver
+ 'targets' => array('\\','/',':','*','?','"','<','>','|'), // target chars
+ 'replace' => '_' // replace to this
+ );
+
+ $this->opts = array_merge($defaults, $opts);
+ }
+
+ public function cmdPreprocess($cmd, &$args, $elfinder, $volume) {
+ $opts = $this->getOpts($volume);
+ if (! $opts['enable']) {
+ return false;
+ }
+
+ if (isset($args['name'])) {
+ $args['name'] = $this->sanitizeFileName($args['name'], $opts);
+ }
+ return true;
+ }
+
+ public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
+ $opts = $this->getOpts($volume);
+ if (! $opts['enable']) {
+ return false;
+ }
+
+ if ($path) {
+ $path = $this->sanitizeFileName($path, $opts, array('/'));
+ }
+ $name = $this->sanitizeFileName($name, $opts);
+ return true;
+ }
+
+ private function getOpts($volume) {
+ $opts = $this->opts;
+ if (is_object($volume)) {
+ $volOpts = $volume->getOptionsPlugin('Sanitizer');
+ if (is_array($volOpts)) {
+ $opts = array_merge($this->opts, $volOpts);
+ }
+ }
+ return $opts;
+ }
+
+ private function sanitizeFileName($filename, $opts, $allows = array()) {
+ $targets = $allows? array_diff($opts['targets'], $allows) : $opts['targets'];
+ return str_replace($targets, $opts['replace'], $filename);
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Watermark/logo.png b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Watermark/logo.png
new file mode 100644
index 00000000..ca6fe8a2
Binary files /dev/null and b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Watermark/logo.png differ
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Watermark/plugin.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Watermark/plugin.php
new file mode 100644
index 00000000..84b9bb43
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Elfinder/plugins/Watermark/plugin.php
@@ -0,0 +1,243 @@
+ true, // For control by volume driver
+ 'source' => 'logo.png', // Path to Water mark image
+ 'marginRight' => 5, // Margin right pixel
+ 'marginBottom' => 5, // Margin bottom pixel
+ 'quality' => 95, // JPEG image save quality
+ 'transparency' => 70, // Water mark image transparency ( other than PNG )
+ 'targetType' => IMG_GIF|IMG_JPG|IMG_PNG|IMG_WBMP, // Target image formats ( bit-field )
+ 'targetMinPixel' => 200 // Target image minimum pixel size
+ );
+
+ $this->opts = array_merge($defaults, $opts);
+
+ }
+
+ public function onUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume) {
+
+ $opts = $this->opts;
+ $volOpts = $volume->getOptionsPlugin('Watermark');
+ if (is_array($volOpts)) {
+ $opts = array_merge($this->opts, $volOpts);
+ }
+
+ if (! $opts['enable']) {
+ return false;
+ }
+
+ $srcImgInfo = @getimagesize($src);
+ if ($srcImgInfo === false) {
+ return false;
+ }
+
+ // check water mark image
+ if (! file_exists($opts['source'])) {
+ $opts['source'] = dirname(__FILE__) . "/" . $opts['source'];
+ }
+ if (is_readable($opts['source'])) {
+ $watermarkImgInfo = @getimagesize($opts['source']);
+ if (! $watermarkImgInfo) {
+ return false;
+ }
+ } else {
+ return false;
+ }
+
+ $watermark = $opts['source'];
+ $marginLeft = $opts['marginRight'];
+ $marginBottom = $opts['marginBottom'];
+ $quality = $opts['quality'];
+ $transparency = $opts['transparency'];
+
+ // check target image type
+ $imgTypes = array(
+ IMAGETYPE_GIF => IMG_GIF,
+ IMAGETYPE_JPEG => IMG_JPEG,
+ IMAGETYPE_PNG => IMG_PNG,
+ IMAGETYPE_WBMP => IMG_WBMP,
+ );
+ if (! ($opts['targetType'] & $imgTypes[$srcImgInfo[2]])) {
+ return false;
+ }
+
+ // check target image size
+ if ($opts['targetMinPixel'] > 0 && $opts['targetMinPixel'] > min($srcImgInfo[0], $srcImgInfo[1])) {
+ return false;
+ }
+
+ $watermark_width = $watermarkImgInfo[0];
+ $watermark_height = $watermarkImgInfo[1];
+ $dest_x = $srcImgInfo[0] - $watermark_width - $marginLeft;
+ $dest_y = $srcImgInfo[1] - $watermark_height - $marginBottom;
+
+ if (class_exists('Imagick')) {
+ return $this->watermarkPrint_imagick($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo);
+ } else {
+ return $this->watermarkPrint_gd($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo, $srcImgInfo);
+ }
+ }
+
+ private function watermarkPrint_imagick($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo) {
+
+ try {
+ // Open the original image
+ $img = new Imagick($src);
+
+ // Open the watermark
+ $watermark = new Imagick($watermark);
+
+ // Set transparency
+ if (strtoupper($watermark->getImageFormat()) !== 'PNG') {
+ $watermark->setImageOpacity($transparency/100);
+ }
+
+ // Overlay the watermark on the original image
+ $img->compositeImage($watermark, imagick::COMPOSITE_OVER, $dest_x, $dest_y);
+
+ // Set quality
+ if (strtoupper($img->getImageFormat()) === 'JPEG') {
+ $img->setImageCompression(imagick::COMPRESSION_JPEG);
+ $img->setCompressionQuality($quality);
+ }
+
+ $result = $img->writeImage($src);
+
+ $img->clear();
+ $img->destroy();
+ $watermark->clear();
+ $watermark->destroy();
+
+ return $result ? true : false;
+ } catch (Exception $e) {
+ return false;
+ }
+ }
+
+ private function watermarkPrint_gd($src, $watermark, $dest_x, $dest_y, $quality, $transparency, $watermarkImgInfo, $srcImgInfo) {
+
+ $watermark_width = $watermarkImgInfo[0];
+ $watermark_height = $watermarkImgInfo[1];
+
+ $ermsg = '';
+ switch ($watermarkImgInfo['mime']) {
+ case 'image/gif':
+ if (@imagetypes() & IMG_GIF) {
+ $oWatermarkImg = @imagecreatefromgif($watermark);
+ } else {
+ $ermsg = 'GIF images are not supported';
+ }
+ break;
+ case 'image/jpeg':
+ if (@imagetypes() & IMG_JPG) {
+ $oWatermarkImg = @imagecreatefromjpeg($watermark) ;
+ } else {
+ $ermsg = 'JPEG images are not supported';
+ }
+ break;
+ case 'image/png':
+ if (@imagetypes() & IMG_PNG) {
+ $oWatermarkImg = @imagecreatefrompng($watermark) ;
+ } else {
+ $ermsg = 'PNG images are not supported';
+ }
+ break;
+ case 'image/wbmp':
+ if (@imagetypes() & IMG_WBMP) {
+ $oWatermarkImg = @imagecreatefromwbmp($watermark);
+ } else {
+ $ermsg = 'WBMP images are not supported';
+ }
+ break;
+ default:
+ $oWatermarkImg = false;
+ $ermsg = $watermarkImgInfo['mime'].' images are not supported';
+ break;
+ }
+
+ if (! $ermsg) {
+ switch ($srcImgInfo['mime']) {
+ case 'image/gif':
+ if (@imagetypes() & IMG_GIF) {
+ $oSrcImg = @imagecreatefromgif($src);
+ } else {
+ $ermsg = 'GIF images are not supported';
+ }
+ break;
+ case 'image/jpeg':
+ if (@imagetypes() & IMG_JPG) {
+ $oSrcImg = @imagecreatefromjpeg($src) ;
+ } else {
+ $ermsg = 'JPEG images are not supported';
+ }
+ break;
+ case 'image/png':
+ if (@imagetypes() & IMG_PNG) {
+ $oSrcImg = @imagecreatefrompng($src) ;
+ } else {
+ $ermsg = 'PNG images are not supported';
+ }
+ break;
+ case 'image/wbmp':
+ if (@imagetypes() & IMG_WBMP) {
+ $oSrcImg = @imagecreatefromwbmp($src);
+ } else {
+ $ermsg = 'WBMP images are not supported';
+ }
+ break;
+ default:
+ $oSrcImg = false;
+ $ermsg = $srcImgInfo['mime'].' images are not supported';
+ break;
+ }
+ }
+
+ if ($ermsg || false === $oSrcImg || false === $oWatermarkImg) {
+ return false;
+ }
+
+ if ($srcImgInfo['mime'] === 'image/png') {
+ if (function_exists('imagecolorallocatealpha')) {
+ $bg = imagecolorallocatealpha($oSrcImg, 255, 255, 255, 127);
+ imagefill($oSrcImg, 0, 0 , $bg);
+ }
+ }
+
+ if ($watermarkImgInfo['mime'] === 'image/png') {
+ imagecopy($oSrcImg, $oWatermarkImg, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);
+ } else {
+ imagecopymerge($oSrcImg, $oWatermarkImg, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $transparency);
+ }
+
+ switch ($srcImgInfo['mime']) {
+ case 'image/gif':
+ imagegif($oSrcImg, $src);
+ break;
+ case 'image/jpeg':
+ imagejpeg($oSrcImg, $src, $quality);
+ break;
+ case 'image/png':
+ if (function_exists('imagesavealpha') && function_exists('imagealphablending')) {
+ imagealphablending($oSrcImg, false);
+ imagesavealpha($oSrcImg, true);
+ }
+ imagepng($oSrcImg, $src);
+ break;
+ case 'image/wbmp':
+ imagewbmp($oSrcImg, $src);
+ break;
+ }
+
+ imageDestroy($oSrcImg);
+ imageDestroy($oWatermarkImg);
+
+ return true;
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/RemoteimageComponent.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/RemoteimageComponent.php
new file mode 100644
index 00000000..7af10e14
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/RemoteimageComponent.php
@@ -0,0 +1,80 @@
+container->registerServiceProvider(new RemoteimageProvider);
+
+ // Load language
+ $lang = $this->container->get('language');
+
+ LanguageHelper::loadAll($lang->getTag(), $this->option);
+
+ // Load asset
+ $asset = $this->container->get('helper.asset');
+
+ $asset->windwalker();
+
+ // Register tasks
+ TaskMapper::register($this);
+
+ include_once JPATH_ADMINISTRATOR . '/includes/toolbar.php';
+
+ parent::prepare();
+ }
+
+ /**
+ * Post execute hook.
+ *
+ * @param mixed $result The return value of this component.
+ *
+ * @return mixed The return value of this component.
+ */
+ protected function postExecute($result)
+ {
+ // Debug profiler
+ if (JDEBUG)
+ {
+ $result .= " " . ProfilerHelper::render('Windwalker', true);
+ }
+
+ return parent::postExecute($result);
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/TaskMapper.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/TaskMapper.php
new file mode 100644
index 00000000..c72ef41f
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/TaskMapper.php
@@ -0,0 +1,31 @@
+registerTask('manager.connect', '\\Remoteimage\\Controller\\ManagerController');
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/index.html b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Component/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Config/Config.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Config/Config.php
new file mode 100644
index 00000000..503b8ec9
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Config/Config.php
@@ -0,0 +1,41 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Controller/ManagerController.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Controller/ManagerController.php
new file mode 100644
index 00000000..7012fc4a
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Controller/ManagerController.php
@@ -0,0 +1,161 @@
+get('Safemode', true);
+ $host = $params->get('Ftp_Host', '127.0.0.1');
+ $port = $params->get('Ftp_Port', 21);
+ $user = $params->get('Ftp_User');
+ $pass = $params->get('Ftp_Password');
+ $active = $params->get('Ftp_Active', 'passive');
+ $url = $params->get('Ftp_Url');
+ $root = $params->get('Ftp_Root', '/');
+ $local_root = $params->get('Local_Root', 'images');
+ //Patch
+ $image_resize_enabled = $params->get('Image_Resize_Enabled', true);
+ $image_max_width = $params->get('Image_Max_Width', 1024);
+ $image_max_height = $params->get('Image_Max_Height', 1024);
+ $image_jpeg_quality = $params->get('Image_JPEG_Quality', 95);
+ // End patch
+
+ $roots = array();
+
+ if ($params->get('Connection_Local', 1))
+ {
+ $roots[] = array(
+ 'driver' => 'LocalFileSystem',
+ //'alias' => $local_root,
+ 'path' => JPATH_ROOT . '/' . trim($local_root, '/'),
+ 'URL' => \JURI::root() . trim($local_root, '/'),
+ 'accessControl' => array(__CLASS__, 'access'),
+ 'uploadDeny' => array('text/x-php'),
+ 'icon' => \JURI::root() . 'administrator/components/com_remoteimage/asset/js/elfinder/img/volume_icon_local.png',
+ 'tmbPath' => JPATH_ROOT . '/cache/elfinderThumbs',
+ 'tmbURL' => \JURI::root() . '/cache/elfinderThumbs',
+ 'tmbPathMode' => 0755,
+ 'tmp' => JPATH_ROOT . '/cache/elfinderTemps',
+ );
+ }
+
+ if ($params->get('Connection_Ftp', 0))
+ {
+ $roots[] = array(
+ 'driver' => 'FTP',
+ 'alias' => $host,
+ 'host' => $host,
+ 'user' => $user,
+ 'pass' => $pass,
+ 'port' => $port,
+ 'mode' => $active,
+ 'path' => $root,
+ 'timeout' => 10,
+ 'owner' => true,
+ 'tmbPath' => JPATH_ROOT . '/cache/elfinderThumbs',
+ 'tmbURL' => \JURI::root() . '/cache/elfinderThumbs',
+ 'tmp' => JPATH_ROOT . '/cache/elfinderTemps',
+ 'tmbPathMode' => 0755,
+ 'dirMode' => 0755,
+ 'fileMode' => 0644,
+ 'URL' => $url,
+ 'checkSubfolders' => false,
+ 'uploadDeny' => array('text/x-php'),
+ 'icon' => \JURI::root() . 'administrator/components/com_remoteimage/asset/js/elfinder/img/volume_icon_ftp.png'
+ );
+ }
+
+ // Safe Mode
+ if ($safemode)
+ {
+ foreach ($roots as &$root):
+ $root['disabled'] = array('archive', 'extract', 'rename', 'mkfile');
+ endforeach;
+ }
+//Patch
+ $lResizePluginOption = array();
+
+ $lResizePluginOption['enable'] = $image_resize_enabled;
+
+ if ($image_max_width > 0) {
+ $lResizePluginOption['maxWidth'] = $image_max_width;
+ }
+
+ if ($image_max_height > 0) {
+ $lResizePluginOption['maxHeight'] = $image_max_height;
+ }
+
+ if ($image_jpeg_quality > 0) {
+ $lResizePluginOption['quality'] = $image_jpeg_quality;
+ }
+
+
+ $opts = array(
+ 'plugin' => array(
+ 'AutoResize' => $lResizePluginOption
+ ),
+ 'bind' => array(
+ 'upload.presave' => array(
+ 'Plugin.AutoResize.onUpLoadPreSave'
+ )
+ ),
+ // 'debug' => true,
+ 'roots' => $roots
+ );
+
+ // Run elFinder
+ $connector = new \elFinderConnector(new \elFinder($opts));
+ $connector->run();
+
+ exit();
+ }
+// End patch
+ /**
+ * Simple function to demonstrate how to control file access using "accessControl" callback.
+ * This method will disable accessing files/folders starting from '.' (dot)
+ *
+ * @param string $attr attribute name (read|write|locked|hidden)
+ * @param string $path file path relative to volume root directory started with directory separator
+ * @param array $data The data.
+ * @param string $volume Volume.
+ *
+ * @return bool|null
+ */
+ public static function access($attr, $path, $data, $volume)
+ {
+ return strpos(basename($path), '.') === 0 // if file/folder begins with '.' (dot)
+ ? !($attr == 'read' || $attr == 'write') // set read+write to false, other (locked+hidden) set to true
+ : null; // else elFinder decide it itself
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Lite/LiteListener.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Lite/LiteListener.php
new file mode 100644
index 00000000..53d2def4
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Lite/LiteListener.php
@@ -0,0 +1,370 @@
+text is also available.
+ * @param object $params The content params.
+ * @param int $page The 'page' number.
+ *
+ * @return void
+ */
+ public function onContentPrepare($context, $article, $params, $page = 0)
+ {
+ $app = JFactory::getApplication();
+
+ // Do some stuff
+ }
+
+ /**
+ * Remoteimage after display title method
+ * Method is called by the view and the results are imploded and displayed in a placeholder
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article The content object. Note $article->text is also available.
+ * @param object $params The content params.
+ * @param int $page The 'page' number.
+ *
+ * @return string
+ */
+ public function onContentAfterTitle($context, $article, $params, $page = 0)
+ {
+ $app = JFactory::getApplication();
+ $result = null;
+
+ // Do some stuff
+
+ return $result;
+ }
+
+ /**
+ * Remoteimage before display content method
+ * Method is called by the view and the results are imploded and displayed in a placeholder
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article The content object. Note $article->text is also available.
+ * @param object $params The content params.
+ * @param int $page The 'page' number.
+ *
+ * @return string
+ */
+ public function onContentBeforeDisplay($context, $article, $params, $page = 0)
+ {
+ $app = JFactory::getApplication();
+ $result = null;
+
+ // Do some stuff
+
+ return $result;
+ }
+
+ /**
+ * Remoteimage after display content method
+ * Method is called by the view and the results are imploded and displayed in a placeholder
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article The content object. Note $article->text is also available.
+ * @param object $params The content params.
+ * @param int $page The 'page' number.
+ *
+ * @return string
+ */
+ public function onContentAfterDisplay($context, $article, $params, $page = 0)
+ {
+ $app = JFactory::getApplication();
+ $result = null;
+
+ // Do some stuff
+
+ return $result;
+ }
+
+ /**
+ * Remoteimage before save content method
+ * Method is called right before content is saved into the database.
+ * Article object is passed by reference, so any changes will be saved!
+ * NOTE: Returning false will abort the save with an error.
+ *You can set the error by calling $article->setError($message)
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article A JTableContent object.
+ * @param bool $isNew If the content is just about to be created.
+ *
+ * @return bool If false, abort the save.
+ */
+ public function onContentBeforeSave($context, $article, $isNew)
+ {
+ $app = JFactory::getApplication();
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Remoteimage after save content method
+ * Article is passed by reference, but after the save, so no changes will be saved.
+ * Method is called right after the content is saved
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article A JTableContent object.
+ * @param boolean $isNew If the content is just about to be created.
+ *
+ * @return boolean
+ */
+ public function onContentAfterSave($context, $article, $isNew)
+ {
+ $app = JFactory::getApplication();
+
+ // Do some stuff
+
+ return true;
+ }
+
+ /**
+ * Remoteimage before delete method.
+ *
+ * @param string $context The context for the content passed to the plugin.
+ * @param object $data The data relating to the content that is to be deleted.
+ *
+ * @return boolean False to abort.
+ */
+ public function onContentBeforeDelete($context, $data)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Remoteimage after delete method.
+ *
+ * @param string $context The context for the content passed to the plugin.
+ * @param object $data The data relating to the content that is to be deleted.
+ *
+ * @return boolean
+ */
+ public function onContentAfterDelete($context, $data)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Remoteimage on change state method.
+ *
+ * @param string $context The context for the content passed to the plugin.
+ * @param array $pks A list of primary key ids of the content that has changed state.
+ * @param int $value The value of the state that the content has been changed to.
+ *
+ * @return boolean
+ */
+ public function onContentChangeState($context, $pks, $value)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+
+
+ // Form Events
+ // ====================================================================================
+
+ /**
+ * Pre process form hook.
+ *
+ * @param JForm $form The form to be altered.
+ * @param array $data The associated data for the form.
+ *
+ * @return boolean
+ */
+ public function onContentPrepareForm($form, $data)
+ {
+ $app = JFactory::getApplication();
+ $result = null;
+
+ // Do some stuff
+
+ return $result;
+ }
+
+ // User Events
+ // ====================================================================================
+
+ /**
+ * Utility method to act on a user after it has been saved.
+ *
+ * @param array $user Holds the new user data.
+ * @param boolean $isNew True if a new user is stored.
+ * @param boolean $success True if user was succesfully stored in the database.
+ * @param string $msg Message.
+ *
+ * @return boolean
+ */
+ public function onUserBeforeSave($user, $isNew, $success, $msg)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Utility method to act on a user after it has been saved.
+ *
+ * @param array $user Holds the new user data.
+ * @param boolean $isNew True if a new user is stored.
+ * @param boolean $success True if user was succesfully stored in the database.
+ * @param string $msg Message.
+ *
+ * @return boolean
+ */
+ public function onUserAfterSave($user, $isNew, $success, $msg)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * This method should handle any login logic and report back to the subject
+ *
+ * @param array $user Holds the user data
+ * @param array $options Array holding options (remember, autoregister, group)
+ *
+ * @return boolean True on success
+ */
+ public function onUserLogin($user, $options = array())
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * This method should handle any logout logic and report back to the subject
+ *
+ * @param array $user Holds the user data.
+ * @param array $options Array holding options (client, ...).
+ *
+ * @return object True on success
+ */
+ public function onUserLogout($user, $options = array())
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Utility method to act on a user before it has been saved.
+ *
+ * @param array $user Holds the new user data.
+ * @param boolean $isnew True if a new user is stored.
+ * @param boolean $success True if user was succesfully stored in the database.
+ * @param string $msg Message.
+ *
+ * @return boolean
+ */
+ public function onUserBeforeDelete($user, $isnew, $success, $msg)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Remove all sessions for the user name
+ *
+ * @param array $user Holds the user data
+ * @param boolean $success True if user was succesfully stored in the database
+ * @param string $msg Message
+ *
+ * @return boolean
+ */
+ public function onUserAfterDelete($user, $success, $msg)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Prepare content data.
+ *
+ * @param string $context The context for the data
+ * @param int $data The user id
+ *
+ * @return boolean
+ */
+ public function onContentPrepareData($context, $data)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * resultBool
+ *
+ * @param array $result
+ *
+ * @return bool
+ */
+ public function resultBool($result = array())
+ {
+ if (in_array(false, $result))
+ {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Lite/index.html b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Lite/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Lite/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Pro/ProListener.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Pro/ProListener.php
new file mode 100644
index 00000000..e966f74c
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Pro/ProListener.php
@@ -0,0 +1,407 @@
+text is also available.
+ * @param object $params The content params.
+ * @param int $page The 'page' number.
+ *
+ * @return void
+ */
+ public function onContentPrepare($context, $article, $params, $page = 0)
+ {
+ $app = JFactory::getApplication();
+
+ // Do some stuff
+ }
+
+ /**
+ * Remoteimage after display title method
+ * Method is called by the view and the results are imploded and displayed in a placeholder
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article The content object. Note $article->text is also available.
+ * @param object $params The content params.
+ * @param int $page The 'page' number.
+ *
+ * @return string
+ */
+ public function onContentAfterTitle($context, $article, $params, $page = 0)
+ {
+ $app = JFactory::getApplication();
+ $result = null;
+
+ // Do some stuff
+
+ return $result;
+ }
+
+ /**
+ * Remoteimage before display content method
+ * Method is called by the view and the results are imploded and displayed in a placeholder
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article The content object. Note $article->text is also available.
+ * @param object $params The content params.
+ * @param int $page The 'page' number.
+ *
+ * @return string
+ */
+ public function onContentBeforeDisplay($context, $article, $params, $page = 0)
+ {
+ $app = JFactory::getApplication();
+ $result = null;
+
+ // Do some stuff
+
+ return $result;
+ }
+
+ /**
+ * Remoteimage after display content method
+ * Method is called by the view and the results are imploded and displayed in a placeholder
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article The content object. Note $article->text is also available.
+ * @param object $params The content params.
+ * @param int $page The 'page' number.
+ *
+ * @return string
+ */
+ public function onContentAfterDisplay($context, $article, $params, $page = 0)
+ {
+ $app = JFactory::getApplication();
+ $result = null;
+
+ // Do some stuff
+
+ return $result;
+ }
+
+ /**
+ * Remoteimage before save content method
+ * Method is called right before content is saved into the database.
+ * Article object is passed by reference, so any changes will be saved!
+ * NOTE: Returning false will abort the save with an error.
+ *You can set the error by calling $article->setError($message)
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article A JTableContent object.
+ * @param bool $isNew If the content is just about to be created.
+ *
+ * @return bool If false, abort the save.
+ */
+ public function onContentBeforeSave($context, $article, $isNew)
+ {
+ $app = JFactory::getApplication();
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Remoteimage after save content method
+ * Article is passed by reference, but after the save, so no changes will be saved.
+ * Method is called right after the content is saved
+ *
+ * @param string $context The context of the content being passed to the plugin.
+ * @param object $article A JTableContent object.
+ * @param boolean $isNew If the content is just about to be created.
+ *
+ * @return boolean
+ */
+ public function onContentAfterSave($context, $article, $isNew)
+ {
+ $app = JFactory::getApplication();
+
+ // Do some stuff
+
+ return true;
+ }
+
+ /**
+ * Remoteimage before delete method.
+ *
+ * @param string $context The context for the content passed to the plugin.
+ * @param object $data The data relating to the content that is to be deleted.
+ *
+ * @return boolean False to abort.
+ */
+ public function onContentBeforeDelete($context, $data)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Remoteimage after delete method.
+ *
+ * @param string $context The context for the content passed to the plugin.
+ * @param object $data The data relating to the content that is to be deleted.
+ *
+ * @return boolean
+ */
+ public function onContentAfterDelete($context, $data)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Remoteimage on change state method.
+ *
+ * @param string $context The context for the content passed to the plugin.
+ * @param array $pks A list of primary key ids of the content that has changed state.
+ * @param int $value The value of the state that the content has been changed to.
+ *
+ * @return boolean
+ */
+ public function onContentChangeState($context, $pks, $value)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+
+
+ // Form Events
+ // ====================================================================================
+
+ /**
+ * Pre process form hook.
+ *
+ * @param \JForm $form The form to be altered.
+ * @param array $data The associated data for the form.
+ *
+ * @return boolean
+ */
+ public function onContentPrepareForm($form, $data)
+ {
+ $app = JFactory::getApplication();
+ $result = null;
+
+ // Do some stuff
+
+ return $result;
+ }
+
+ // User Events
+ // ====================================================================================
+
+ /**
+ * Utility method to act on a user after it has been saved.
+ *
+ * @param array $user Holds the new user data.
+ * @param boolean $isNew True if a new user is stored.
+ * @param boolean $success True if user was succesfully stored in the database.
+ * @param string $msg Message.
+ *
+ * @return boolean
+ */
+ public function onUserBeforeSave($user, $isNew, $success, $msg)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Utility method to act on a user after it has been saved.
+ *
+ * @param array $user Holds the new user data.
+ * @param boolean $isNew True if a new user is stored.
+ * @param boolean $success True if user was succesfully stored in the database.
+ * @param string $msg Message.
+ *
+ * @return boolean
+ */
+ public function onUserAfterSave($user, $isNew, $success, $msg)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * This method should handle any login logic and report back to the subject
+ *
+ * @param array $user Holds the user data
+ * @param array $options Array holding options (remember, autoregister, group)
+ *
+ * @return boolean True on success
+ */
+ public function onUserLogin($user, $options = array())
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * This method should handle any logout logic and report back to the subject
+ *
+ * @param array $user Holds the user data.
+ * @param array $options Array holding options (client, ...).
+ *
+ * @return object True on success
+ */
+ public function onUserLogout($user, $options = array())
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Utility method to act on a user before it has been saved.
+ *
+ * @param array $user Holds the new user data.
+ * @param boolean $isnew True if a new user is stored.
+ * @param boolean $success True if user was succesfully stored in the database.
+ * @param string $msg Message.
+ *
+ * @return boolean
+ */
+ public function onUserBeforeDelete($user, $isnew, $success, $msg)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Remove all sessions for the user name
+ *
+ * @param array $user Holds the user data
+ * @param boolean $success True if user was succesfully stored in the database
+ * @param string $msg Message
+ *
+ * @return boolean
+ */
+ public function onUserAfterDelete($user, $success, $msg)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * Prepare content data.
+ *
+ * @param string $context The context for the data
+ * @param int $data The user id
+ *
+ * @return boolean
+ */
+ public function onContentPrepareData($context, $data)
+ {
+ $result = array();
+
+ // Do some stuff
+
+ return $this->resultBool($result);
+ }
+
+ /**
+ * resultBool
+ *
+ * @param array $result
+ *
+ * @return bool
+ */
+ public function resultBool($result = array())
+ {
+ if (in_array(false, $result))
+ {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Pro/index.html b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Pro/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/Pro/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/index.html b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Listener/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Provider/RemoteimageProvider.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Provider/RemoteimageProvider.php
new file mode 100644
index 00000000..8ca40ab2
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Provider/RemoteimageProvider.php
@@ -0,0 +1,34 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Router/Route.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Router/Route.php
new file mode 100644
index 00000000..791958b1
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/Router/Route.php
@@ -0,0 +1,44 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/View/ManagerView.php b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/View/ManagerView.php
new file mode 100644
index 00000000..ddabe3d9
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/View/ManagerView.php
@@ -0,0 +1,155 @@
+engine = new PhpEngine;
+
+ parent::__construct($model, $container, $config, $paths);
+ }
+
+ /**
+ * Prepare data hook.
+ *
+ * @return void
+ */
+ protected function prepareData()
+ {
+ $input = $this->container->get('input');
+ $data = $this->getData();
+
+ $data->params = $params = \Windwalker\System\ExtensionHelper::getParams('com_remoteimage');
+
+ $lang = $this->container->get('language');
+ $data->langCode = $lang->getTag();
+ $data->langCode = str_replace('-', '_', $data->langCode);
+
+ $this->prepareScript();
+
+ if ('component' == $input->get('tmpl'))
+ {
+ $params->set('isModal', true);
+ $data->modal = true;
+ }
+ else
+ {
+ $params->set('isModal', false);
+ $data->modal = false;
+ }
+
+ $params->set('tabs', $data->modal);
+ $params->set('height', $data->modal ? $input->get('height', 380) : 520);
+ $params->set('fieldId', $input->get('fieldid'));
+ $params->set('insertId', $input->get('insert_id'));
+
+ $data->uploadMax = ini_get('upload_max_filesize');
+ $data->uploadNum = ini_get('max_file_uploads');
+
+ $this->setTitle(\JText::_('COM_REMOTEIMAGE_TITLE_MANAGER'));
+ \JToolbarHelper::preferences('com_remoteimage');
+ }
+
+ /**
+ * Display elFinder script.
+ *
+ * @return void
+ */
+ protected function prepareScript()
+ {
+ $lang_code = $this->data->langCode;
+
+ // Include elFinder and JS
+ // ================================================================================
+
+ $asset = $this->container->get('helper.asset');
+
+ // JQuery
+ $asset->mootools();
+ $asset->jquery();
+ $asset->bootstrap();
+
+ // ElFinder includes
+ $asset->addCss('js/jquery-ui/css/smoothness/jquery-ui-1.8.24.custom.css');
+ $asset->addCss('js/elfinder/css/elfinder.min.css');
+ $asset->addCss('js/elfinder/css/theme.css');
+ $asset->addCss('remoteimage.css');
+
+ $asset->addJs('js/jquery/jquery-ui.min.js');
+ $asset->addJs('js/elfinder/js/elfinder.full.js');
+
+ $iso639_1_lang_code = substr($lang_code, 0, 2);
+ if (is_file(REMOTEIMAGE_ADMIN . '/asset/js/elfinder/js/i18n/elfinder.' . $iso639_1_lang_code . '.js'))
+ {
+ $asset->addJs("js/elfinder/js/i18n/elfinder.$iso639_1_lang_code.js");
+ }
+ }
+}
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/index.html b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/Remoteimage/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/index.html b/packages/remoteimage/administrator/components/com_remoteimage/src/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/src/init.php b/packages/remoteimage/administrator/components/com_remoteimage/src/init.php
new file mode 100644
index 00000000..ca50e2e7
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/src/init.php
@@ -0,0 +1,17 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/view/manager/html.php b/packages/remoteimage/administrator/components/com_remoteimage/view/manager/html.php
new file mode 100644
index 00000000..1b9330f2
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/view/manager/html.php
@@ -0,0 +1,19 @@
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/view/manager/tmpl/default.php b/packages/remoteimage/administrator/components/com_remoteimage/view/manager/tmpl/default.php
new file mode 100644
index 00000000..4f132d1a
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/view/manager/tmpl/default.php
@@ -0,0 +1,244 @@
+data;
+$date = JFactory::getDate('now', JFactory::getConfig()->get('offset'));
+$doc = JFactory::getDocument();
+$uri = \JUri::getInstance();
+$user = JFactory::getUser();
+$app = JFactory::getApplication();
+
+
+// PARAMS
+/**
+ * @var $lang string
+ * @var $params Joomla\Registry\Registry
+ */
+$lang = $data->langCode;
+$lang = substr($data->langCode, 0, 2);
+$params = $data->params;
+$safemode = $params->get('Safemode', true);
+$onlyimage = $params->get('Onlyimage', false);
+$tabs = $params->get('tabs', false);
+$height = $params->get('height', 350);
+
+// System Info
+$sysinfo = JText::_('COM_REMOTEIMAGE_UPLOAD_MAX') . ' ' . $data->uploadMax;
+$sysinfo .= ' | ' . JText::_('COM_REMOTEIMAGE_UPLOAD_NUM') . ' ' . $data->uploadNum;
+
+
+// Is FormField
+$fieldid = $params->get('fieldId');
+?>
+
+
+
+
+
+
+ 'panel-elfinder')) : ''; ?>
+
+
+
+
+
+
+ modal): ?>
+
+
+
+
+
+
+
+
+
+
+ modal): ?>
+
+
+
+
diff --git a/packages/remoteimage/administrator/components/com_remoteimage/view/manager/tmpl/index.html b/packages/remoteimage/administrator/components/com_remoteimage/view/manager/tmpl/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/administrator/components/com_remoteimage/view/manager/tmpl/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/components/com_remoteimage/asset/css/index.html b/packages/remoteimage/components/com_remoteimage/asset/css/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/asset/css/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/components/com_remoteimage/asset/css/main.css b/packages/remoteimage/components/com_remoteimage/asset/css/main.css
new file mode 100644
index 00000000..7ae77ea5
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/asset/css/main.css
@@ -0,0 +1,33 @@
+/*!
+ * com_remoteimage
+ *
+ * Copyright 2014 SMS Taiwan
+ * License GNU General Public License version 2 or later; see LICENSE.txt.
+ */
+
+
+/* GLOBAL */
+
+
+/* BODY */
+
+
+/* TYPO */
+
+
+/* LAYOUT */
+
+
+/* CONTENT */
+
+
+/* FILTER */
+
+
+/* TABLE */
+
+
+/* FORM */
+
+
+/* FOOTER */
diff --git a/packages/remoteimage/components/com_remoteimage/asset/index.html b/packages/remoteimage/components/com_remoteimage/asset/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/asset/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/components/com_remoteimage/asset/js/index.html b/packages/remoteimage/components/com_remoteimage/asset/js/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/asset/js/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/components/com_remoteimage/asset/js/main.js b/packages/remoteimage/components/com_remoteimage/asset/js/main.js
new file mode 100644
index 00000000..8d43866b
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/asset/js/main.js
@@ -0,0 +1,8 @@
+/**
+* @package Joomla.Site
+* @subpackage com_remoteimage
+* @copyright Copyright (C) 2014 Asikart. All rights reserved.
+* @license GNU General Public License version 2 or later; see LICENSE.txt
+*/
+
+var Remoteimage = {};
\ No newline at end of file
diff --git a/packages/remoteimage/components/com_remoteimage/component.php b/packages/remoteimage/components/com_remoteimage/component.php
new file mode 100644
index 00000000..dc6626dd
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/component.php
@@ -0,0 +1,37 @@
+
diff --git a/packages/remoteimage/components/com_remoteimage/index.html b/packages/remoteimage/components/com_remoteimage/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/components/com_remoteimage/remoteimage.php b/packages/remoteimage/components/com_remoteimage/remoteimage.php
new file mode 100644
index 00000000..f92c219b
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/remoteimage.php
@@ -0,0 +1,14 @@
+execute();
diff --git a/packages/remoteimage/components/com_remoteimage/router.php b/packages/remoteimage/components/com_remoteimage/router.php
new file mode 100644
index 00000000..7e074db5
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/router.php
@@ -0,0 +1,114 @@
+build($query['view'], $query);
+
+ unset($query['view']);
+ }
+
+ return $segments;
+ }
+}
+
+if (!function_exists('RemoteimageParseRoute'))
+{
+ /**
+ * RemoteimageParseRoute
+ *
+ * @param array $segments
+ *
+ * @return array
+ */
+ function RemoteimageParseRoute($segments)
+ {
+ $router = CmsRouter::getInstance('com_remoteimage');
+
+ $segments = implode('/', $segments);
+
+ // OK, let's fetch view name.
+ $view = $router->getView(str_replace(':', '-', $segments));
+
+ if ($view)
+ {
+ return array('view' => $view);
+ }
+
+ return array();
+ }
+}
+
+if (class_exists('JComponentRouterBase'))
+{
+ class RemoteimageRouter extends JComponentRouterBase
+ {
+ /**
+ * Build method for URLs
+ * This method is meant to transform the query parameters into a more human
+ * readable form. It is only executed when SEF mode is switched on.
+ *
+ * @param array &$query An array of URL arguments
+ *
+ * @return array The URL arguments to use to assemble the subsequent URL.
+ *
+ * @since 2.0.8
+ */
+ public function build(&$query)
+ {
+ return RemoteimageBuildRoute($query);
+ }
+
+ /**
+ * Parse method for URLs
+ * This method is meant to transform the human readable URL back into
+ * query parameters. It is only executed when SEF mode is switched on.
+ *
+ * @param array &$segments The segments of the URL to parse.
+ *
+ * @return array The URL attributes to be used by the application.
+ *
+ * @since 2.0.8
+ */
+ public function parse(&$segments)
+ {
+ return RemoteimageParseRoute($segments);
+ }
+ }
+}
diff --git a/packages/remoteimage/components/com_remoteimage/routing.json b/packages/remoteimage/components/com_remoteimage/routing.json
new file mode 100644
index 00000000..52a7e783
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/routing.json
@@ -0,0 +1,11 @@
+{
+ "managers": {
+ "pattern": "managers/:id",
+ "view" : "managers"
+ },
+
+ "manager": {
+ "pattern": "manager/:id/:alias",
+ "view" : "manager"
+ }
+}
\ No newline at end of file
diff --git a/packages/remoteimage/components/com_remoteimage/view/index.html b/packages/remoteimage/components/com_remoteimage/view/index.html
new file mode 100644
index 00000000..2efb97f3
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/view/index.html
@@ -0,0 +1 @@
+
diff --git a/packages/remoteimage/components/com_remoteimage/view/manager/html.php b/packages/remoteimage/components/com_remoteimage/view/manager/html.php
new file mode 100644
index 00000000..36d45dd2
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/view/manager/html.php
@@ -0,0 +1,61 @@
+container->get('app');
+ $user = $this->container->get('user');
+
+ if ($app->isSite() && !$user->authorise('frontend.access', 'com_remoteimage'))
+ {
+ throw new \Exception(JText::_('JGLOBAL_RESOURCE_NOT_FOUND'), 404);
+ }
+
+ parent::prepareRender();
+ }
+
+ /**
+ * Display elFinder script.
+ *
+ * @return void
+ */
+ protected function prepareScript()
+ {
+ // Include elFinder and JS
+ // ================================================================================
+
+ $asset = $this->container->get('helper.asset');
+
+ $paths = $asset->getPaths();
+
+ // (3) Find: components/[name]/asset/[type]/[file_name].[type]
+ $paths->insert('administrator/components/{name}/asset/{type}', 600);
+
+ // (4) Find: components/[name]/asset/[file_name].[type]
+ $paths->insert('administrator/components/{name}/asset', 500);
+
+ parent::prepareScript();
+ }
+}
diff --git a/packages/remoteimage/components/com_remoteimage/view/manager/index.html b/packages/remoteimage/components/com_remoteimage/view/manager/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/view/manager/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/components/com_remoteimage/view/manager/tmpl/default.php b/packages/remoteimage/components/com_remoteimage/view/manager/tmpl/default.php
new file mode 100644
index 00000000..38c18118
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/view/manager/tmpl/default.php
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/packages/remoteimage/components/com_remoteimage/view/manager/tmpl/index.html b/packages/remoteimage/components/com_remoteimage/view/manager/tmpl/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/components/com_remoteimage/view/manager/tmpl/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/index.html b/packages/remoteimage/plugins/editors-xtd/remoteimage/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/install.php b/packages/remoteimage/plugins/editors-xtd/remoteimage/install.php
new file mode 100644
index 00000000..90e1f35d
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/install.php
@@ -0,0 +1,68 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/en-GB.plg_editors-xtd_remoteimage.ini b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/en-GB.plg_editors-xtd_remoteimage.ini
new file mode 100644
index 00000000..b82ed179
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/en-GB.plg_editors-xtd_remoteimage.ini
@@ -0,0 +1,8 @@
+; Asikart Extension
+; Copyright (C) 2012 Asikart. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8 - No BOM
+
+PLG_EDITORS-XTD_REMOTEIMAGE="Button - RemoteImage"
+PLG_EDITORS-XTD_REMOTEIMAGE_XML_DESCRIPTION="RemoteImage insert button plugin."
+COM_PLUGINS_REMOTEIMAGE_FIELDSET_LABEL="RemoteImage"
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/en-GB.plg_editors-xtd_remoteimage.sys.ini b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/en-GB.plg_editors-xtd_remoteimage.sys.ini
new file mode 100644
index 00000000..b82ed179
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/en-GB.plg_editors-xtd_remoteimage.sys.ini
@@ -0,0 +1,8 @@
+; Asikart Extension
+; Copyright (C) 2012 Asikart. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8 - No BOM
+
+PLG_EDITORS-XTD_REMOTEIMAGE="Button - RemoteImage"
+PLG_EDITORS-XTD_REMOTEIMAGE_XML_DESCRIPTION="RemoteImage insert button plugin."
+COM_PLUGINS_REMOTEIMAGE_FIELDSET_LABEL="RemoteImage"
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/index.html b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/en-GB/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/language/index.html b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/index.html b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/zh-TW.plg_editors-xtd_remoteimage.ini b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/zh-TW.plg_editors-xtd_remoteimage.ini
new file mode 100644
index 00000000..41ec58d6
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/zh-TW.plg_editors-xtd_remoteimage.ini
@@ -0,0 +1,8 @@
+; Asikart Extension
+; Copyright (C) 2012 Asikart. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8 - No BOM
+
+PLG_EDITORS-XTD_REMOTEIMAGE="按鈕 - RemoteImage 插入按鈕"
+PLG_EDITORS-XTD_REMOTEIMAGE_XML_DESCRIPTION="RemoteImage 遠近端圖片插入按鈕"
+COM_PLUGINS_REMOTEIMAGE_FIELDSET_LABEL="RemoteImage"
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/zh-TW.plg_editors-xtd_remoteimage.sys.ini b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/zh-TW.plg_editors-xtd_remoteimage.sys.ini
new file mode 100644
index 00000000..9e5360d7
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/language/zh-TW/zh-TW.plg_editors-xtd_remoteimage.sys.ini
@@ -0,0 +1,8 @@
+; Asikart Extension
+; Copyright (C) 2012 Asikart. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8 - No BOM
+
+PLG_EDITORS-XTD_REMOTEIMAGE="按鈕 - RemoteImage 插入按鈕"
+PLG_EDITORS-XTD_REMOTEIMAGE_XML_DESCRIPTION="RemoteImage 遠近端圖片插入按鈕"
+COM_PLUGINS_REMOTEIMAGE_FIELDSET_LABEL="RemoteImage"
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/lib/index.html b/packages/remoteimage/plugins/editors-xtd/remoteimage/lib/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/lib/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/remoteimage.php b/packages/remoteimage/plugins/editors-xtd/remoteimage/remoteimage.php
new file mode 100644
index 00000000..daacb94a
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/remoteimage.php
@@ -0,0 +1,112 @@
+loadLanguage('com_remoteimage', JPATH_ADMINISTRATOR . '/components/com_remoteimage');
+ $this->app = JFactory::getApplication();
+
+ self::$self = $this;
+ }
+
+ /**
+ * Display the button
+ *
+ * @param string $name
+ * @param string $asset
+ * @param string $author
+ *
+ * @return array A two element array of (imageName, textToInsert)
+ */
+ public function onDisplay($name, $asset, $author)
+ {
+ $app = JFactory::getApplication();
+ $user = JFactory::getUser();
+
+ if ($app->isSite() && !$user->authorise('frontend.access', 'com_remoteimage'))
+ {
+ return array();
+ }
+
+ // Add Script
+ $doc = JFactory::getDocument();
+ $doc->addScript(JURI::root(true) . '/administrator/components/com_remoteimage/asset/js/remoteimage-admin.js');
+
+ // Add Button
+ $user = JFactory::getUser();
+ $extension = $app->input->get('option');
+
+ if ($asset == '')
+ {
+ $asset = $extension;
+ }
+
+ if ($user->authorise('core.edit', $asset)
+ || $user->authorise('core.create', $asset)
+ || (count($user->getAuthorisedCategories($asset, 'core.create')) > 0)
+ || ($user->authorise('core.edit.own', $asset) && $author == $user->id)
+ || (count($user->getAuthorisedCategories($extension, 'core.edit')) > 0)
+ || (count($user->getAuthorisedCategories($extension, 'core.edit.own')) > 0 && $author == $user->id))
+ {
+ $link = 'index.php?option=com_remoteimage&view=manager&tmpl=component&height=420&insert_id=' . $name;
+ JHtml::_('behavior.modal');
+ $button = new JObject;
+ $button->class = 'btn';
+ $button->modal = true;
+ $button->link = $link;
+ $button->text = JText::_('COM_REMOTEIMAGE_IMAGE_BUTTON');
+ $button->name = 'picture';
+ $button->options = "{handler: 'iframe', size: {x: 950, y: 550}}";
+
+ return $button;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * getInstance
+ *
+ * @return PlgButtonRemoteimage
+ */
+ public static function getInstance()
+ {
+ return self::$self;
+ }
+}
diff --git a/packages/remoteimage/plugins/editors-xtd/remoteimage/remoteimage.xml b/packages/remoteimage/plugins/editors-xtd/remoteimage/remoteimage.xml
new file mode 100644
index 00000000..40ab2e7e
--- /dev/null
+++ b/packages/remoteimage/plugins/editors-xtd/remoteimage/remoteimage.xml
@@ -0,0 +1,43 @@
+
+
+ plg_editors-xtd_remoteimage
+ Asika
+ 2012-11-12
+ Copyright (C) 2012 Asikart.com
+ GNU General Public License version 2 or later; see LICENSE.txt
+ asika@asikart.com
+ http://asikart.com
+ 2.0.9
+ PLG_EDITORS-XTD_REMOTEIMAGE_XML_DESCRIPTION
+
+
+
+ remoteimage.php
+ index.html
+ install.php
+ language
+ lib
+
+
+
+
+
+
diff --git a/packages/remoteimage/plugins/system/remoteimage/index.html b/packages/remoteimage/plugins/system/remoteimage/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/install.php b/packages/remoteimage/plugins/system/remoteimage/install.php
new file mode 100644
index 00000000..8066c52a
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/install.php
@@ -0,0 +1,68 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/language/en-GB/en-GB.plg_system_remoteimage.ini b/packages/remoteimage/plugins/system/remoteimage/language/en-GB/en-GB.plg_system_remoteimage.ini
new file mode 100644
index 00000000..73506646
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/language/en-GB/en-GB.plg_system_remoteimage.ini
@@ -0,0 +1,8 @@
+; Asikart Extension
+; Copyright (C) 2012 Asikart. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8 - No BOM
+
+PLG_SYSTEM_REMOTEIMAGE="System - Remoteimage Redirect"
+PLG_SYSTEM_REMOTEIMAGE_XML_DESCRIPTION="This plugin redirect com_media pages when enable replace mode."
+COM_PLUGINS_REMOTEIMAGE_FIELDSET_LABEL="Remoteimage"
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/language/en-GB/en-GB.plg_system_remoteimage.sys.ini b/packages/remoteimage/plugins/system/remoteimage/language/en-GB/en-GB.plg_system_remoteimage.sys.ini
new file mode 100644
index 00000000..73506646
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/language/en-GB/en-GB.plg_system_remoteimage.sys.ini
@@ -0,0 +1,8 @@
+; Asikart Extension
+; Copyright (C) 2012 Asikart. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8 - No BOM
+
+PLG_SYSTEM_REMOTEIMAGE="System - Remoteimage Redirect"
+PLG_SYSTEM_REMOTEIMAGE_XML_DESCRIPTION="This plugin redirect com_media pages when enable replace mode."
+COM_PLUGINS_REMOTEIMAGE_FIELDSET_LABEL="Remoteimage"
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/language/en-GB/index.html b/packages/remoteimage/plugins/system/remoteimage/language/en-GB/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/language/en-GB/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/language/index.html b/packages/remoteimage/plugins/system/remoteimage/language/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/language/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/index.html b/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/zh-TW.plg_system_remoteimage.ini b/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/zh-TW.plg_system_remoteimage.ini
new file mode 100644
index 00000000..d7ccd0fd
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/zh-TW.plg_system_remoteimage.ini
@@ -0,0 +1,8 @@
+; Asikart Extension
+; Copyright (C) 2012 Asikart. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8 - No BOM
+
+PLG_SYSTEM_REMOTEIMAGE="系統 - Remoteimage 重導向外掛"
+PLG_SYSTEM_REMOTEIMAGE_XML_DESCRIPTION="覆蓋內建媒體管理時,協助轉址用。"
+COM_PLUGINS_REMOTEIMAGE_FIELDSET_LABEL="Remoteimage"
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/zh-TW.plg_system_remoteimage.sys.ini b/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/zh-TW.plg_system_remoteimage.sys.ini
new file mode 100644
index 00000000..d7ccd0fd
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/language/zh-TW/zh-TW.plg_system_remoteimage.sys.ini
@@ -0,0 +1,8 @@
+; Asikart Extension
+; Copyright (C) 2012 Asikart. All rights reserved.
+; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php
+; Note : All ini files need to be saved as UTF-8 - No BOM
+
+PLG_SYSTEM_REMOTEIMAGE="系統 - Remoteimage 重導向外掛"
+PLG_SYSTEM_REMOTEIMAGE_XML_DESCRIPTION="覆蓋內建媒體管理時,協助轉址用。"
+COM_PLUGINS_REMOTEIMAGE_FIELDSET_LABEL="Remoteimage"
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/lib/index.html b/packages/remoteimage/plugins/system/remoteimage/lib/index.html
new file mode 100644
index 00000000..3af63015
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/lib/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/remoteimage/plugins/system/remoteimage/remoteimage.php b/packages/remoteimage/plugins/system/remoteimage/remoteimage.php
new file mode 100644
index 00000000..c023ec9b
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/remoteimage.php
@@ -0,0 +1,139 @@
+loadLanguage();
+ $this->loadLanguage('com_remoteimage', JPATH_ADMINISTRATOR . '/components/com_remoteimage');
+ $this->app = JFactory::getApplication();
+
+ self::$self = $this;
+ }
+
+ /**
+ * getInstance
+ *
+ * @return PlgSystemRemoteimage
+ */
+ public static function getInstance()
+ {
+ return self::$self;
+ }
+
+ // System Events
+ // ======================================================================================
+
+ /**
+ * onAfterRoute
+ *
+ * @throws Exception
+ * @return void
+ */
+ public function onAfterRoute()
+ {
+ $params = JComponentHelper::getParams('com_remoteimage');
+
+ $user = JFactory::getUser();
+
+ $auth = ($user->authorise('core.manage', 'com_remoteimage'));
+
+ if ($params->get('Integrate_Override_InsertImageArticle', 1)
+ || $params->get('Integrate_Override_MediaFormField', 1)
+ || $params->get('Integrate_Override_MediaManager', 1))
+ {
+ $this->redirectNativeMedia();
+ }
+ }
+
+ /**
+ * redirectNativeMedia
+ *
+ * @return void
+ *
+ * @throws Exception
+ */
+ protected function redirectNativeMedia()
+ {
+ $app = JFactory::getApplication();
+ $user = JFactory::getUser();
+
+ if ($app->isSite() && !$user->authorise('frontend.access', 'com_remoteimage'))
+ {
+ return;
+ }
+
+ $app = JFactory::getApplication();
+ $input = $app->input;
+
+ $uri = JUri::getInstance();
+ $option = $input->get('option');
+ $view = $input->get('view');
+ $tmpl = $input->get('tmpl');
+ $fieldid = $input->get('fieldid');
+ $params = JComponentHelper::getParams('com_remoteimage');
+
+ $doc = JFactory::getDocument();
+ $doc->addScript(JURI::root(true) . '/administrator/components/com_remoteimage/asset/js/remoteimage-admin.js');
+
+ // Replace Insert to Article
+ if ($option == 'com_media' && $view == 'images' && !$fieldid && $tmpl == 'component' && $params->get('Integrate_Override_InsertImageArticle', 1))
+ {
+ $uri->setVar('option', 'com_remoteimage');
+ $uri->delVar('view');
+ $uri->setVar('insert_id', $input->get('e_name'));
+
+ $app->redirect((string) $uri);
+ }
+
+ // Replace FormField
+ if ($option == 'com_media' && $view == 'images' && $fieldid && $tmpl == 'component' && $params->get('Integrate_Override_MediaFormField', 1))
+ {
+ $uri->setVar('option', 'com_remoteimage');
+ $uri->delVar('view');
+
+ $app->redirect((string) $uri);
+ }
+
+ // Replace Media Manager
+ if ($option == 'com_media' && ($view == 'image' || !$view) && $params->get('Integrate_Override_MediaManager', 1))
+ {
+ $uri->setVar('option', 'com_remoteimage');
+ $uri->delVar('view');
+
+ $app->redirect((string) $uri);
+ }
+ }
+}
diff --git a/packages/remoteimage/plugins/system/remoteimage/remoteimage.xml b/packages/remoteimage/plugins/system/remoteimage/remoteimage.xml
new file mode 100644
index 00000000..bfb3aa1b
--- /dev/null
+++ b/packages/remoteimage/plugins/system/remoteimage/remoteimage.xml
@@ -0,0 +1,48 @@
+
+
+ plg_system_remoteimage
+ Asika
+ 2012-11-12
+ Copyright (C) 2012 Asikart.com
+ GNU General Public License version 2 or later; see LICENSE.txt
+ asika@asikart.com
+ http://asikart.com
+ 2.0.9
+ PLG_SYSTEM_REMOTEIMAGE_XML_DESCRIPTION
+
+
+ install.php
+
+
+
+
+
+ remoteimage.php
+ index.html
+ install.php
+ language
+ lib
+
+
+
+
+
+
+
+
+
+
+