605 lines
21 KiB
JavaScript
605 lines
21 KiB
JavaScript
/**
|
||
* @class elFinder command "preference"
|
||
* "Preference" dialog
|
||
*
|
||
* @author Naoki Sawada
|
||
**/
|
||
elFinder.prototype.commands.preference = function() {
|
||
var self = this,
|
||
fm = this.fm,
|
||
r = 'replace',
|
||
tab = '<li class="' + fm.res('class', 'tabstab') + ' elfinder-preference-tab-{id}"><a href="#'+fm.namespace+'-preference-{id}" id="'+fm.namespace+'-preference-tab-{id}" class="ui-tabs-anchor {class}">{title}</a></li>',
|
||
base = jQuery('<div class="ui-tabs ui-widget ui-widget-content ui-corner-all elfinder-preference">'),
|
||
ul = jQuery('<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-top">'),
|
||
tabs = jQuery('<div class="elfinder-preference-tabs ui-tabs-panel ui-widget-content ui-corner-bottom"></div>'),
|
||
sep = '<div class="elfinder-preference-separator"></div>',
|
||
selfUrl = jQuery('base').length? document.location.href.replace(/#.*$/, '') : '',
|
||
selectTab = function(tab) {
|
||
jQuery('#'+fm.namespace+'-preference-tab-'+tab).trigger('mouseover').trigger('click');
|
||
openTab = tab;
|
||
},
|
||
clTabActive = fm.res('class', 'tabsactive'),
|
||
build = function() {
|
||
var cats = self.options.categories || {
|
||
'language' : ['language'],
|
||
'theme' : ['theme'],
|
||
'toolbar' : ['toolbarPref'],
|
||
'workspace' : ['iconSize','columnPref', 'selectAction', 'makefileTypes', 'useStoredEditor', 'editorMaximized', 'useFullscreen', 'showHidden'],
|
||
'dialog' : ['autoFocusDialog'],
|
||
'selectionInfo' : ['infoItems', 'hashChecker'],
|
||
'reset' : ['clearBrowserData'],
|
||
'all' : true
|
||
},
|
||
forms = self.options.prefs || ['language', 'theme', 'toolbarPref', 'iconSize', 'columnPref', 'selectAction', 'makefileTypes', 'useStoredEditor', 'editorMaximized', 'useFullscreen', 'showHidden', 'infoItems', 'hashChecker', 'autoFocusDialog', 'clearBrowserData'];
|
||
|
||
if (!fm.cookieEnabled) {
|
||
delete cats.language;
|
||
}
|
||
|
||
forms = fm.arrayFlip(forms, true);
|
||
|
||
if (fm.options.getFileCallback) {
|
||
delete forms.selectAction;
|
||
}
|
||
if (!fm.UA.Fullscreen) {
|
||
delete forms.useFullscreen;
|
||
}
|
||
|
||
forms.language && (forms.language = (function() {
|
||
var langSel = jQuery('<select></select>').on('change', function() {
|
||
var lang = jQuery(this).val();
|
||
fm.storage('lang', lang);
|
||
jQuery('#'+fm.id).elfinder('reload');
|
||
}),
|
||
optTags = [],
|
||
langs = self.options.langs || {
|
||
ar: 'العربية',
|
||
bg: 'Български',
|
||
ca: 'Català',
|
||
cs: 'Čeština',
|
||
da: 'Dansk',
|
||
de: 'Deutsch',
|
||
el: 'Ελληνικά',
|
||
en: 'English',
|
||
es: 'Español',
|
||
fa: 'فارسی',
|
||
fo: 'Føroyskt',
|
||
fr: 'Français',
|
||
fr_CA: 'Français (Canada)',
|
||
he: 'עברית',
|
||
hr: 'Hrvatski',
|
||
hu: 'Magyar',
|
||
id: 'Bahasa Indonesia',
|
||
it: 'Italiano',
|
||
ja: '日本語',
|
||
ko: '한국어',
|
||
nl: 'Nederlands',
|
||
no: 'Norsk',
|
||
//pl: 'Polski',
|
||
pt_BR: 'Português',
|
||
ro: 'Română',
|
||
ru: 'Pусский',
|
||
si: 'සිංහල',
|
||
sk: 'Slovenčina',
|
||
sl: 'Slovenščina',
|
||
sr: 'Srpski',
|
||
sv: 'Svenska',
|
||
tr: 'Türkçe',
|
||
ug_CN: 'ئۇيغۇرچە',
|
||
uk: 'Український',
|
||
vi: 'Tiếng Việt',
|
||
zh_CN: '简体中文',
|
||
zh_TW: '正體中文'
|
||
};
|
||
if (!fm.cookieEnabled) {
|
||
return jQuery();
|
||
}
|
||
jQuery.each(langs, function(lang, name) {
|
||
optTags.push('<option value="'+lang+'">'+name+'</option>');
|
||
});
|
||
return langSel.append(optTags.join('')).val(fm.lang);
|
||
})());
|
||
|
||
forms.theme && (forms.theme = (function() {
|
||
var cnt = fm.options.themes? Object.keys(fm.options.themes).length : 0;
|
||
if (cnt === 0 || (cnt === 1 && fm.options.themes.default)) {
|
||
return null;
|
||
}
|
||
var themeSel = jQuery('<select></select>').on('change', function() {
|
||
var theme = jQuery(this).val();
|
||
fm.changeTheme(theme).storage('theme', theme);
|
||
}),
|
||
optTags = [],
|
||
tpl = {
|
||
image: '<img class="elfinder-preference-theme elfinder-preference-theme-image" src="$2" />',
|
||
link: '<a href="$1" target="_blank" title="$3">$2</a>',
|
||
data: '<dt>$1</dt><dd><span class="elfinder-preference-theme elfinder-preference-theme-$0">$2</span></dd>'
|
||
},
|
||
items = ['image', 'description', 'author', 'email', 'license'],
|
||
render = function(key, data) {
|
||
},
|
||
defBtn = jQuery('<button class="ui-button ui-corner-all ui-widget elfinder-preference-theme-default"></button>').text(fm.i18n('default')).on('click', function(e) {
|
||
themeSel.val('default').trigger('change');
|
||
}),
|
||
list = jQuery('<div class="elfinder-reference-hide-taball"></div>').on('click', 'button', function() {
|
||
var val = jQuery(this).data('themeid');
|
||
themeSel.val(val).trigger('change');
|
||
});
|
||
|
||
if (!fm.options.themes.default) {
|
||
themeSel.append('<option value="default">'+fm.i18n('default')+'</option>');
|
||
}
|
||
jQuery.each(fm.options.themes, function(id, val) {
|
||
var opt = jQuery('<option class="elfinder-theme-option-'+id+'" value="'+id+'">'+fm.i18n(id)+'</option>'),
|
||
dsc = jQuery('<fieldset class="ui-widget ui-widget-content ui-corner-all elfinder-theme-list-'+id+'"><legend>'+fm.i18n(id)+'</legend><div><span class="elfinder-spinner"></span></div></fieldset>'),
|
||
tm;
|
||
themeSel.append(opt);
|
||
list.append(dsc);
|
||
tm = setTimeout(function() {
|
||
dsc.find('span.elfinder-spinner').replaceWith(fm.i18n(['errRead', id]));
|
||
}, 10000);
|
||
fm.getTheme(id).always(function() {
|
||
tm && clearTimeout(tm);
|
||
}).done(function(data) {
|
||
var link, val = jQuery(), dl = jQuery('<dl></dl>');
|
||
link = data.link? tpl.link.replace(/\$1/g, data.link).replace(/\$3/g, fm.i18n('website')) : '$2';
|
||
if (data.name) {
|
||
opt.html(fm.i18n(data.name));
|
||
}
|
||
dsc.children('legend').html(link.replace(/\$2/g, fm.i18n(data.name) || id));
|
||
jQuery.each(items, function(i, key) {
|
||
var t = tpl[key] || tpl.data,
|
||
elm;
|
||
if (data[key]) {
|
||
elm = t.replace(/\$0/g, fm.escape(key)).replace(/\$1/g, fm.i18n(key)).replace(/\$2/g, fm.i18n(data[key]));
|
||
if (key === 'image' && data.link) {
|
||
elm = jQuery(elm).on('click', function() {
|
||
themeSel.val(id).trigger('change');
|
||
}).attr('title', fm.i18n('select'));
|
||
}
|
||
dl.append(elm);
|
||
}
|
||
});
|
||
val = val.add(dl);
|
||
val = val.add(jQuery('<div class="elfinder-preference-theme-btn"></div>').append(jQuery('<button class="ui-button ui-corner-all ui-widget"></button>').data('themeid', id).html(fm.i18n('select'))));
|
||
dsc.find('span.elfinder-spinner').replaceWith(val);
|
||
}).fail(function() {
|
||
dsc.find('span.elfinder-spinner').replaceWith(fm.i18n(['errRead', id]));
|
||
});
|
||
});
|
||
return jQuery('<div></div>').append(themeSel.val(fm.theme && fm.theme.id? fm.theme.id : 'default'), defBtn, list);
|
||
})());
|
||
|
||
forms.toolbarPref && (forms.toolbarPref = (function() {
|
||
var pnls = jQuery.map(fm.options.uiOptions.toolbar, function(v) {
|
||
return jQuery.isArray(v)? v : null;
|
||
}),
|
||
tags = [],
|
||
hides = fm.storage('toolbarhides') || {};
|
||
jQuery.each(pnls, function() {
|
||
var cmd = this,
|
||
name = fm.i18n('cmd'+cmd);
|
||
if (name === 'cmd'+cmd) {
|
||
name = fm.i18n(cmd);
|
||
}
|
||
tags.push('<span class="elfinder-preference-toolbar-item"><label><input type="checkbox" value="'+cmd+'" '+(hides[cmd]? '' : 'checked')+'/>'+name+'</label></span>');
|
||
});
|
||
return jQuery(tags.join(' ')).on('change', 'input', function() {
|
||
var v = jQuery(this).val(),
|
||
o = jQuery(this).is(':checked');
|
||
if (!o && !hides[v]) {
|
||
hides[v] = true;
|
||
} else if (o && hides[v]) {
|
||
delete hides[v];
|
||
}
|
||
fm.storage('toolbarhides', hides);
|
||
fm.trigger('toolbarpref');
|
||
});
|
||
})());
|
||
|
||
forms.iconSize && (forms.iconSize = (function() {
|
||
var max = fm.options.uiOptions.cwd.iconsView.sizeMax || 3,
|
||
size = fm.storage('iconsize') || fm.options.uiOptions.cwd.iconsView.size || 0,
|
||
sld = jQuery('<div class="touch-punch"></div>').slider({
|
||
classes: {
|
||
'ui-slider-handle': 'elfinder-tabstop',
|
||
},
|
||
value: size,
|
||
max: max,
|
||
slide: function(e, ui) {
|
||
fm.getUI('cwd').trigger('iconpref', {size: ui.value});
|
||
},
|
||
change: function(e, ui) {
|
||
fm.storage('iconsize', ui.value);
|
||
}
|
||
});
|
||
fm.getUI('cwd').on('iconpref', function(e, data) {
|
||
sld.slider('option', 'value', data.size);
|
||
});
|
||
return sld;
|
||
})());
|
||
|
||
forms.columnPref && (forms.columnPref = (function() {
|
||
var cols = fm.options.uiOptions.cwd.listView.columns,
|
||
tags = [],
|
||
hides = fm.storage('columnhides') || {};
|
||
jQuery.each(cols, function() {
|
||
var key = this,
|
||
name = fm.getColumnName(key);
|
||
tags.push('<span class="elfinder-preference-column-item"><label><input type="checkbox" value="'+key+'" '+(hides[key]? '' : 'checked')+'/>'+name+'</label></span>');
|
||
});
|
||
return jQuery(tags.join(' ')).on('change', 'input', function() {
|
||
var v = jQuery(this).val(),
|
||
o = jQuery(this).is(':checked');
|
||
if (!o && !hides[v]) {
|
||
hides[v] = true;
|
||
} else if (o && hides[v]) {
|
||
delete hides[v];
|
||
}
|
||
fm.storage('columnhides', hides);
|
||
fm.trigger('columnpref', { repaint: true });
|
||
});
|
||
})());
|
||
|
||
forms.selectAction && (forms.selectAction = (function() {
|
||
var actSel = jQuery('<select></select>').on('change', function() {
|
||
var act = jQuery(this).val();
|
||
fm.storage('selectAction', act === 'default'? null : act);
|
||
}),
|
||
optTags = [],
|
||
acts = self.options.selectActions,
|
||
defAct = fm.getCommand('open').options.selectAction || 'open';
|
||
|
||
if (jQuery.inArray(defAct, acts) === -1) {
|
||
acts.unshift(defAct);
|
||
}
|
||
jQuery.each(acts, function(i, act) {
|
||
var names = jQuery.map(act.split('/'), function(cmd) {
|
||
var name = fm.i18n('cmd'+cmd);
|
||
if (name === 'cmd'+cmd) {
|
||
name = fm.i18n(cmd);
|
||
}
|
||
return name;
|
||
});
|
||
optTags.push('<option value="'+act+'">'+names.join('/')+'</option>');
|
||
});
|
||
return actSel.append(optTags.join('')).val(fm.storage('selectAction') || defAct);
|
||
})());
|
||
|
||
forms.makefileTypes && (forms.makefileTypes = (function() {
|
||
var hides = fm.getCommand('edit').getMkfileHides(),
|
||
getTag = function() {
|
||
var tags = [];
|
||
// re-assign hides
|
||
hides = fm.getCommand('edit').getMkfileHides();
|
||
jQuery.each(fm.mimesCanMakeEmpty, function(mime, type) {
|
||
var name = fm.getCommand('mkfile').getTypeName(mime, type);
|
||
tags.push('<span class="elfinder-preference-column-item" title="'+fm.escape(name)+'"><label><input type="checkbox" value="'+mime+'" '+(hides[mime]? '' : 'checked')+'/>'+type+'</label></span>');
|
||
});
|
||
return tags.join(' ');
|
||
},
|
||
elm = jQuery('<div></div>').on('change', 'input', function() {
|
||
var v = jQuery(this).val(),
|
||
o = jQuery(this).is(':checked');
|
||
if (!o && !hides[v]) {
|
||
hides[v] = true;
|
||
} else if (o && hides[v]) {
|
||
delete hides[v];
|
||
}
|
||
fm.storage('mkfileHides', hides);
|
||
fm.trigger('canMakeEmptyFile');
|
||
}).append(getTag()),
|
||
add = jQuery('<div></div>').append(
|
||
jQuery('<input type="text" placeholder="'+fm.i18n('typeOfTextfile')+'"/>').on('keydown', function(e) {
|
||
(e.keyCode === jQuery.ui.keyCode.ENTER) && jQuery(this).next().trigger('click');
|
||
}),
|
||
jQuery('<button class="ui-button"></button>').html(fm.i18n('add')).on('click', function() {
|
||
var input = jQuery(this).prev(),
|
||
val = input.val(),
|
||
uiToast = fm.getUI('toast'),
|
||
err = function() {
|
||
uiToast.appendTo(input.closest('.ui-dialog'));
|
||
fm.toast({
|
||
msg: fm.i18n('errUsupportType'),
|
||
mode: 'warning',
|
||
onHidden: function() {
|
||
uiToast.children().length === 1 && uiToast.appendTo(fm.getUI());
|
||
}
|
||
});
|
||
input.trigger('focus');
|
||
return false;
|
||
},
|
||
tmpMimes;
|
||
if (!val.match(/\//)) {
|
||
val = fm.arrayFlip(fm.mimeTypes)[val];
|
||
if (!val) {
|
||
return err();
|
||
}
|
||
input.val(val);
|
||
}
|
||
if (!fm.mimeIsText(val) || !fm.mimeTypes[val]) {
|
||
return err();
|
||
}
|
||
fm.trigger('canMakeEmptyFile', {mimes: [val], unshift: true});
|
||
tmpMimes = {};
|
||
tmpMimes[val] = fm.mimeTypes[val];
|
||
fm.storage('mkfileTextMimes', Object.assign(tmpMimes, fm.storage('mkfileTextMimes') || {}));
|
||
input.val('');
|
||
uiToast.appendTo(input.closest('.ui-dialog'));
|
||
fm.toast({
|
||
msg: fm.i18n(['complete', val + ' (' + tmpMimes[val] + ')']),
|
||
onHidden: function() {
|
||
uiToast.children().length === 1 && uiToast.appendTo(fm.getUI());
|
||
}
|
||
});
|
||
}),
|
||
jQuery('<button class="ui-button"></button>').html(fm.i18n('reset')).on('click', function() {
|
||
fm.one('canMakeEmptyFile', {done: function() {
|
||
elm.empty().append(getTag());
|
||
}});
|
||
fm.trigger('canMakeEmptyFile', {resetTexts: true});
|
||
})
|
||
),
|
||
tm;
|
||
fm.bind('canMakeEmptyFile', {done: function(e) {
|
||
if (e.data && e.data.mimes && e.data.mimes.length) {
|
||
elm.empty().append(getTag());
|
||
}
|
||
}});
|
||
return jQuery('<div></div>').append(elm, add);
|
||
})());
|
||
|
||
forms.useStoredEditor && (forms.useStoredEditor = jQuery('<input type="checkbox"/>').prop('checked', (function() {
|
||
var s = fm.storage('useStoredEditor');
|
||
return s? (s > 0) : fm.options.commandsOptions.edit.useStoredEditor;
|
||
})()).on('change', function(e) {
|
||
fm.storage('useStoredEditor', jQuery(this).is(':checked')? 1 : -1);
|
||
}));
|
||
|
||
forms.editorMaximized && (forms.editorMaximized = jQuery('<input type="checkbox"/>').prop('checked', (function() {
|
||
var s = fm.storage('editorMaximized');
|
||
return s? (s > 0) : fm.options.commandsOptions.edit.editorMaximized;
|
||
})()).on('change', function(e) {
|
||
fm.storage('editorMaximized', jQuery(this).is(':checked')? 1 : -1);
|
||
}));
|
||
|
||
forms.useFullscreen && (forms.useFullscreen = jQuery('<input type="checkbox"/>').prop('checked', (function() {
|
||
var s = fm.storage('useFullscreen');
|
||
return s? (s > 0) : fm.options.commandsOptions.fullscreen.mode === 'screen';
|
||
})()).on('change', function(e) {
|
||
fm.storage('useFullscreen', jQuery(this).is(':checked')? 1 : -1);
|
||
}));
|
||
|
||
if (forms.showHidden) {
|
||
(function() {
|
||
var setTitle = function() {
|
||
var s = fm.storage('hide'),
|
||
t = [],
|
||
v;
|
||
if (s && s.items) {
|
||
jQuery.each(s.items, function(h, n) {
|
||
t.push(fm.escape(n));
|
||
});
|
||
}
|
||
elms.prop('disabled', !t.length)[t.length? 'removeClass' : 'addClass']('ui-state-disabled');
|
||
v = t.length? t.join('\n') : '';
|
||
forms.showHidden.attr('title',v);
|
||
useTooltip && forms.showHidden.tooltip('option', 'content', v.replace(/\n/g, '<br>')).tooltip('close');
|
||
},
|
||
chk = jQuery('<input type="checkbox"/>').prop('checked', (function() {
|
||
var s = fm.storage('hide');
|
||
return s && s.show;
|
||
})()).on('change', function(e) {
|
||
var o = {};
|
||
o[jQuery(this).is(':checked')? 'show' : 'hide'] = true;
|
||
fm.exec('hide', void(0), o);
|
||
}),
|
||
btn = jQuery('<button class="ui-button ui-corner-all ui-widget"></button>').append(fm.i18n('reset')).on('click', function() {
|
||
fm.exec('hide', void(0), {reset: true});
|
||
jQuery(this).parent().find('input:first').prop('checked', false);
|
||
setTitle();
|
||
}),
|
||
elms = jQuery().add(chk).add(btn),
|
||
useTooltip;
|
||
|
||
forms.showHidden = jQuery('<div></div>').append(chk, btn);
|
||
fm.bind('hide', function(e) {
|
||
var d = e.data;
|
||
if (!d.opts || (!d.opts.show && !d.opts.hide)) {
|
||
setTitle();
|
||
}
|
||
});
|
||
if (fm.UA.Mobile && jQuery.fn.tooltip) {
|
||
useTooltip = true;
|
||
forms.showHidden.tooltip({
|
||
classes: {
|
||
'ui-tooltip': 'elfinder-ui-tooltip ui-widget-shadow'
|
||
},
|
||
tooltipClass: 'elfinder-ui-tooltip ui-widget-shadow',
|
||
track: true
|
||
}).css('user-select', 'none');
|
||
btn.css('user-select', 'none');
|
||
}
|
||
setTitle();
|
||
})();
|
||
}
|
||
|
||
forms.infoItems && (forms.infoItems = (function() {
|
||
var items = fm.getCommand('info').items,
|
||
tags = [],
|
||
hides = fm.storage('infohides') || fm.arrayFlip(fm.options.commandsOptions.info.hideItems, true);
|
||
jQuery.each(items, function() {
|
||
var key = this,
|
||
name = fm.i18n(key);
|
||
tags.push('<span class="elfinder-preference-info-item"><label><input type="checkbox" value="'+key+'" '+(hides[key]? '' : 'checked')+'/>'+name+'</label></span>');
|
||
});
|
||
return jQuery(tags.join(' ')).on('change', 'input', function() {
|
||
var v = jQuery(this).val(),
|
||
o = jQuery(this).is(':checked');
|
||
if (!o && !hides[v]) {
|
||
hides[v] = true;
|
||
} else if (o && hides[v]) {
|
||
delete hides[v];
|
||
}
|
||
fm.storage('infohides', hides);
|
||
fm.trigger('infopref', { repaint: true });
|
||
});
|
||
})());
|
||
|
||
forms.hashChecker && fm.hashCheckers.length && (forms.hashChecker = (function() {
|
||
var tags = [],
|
||
enabled = fm.arrayFlip(fm.storage('hashchekcer') || fm.options.commandsOptions.info.showHashAlgorisms, true);
|
||
jQuery.each(fm.hashCheckers, function() {
|
||
var cmd = this,
|
||
name = fm.i18n(cmd);
|
||
tags.push('<span class="elfinder-preference-hashchecker-item"><label><input type="checkbox" value="'+cmd+'" '+(enabled[cmd]? 'checked' : '')+'/>'+name+'</label></span>');
|
||
});
|
||
return jQuery(tags.join(' ')).on('change', 'input', function() {
|
||
var v = jQuery(this).val(),
|
||
o = jQuery(this).is(':checked');
|
||
if (o) {
|
||
enabled[v] = true;
|
||
} else if (enabled[v]) {
|
||
delete enabled[v];
|
||
}
|
||
fm.storage('hashchekcer', jQuery.grep(fm.hashCheckers, function(v) {
|
||
return enabled[v];
|
||
}));
|
||
});
|
||
})());
|
||
|
||
forms.autoFocusDialog && (forms.autoFocusDialog = jQuery('<input type="checkbox"/>').prop('checked', (function() {
|
||
var s = fm.storage('autoFocusDialog');
|
||
return s? (s > 0) : fm.options.uiOptions.dialog.focusOnMouseOver;
|
||
})()).on('change', function(e) {
|
||
fm.storage('autoFocusDialog', jQuery(this).is(':checked')? 1 : -1);
|
||
}));
|
||
|
||
forms.clearBrowserData && (forms.clearBrowserData = jQuery('<button></button>').text(fm.i18n('reset')).button().on('click', function(e) {
|
||
e.preventDefault();
|
||
fm.storage();
|
||
jQuery('#'+fm.id).elfinder('reload');
|
||
}));
|
||
|
||
jQuery.each(cats, function(id, prefs) {
|
||
var dls, found;
|
||
if (prefs === true) {
|
||
found = 1;
|
||
} else if (prefs) {
|
||
dls = jQuery();
|
||
jQuery.each(prefs, function(i, n) {
|
||
var f, title, chks = '', cbox;
|
||
if (f = forms[n]) {
|
||
found = 2;
|
||
title = fm.i18n(n);
|
||
cbox = jQuery(f).filter('input[type="checkbox"]');
|
||
if (!cbox.length) {
|
||
cbox = jQuery(f).find('input[type="checkbox"]');
|
||
}
|
||
if (cbox.length === 1) {
|
||
if (!cbox.attr('id')) {
|
||
cbox.attr('id', 'elfinder-preference-'+n+'-checkbox');
|
||
}
|
||
title = '<label for="'+cbox.attr('id')+'">'+title+'</label>';
|
||
} else if (cbox.length > 1) {
|
||
chks = ' elfinder-preference-checkboxes';
|
||
}
|
||
dls = dls.add(jQuery('<dt class="elfinder-preference-'+n+chks+'">'+title+'</dt>')).add(jQuery('<dd class="elfinder-preference-'+n+chks+'"></dd>').append(f));
|
||
}
|
||
});
|
||
}
|
||
if (found) {
|
||
ul.append(tab[r](/\{id\}/g, id)[r](/\{title\}/, fm.i18n(id))[r](/\{class\}/, openTab === id? 'elfinder-focus' : ''));
|
||
if (found === 2) {
|
||
tabs.append(
|
||
jQuery('<div id="'+fm.namespace+'-preference-'+id+'" class="elfinder-preference-content"></div>')
|
||
.hide()
|
||
.append(jQuery('<dl></dl>').append(dls))
|
||
);
|
||
}
|
||
}
|
||
});
|
||
|
||
ul.on('click', 'a', function(e) {
|
||
var t = jQuery(e.target),
|
||
h = t.attr('href');
|
||
e.preventDefault();
|
||
e.stopPropagation();
|
||
|
||
ul.children().removeClass(clTabActive);
|
||
t.removeClass('ui-state-hover').parent().addClass(clTabActive);
|
||
|
||
if (h.match(/all$/)) {
|
||
tabs.addClass('elfinder-preference-taball').children().show();
|
||
} else {
|
||
tabs.removeClass('elfinder-preference-taball').children().hide();
|
||
jQuery(h).show();
|
||
}
|
||
}).on('focus blur', 'a', function(e) {
|
||
jQuery(this).parent().toggleClass('ui-state-focus', e.type === 'focusin');
|
||
}).on('mouseenter mouseleave', 'li', function(e) {
|
||
jQuery(this).toggleClass('ui-state-hover', e.type === 'mouseenter');
|
||
});
|
||
|
||
tabs.find('a,input,select,button').addClass('elfinder-tabstop');
|
||
base.append(ul, tabs);
|
||
|
||
dialog = self.fmDialog(base, {
|
||
title : self.title,
|
||
width : self.options.width || 600,
|
||
height: self.options.height || 400,
|
||
maxWidth: 'window',
|
||
maxHeight: 'window',
|
||
autoOpen : false,
|
||
destroyOnClose : false,
|
||
allowMinimize : false,
|
||
open : function() {
|
||
openTab && selectTab(openTab);
|
||
openTab = null;
|
||
},
|
||
resize : function() {
|
||
tabs.height(dialog.height() - ul.outerHeight(true) - (tabs.outerHeight(true) - tabs.height()) - 5);
|
||
}
|
||
})
|
||
.on('click', function(e) {
|
||
e.stopPropagation();
|
||
})
|
||
.css({
|
||
overflow: 'hidden'
|
||
});
|
||
|
||
dialog.closest('.ui-dialog')
|
||
.css({
|
||
overflow: 'hidden'
|
||
})
|
||
.addClass('elfinder-bg-translucent');
|
||
|
||
openTab = 'all';
|
||
},
|
||
dialog, openTab;
|
||
|
||
this.shortcuts = [{
|
||
pattern : 'ctrl+comma',
|
||
description : this.title
|
||
}];
|
||
|
||
this.alwaysEnabled = false;
|
||
|
||
this.getstate = function() {
|
||
return 0;
|
||
};
|
||
|
||
this.exec = function(sel, cOpts) {
|
||
!dialog && build();
|
||
if (cOpts) {
|
||
if (cOpts.tab) {
|
||
selectTab(cOpts.tab);
|
||
} else if (cOpts._currentType === 'cwd') {
|
||
selectTab('workspace');
|
||
}
|
||
}
|
||
dialog.elfinderdialog('open');
|
||
return jQuery.Deferred().resolve();
|
||
};
|
||
|
||
}; |