/** * Copyright (c) 2014-2015 Steffen Schorling http://github.com/smiling-Jack * Lizenz: [CC BY-NC 3.0](http://creativecommons.org/licenses/by-nc/3.0/de/) */ /* global storage */ var fmScriptEls = document.getElementsByTagName('script'); var fmThisScriptEl = fmScriptEls[fmScriptEls.length - 1]; //var fmFolder = fmThisScriptEl.src.substr(0, fmThisScriptEl.src.lastIndexOf('/') + 1); var fmFolder = 'js/fm/'; //$('head').append(''); (function ($) { "use strict"; $.fn.cursorPosition = function(position) { var input = this.get(0); if (!input) return; // No (input) element found if (position !== undefined) { if(input.createTextRange) { var range = input.createTextRange(); range.move('character', position); range.select(); } else if(input.selectionStart) { input.focus(); input.setSelectionRange(position, position); } else { input.focus(); } } else { if ('selectionStart' in input) { // Standard-compliant browsers return input.selectionStart; } else if (document.selection) { // IE input.focus(); var sel = document.selection.createRange(); var selLen = document.selection.createRange().text.length; sel.moveStart('character', -input.value.length); return sel.text.length - selLen; } } }; $.fm = function (options, callback) { var fmConn; if (typeof SGI != 'undefined') { // TO DO wrapper must be created. Direct using of socket is not convenient. fmConn = SGI.socket; } else if (options.conn) { fmConn = options.conn; } jQuery.event.props.push('dataTransfer'); var o = { defaultPath: options.defaultPath || '', lang: options.lang || 'en', // de, en , ru // File position by socket connection root: options.root || '', // zb. 'www/' path: options.path || '/', // zb. 'www/dashui/' uploadDir: options.uploadDir || '', fileFilter: options.fileFilter || null, folderFilter: options.folderFilter || false, view: options.view || 'table', // table, list mode: options.mode || 'show', // open, save, show data: '1', audio: ['mp3', 'wav', 'ogg'], img: ['gif','png', 'bmp', 'jpg', 'jpeg', 'tif', 'svg'], icons: ['zip', 'prg', 'js', 'css', 'mp3', 'wav'], userArg: options.userArg, zindex: options.zindex // save_data : options.save_data, // save_mime : options.save_mime }; var uploadArray = []; var selFile = ''; var selType = ''; var config = {}; if (o.fileFilter && !o.fileFilter.length) o.fileFilter = null; if (typeof storage != 'undefined') { try { config = storage.get('visFM'); if (config) { config = JSON.parse(config); } else { config = {}; } } catch (e) { console.log('Cannot load FM config'); config = {}; } } o.view = config.view || o.view; if (o.defaultPath == o.path) { o.path = config.path || o.path; } else { config.path = o.path; } o.filter = config.filter || ''; // Analyse path, if it is a file name if (o.path && o.path[o.path.length - 1] != '/') { var parts = o.path.split('/'); o.currentFile = parts.pop(); o.path = parts.join('/') + '/'; } if (o.path.substring(0, 'widgets/'.length) == 'widgets/' || o.path.substring(0, 'img/'.length) == 'img/') { o.path = '/vis/' + o.path; } var fmWord = { 'sort this column' : {'de': 'Spalte sortieren', 'en': 'sort this column', 'ru': 'Сортировать'}, 'File manager' : {'de': 'Datei Manager', 'en': 'File manager', 'ru': 'Проводник'}, 'Back' : {'de': 'Zurück', 'en': 'Back', 'ru': 'Назад'}, 'Refresh' : {'de': 'Aktualisieren', 'en': 'Refresh', 'ru': 'Обновить'}, 'New folder' : {'de': 'Neuer Ordner', 'en': 'New folder', 'ru': 'Новая папка'}, 'Upload' : {'de': 'Upload', 'en': 'Upload', 'ru': 'Загрузить'}, 'Download' : {'de': 'Download', 'en': 'Download', 'ru': 'Скачать'}, 'Rename' : {'de': 'Umbenennen', 'en': 'Rename', 'ru': 'Переименовать'}, 'Delete' : {'de': 'Löschen', 'en': 'Delete', 'ru': 'Удалить'}, 'List view' : {'de': 'Listen Ansicht', 'en': 'List view', 'ru': 'Список'}, 'Preview' : {'de': 'Vorschau', 'en': 'Preview', 'ru': 'Предпросмотр'}, 'Play' : {'de': 'Play', 'en': 'Play', 'ru': 'Воспроизвести'}, 'Stop' : {'de': 'Stop', 'en': 'Stop', 'ru': 'Стоп'}, 'Show all files' : {'de': 'Alle Datein anzeigen', 'en': 'Show all files', 'ru': 'Показать все'}, 'File name:' : {'de': 'Datei Name:', 'en': 'File name:', 'ru': 'Имя файла: '}, 'Path:' : {'de': 'Pfad:', 'en': 'Path:', 'ru': 'Путь к файлу: '}, 'Save' : {'de': 'Speichern', 'en': 'Save', 'ru': 'Сохранить'}, 'Open' : {'de': 'Auswählen', 'en': 'Select', 'ru': 'Выбрать'}, 'Cancel' : {'de': 'Abbrechen', 'en': 'Cancel', 'ru': 'Отмена'}, 'Upload to' : {'de': 'Upload nach', 'en': 'Upload to', 'ru': 'Загрузить в'}, 'Dropbox' : {'de': 'Dropbox', 'en': 'Dropbox', 'ru': 'Dropbox'}, 'Drop the files here' : {'de': 'Hier Datein reinziehen oder clicken', 'en': 'Drop the files or click here', 'ru': 'Перетяните файлы сюда или нажмите'}, 'Close' : {'de': 'Schliesen', 'en': 'Close', 'ru': 'Закрыть'}, 'OK' : {'de': 'OK', 'en': 'OK', 'ru': 'Ok'}, 'Cannot create folder' : {'de': 'Ordner erstellen nicht möglich', 'en': 'Failed to create folder', 'ru': 'Невозможно создать папку'}, 'New name' : {'de': 'Neuer Name', 'en': 'New name', 'ru': 'Новое имя'}, 'Cannot rename' : {'de': 'Rename nicht möglich', 'en': 'Rename failed', 'ru': 'Невозможно переименовать'}, 'Delete failed' : {'de': 'Löschen nicht möglich', 'en': 'Delete failed', 'ru': 'Невозможно удалить'}, 'no_con' : {'de': 'Keine Verbindung zu Server', 'en': 'Cannot connect to server', 'ru': 'Нет соединения с сервером'}, 'Name' : {'de': 'Name', 'en': 'Name', 'ru': 'Имя'}, 'Type' : {'de': 'Typ', 'en': 'Type', 'ru': 'Тип'}, 'Size' : {'de': 'Größe', 'en': 'Size', 'ru': 'Размер'}, 'Date' : {'de': 'Datum', 'en': 'Date', 'ru': 'Дата'}, 'Upload possible only to ' : {'de': 'Kann laden nur in ', 'en': 'Upload possible only to ', 'ru': 'Загрузка возможна только в '}, 'Change background' : {'de': 'Dialog-Hintergrund ändern', 'en': 'Change dialog background', 'ru': 'Сменить фон окна'}, 'Enter filter...' : {'de': 'Filter eingeben...', 'en': 'Enter filter...', 'ru': 'Задайте фильтр...'} }; function fmTranslate(text) { if (fmWord[text]) { if (fmWord[text][o.lang]) { return fmWord[text][o.lang]; } else if (fmWord[text].en) console.warn(text); return fmWord[text].en; } else { console.warn(text); return text; } } function load(path) { if (!path) { path = '/'; $('.fm-path').val(path); $('.fm-path').cursorPosition(1); o.path = o.root + path; } try { fmConn.readDir(path, function (err, data) { if (!err && data) { o.data = data; var p = path.replace(o.root, ''); $('.fm-path').data('old', p); $('.fm-path').val(p).unbind('change').unbind('keyup').change(function () { var timer = $(this).data('timer'); if (timer) clearTimeout(timer); $(this).data('timer', setTimeout(function () { var val = $('.fm-path').val(); if (!val) { val = '/'; $('.fm-path').val(val); $('.fm-path').cursorPosition(1); } o.path = o.root + val; if ($('.fm-path').data('old') != val) { o.cursorPosition = $('.fm-path').cursorPosition(); $('.fm-path').data('timer', null); load(val); $('.fm-path').data('old', val); } }, 500)); }).keyup(function () { $(this).trigger('change'); }); build(o); } else { o.data = []; build(o, err); $('.fm-files').html('' + err + ''); } $('.fm-path').cursorPosition(o.cursorPosition); o.cursorPosition = undefined; }); } catch (err) { alert(fmTranslate('No connection to server')); } } function read(o, files, uploadArray) { var reader = new FileReader(); reader.onload = function () { uploadArray.push({name: files[0].name, value: reader.result}); var type = files[0].name.split('.').pop().toLowerCase(); var icon = "undef"; var class_name = files[0].name.split('.')[0].replace(" ", "_"); if (o.img.indexOf(type) > -1) { $('#fm_add_dropzone').append( '
' + '
' + '
' + files[0].name + '
' + '
' + '
'); } else { if (o.icons.indexOf(type) > -1) icon = type; $('#fm_add_dropzone').append( '
' + '
' + '
' + files[0].name + '
' + '
' + '
'); } files.shift(); if (files.length > 0) { read(o, files, uploadArray); } else { $('.dialog_fm_add > *').css({cursor: "default"}); } }; reader.readAsDataURL(files[0]); } function build(o, err) { $('.fm-files').empty(); $('#fm_table_head').remove(); $("#fm_bar_play, #fm_bar_stop, #fm_bar_down, #fm_bar_del").button('disable'); if (o.data !== undefined && o.view == "table") { $('
' + ' ' + ' ' + ' ' + ' ' + '
').insertAfter('.fm-path-div'); $('#fm_table_head_name').button({icons: {primary: "ui-icon-carat-2-n-s"}}).click(function () { $('#fm_th_name').trigger('click'); }); $('#fm_table_head_type').button({icons: {primary: "ui-icon-carat-2-n-s"}}).click(function () { $('#fm_th_type').trigger('click'); }); $('#fm_table_head_size').button({icons: {primary: "ui-icon-carat-2-n-s"}}).click(function () { $('#fm_th_size_roh').trigger('click'); }); $('#fm_table_head_datum').button({icons: {primary: "ui-icon-carat-2-n-s"}}).click(function () { $('#fm_th_datum').trigger('click'); }); $('.fm-files').append( '' + ' ' + ' ' + ' ' + ' ' + '
' + ' ' + fmTranslate('Name') + '' + ' ' + fmTranslate('Type') + '' + ' Size_roh' + ' ' + fmTranslate('Size') + '' + ' ' + fmTranslate('Datum') + '' + ' ' + '
'); $.each(o.data, function () { if (this.file == '..') return; function formatBytes(bytes) { if (bytes < 1024) { return bytes + " B"; } else if (bytes < 1048576) { return(bytes / 1024).toFixed(0) + ' kb'; } else if (bytes < 1073741824) { return(bytes / 1048576).toFixed(0) + ' Mb'; } else { return(bytes / 1073741824).toFixed(0) + ' Gb'; } } var date; var time; var type; var filter; if (this.stats.nlink > 1 || this.isDir) { date = this.stats.ctime.split('T')[0]; time = this.stats.ctime.split('T')[1].split('.')[0]; type = this.file.split('.')[1] || ""; filter = "fm_folderFilter"; $('.fm_file_table').append( '' + '' + '' + this.file + '' + '' + type + '' + '' + 0 + '' + '' + '' + date + ' ' + time + '' + '' + ''); } else { var icons = ['zip', 'prg', 'js', 'png', 'svg', 'jpg', 'gif', 'bmp', 'css', 'mp3', 'wav']; var icon = 'undef'; date = this.stats.ctime.split('T')[0]; time = this.stats.ctime.split('T')[1].split('.')[0]; type = this.file.split('.').pop() || ""; filter = ''; if (icons.indexOf(type) > -1) icon = type; if (o.fileFilter && o.fileFilter.length && o.fileFilter.indexOf(type) == -1) filter = 'fm_fileFilter'; $('.fm_file_table').append( '' + '' + '' + this.file + '' + '' + type + '' + '' + this.stats.size + '' + '' + formatBytes(this.stats.size) + '' + '' + date + ' ' + time + '' + '' + ''); } }); $('#fm_th_name, #fm_th_type, #fm_th_size, #fm_th_datum') .mouseenter(function () { $(this).addClass('ui-state-focus'); }) .mouseleave(function () { $(this).removeClass('ui-state-focus'); }) .click(function () { $(this).effect('highlight'); }); // sort Table _____________________________________________________ var table = $('#fm_table'); $('#fm_th_name, #fm_th_type, #fm_th_size_roh, #fm_th_datum') .wrapInner('') .each(function () { var th = $(this), thIndex = th.index(), inverse = false; th.click(function () { table.find('td').filter(function () { return $(this).index() === thIndex; }).sortElements(function (a, b) { if (parseInt($(a).text())) { return parseInt($.text([a])) > parseInt($.text([b])) ? inverse ? -1 : 1 : inverse ? 1 : -1; } else { return $.text([a]).toLowerCase() > $.text([b]).toLowerCase() ? inverse ? -1 : 1 : inverse ? 1 : -1; } }, function () { return this.parentNode; }); inverse = !inverse; }); }); $('#fm_th_name').trigger('click'); $('#fm_th_type').trigger('click'); // sort Table---------------------------------------------------------- $(".fm_tr > *").click(function (e) { $('.fm_table_selected').addClass("ui-state-default no_background"); $('.fm_table_selected').removeClass("fm_table_selected ui-state-highlight"); if ($(e.target).hasClass('fm_tr')) { $(this).addClass("fm_table_selected ui-state-highlight"); $(this).removeClass("ui-state-default no_background"); } else { $(this).parent('.fm_tr').addClass("fm_table_selected ui-state-highlight"); $(this).parent('.fm_tr').removeClass("ui-state-default no_background"); } var type = $($('.fm_table_selected').children().toArray()[2]).text(); var name = $($('.fm_table_selected').children().toArray()[1]).text(); if (!type) { selType = "folder"; selFile = name; $('#fm_bar_down').button('disable'); $('#fm_bar_del').button('enable'); } else { selType = "file"; selFile = name; $('#fm_inp_save').val(selFile.split('.')[0]); $('#fm_bar_down').button('enable'); $('#fm_bar_del').button('enable'); } if (o.audio.indexOf(type) > -1) { $("#fm_bar_play , #fm_bar_stop").button('enable'); } else { $("#fm_bar_play, #fm_bar_stop").button('disable'); } }); $('.fm_tr_folder').dblclick(function () { o.path += $((this).children[1]).text() + "/"; load(o.path); }); if (document.getElementById('script_scrollbar')) { $('.fm-files').css({ height: "auto", overflow: "visible" }); $('#fm_scroll_pane').css({ height: "calc(100% - 187px) ", scrollTop: 0 }); $('#fm_scroll_pane').scrollTop(0); $('#fm_scroll_pane').perfectScrollbar('update'); } else { $('.fm-files').css({ height: "calc(100% - 188px) " }); } } if (o.data !== undefined && o.view == 'prev') { var path = o.root ? o.path.split(o.root)[1] : o.path; if (o.uploadDir) { if (path.substring(0, o.uploadDir.length) == o.uploadDir) { $('#fm_bar_add').button('enable'); } else { $('#fm_bar_add').button('disable').attr('title', fmTranslate('Upload possible only to ') + o.uploadDir); } } $.each(o.data, function () { if (this.file == '..') return; if (this.stats.nlink > 1 || this.isDir) { var type = "_"; $('.fm-files').append( '
' + '
' + '
' + this.file + '
' + '
' + '
'); } else { var name = this.file.split('.')[0]; var _type = (this.file.split('.')[1] || "").toLowerCase(); var icon = "undef"; var filter = ""; if (o.fileFilter && o.fileFilter.length && o.fileFilter.indexOf(_type) == -1) { filter = "fm_fileFilter"; } if (name.length > 0) { // if image if (o.img.indexOf(_type) > -1) { $('.fm-files').append( '
' + '
' + '
' + this.file + '
' + '
' + '
'); } else { if (o.icons.indexOf(_type) > -1) { icon = _type; } $('.fm-files').append( '
' + '
' + '
' + this.file + '
' + '
' + '
'); } } } }); var div = $('.fm-files'); var listitems = div.children('.fm_prev_container').get(); listitems.sort(function (a, b) { return ($(a).attr('data-sort') < $(b).attr('data-sort')) ? -1 : ($(a).attr('data-sort') > $(b).attr('data-sort')) ? 1 : 0; }); $.each(listitems, function (idx, itm) { div.append(itm); }); if (document.getElementById('script_scrollbar')) { $('.fm-files').css({ height: "auto", overflow: "visible" }); $('#fm_scroll_pane').css({ height: "calc(100% - 150px) ", scrollTop: 0 }); $('#fm_scroll_pane').scrollTop(0); $('#fm_scroll_pane').perfectScrollbar('update'); } else { if (o.mode == 'show') { $('.fm-files').css({ height: "calc(100% - 80px)" }); } else { $('.fm-files').css({ height: "calc(100% - 151px)" }); } } $('.fm_prev_overlay').click(function () { var type = $(this).parent().data('sort'); $('.fm_prev_selected').removeClass('fm_prev_selected'); $(this).addClass('fm_prev_selected'); if (type == "_") { selType = "folder"; selFile = $(this).prev().text(); $('#fm_bar_down').button('disable'); $('#fm_bar_del').button('enable'); } else { selType = "file"; selFile = $(this).prev().text(); $('#fm_inp_save').val(selFile.split('.')[0]); $('#fm_bar_down').button('enable'); $('#fm_bar_del').button('enable'); } if (o.audio.indexOf(type) > -1) { $("#fm_bar_play , #fm_bar_stop").button('enable'); } else { $("#fm_bar_play, #fm_bar_stop").button('disable'); } }); $('.fm_prev_overlay').dblclick(function () { var type = $(this).parent().data('sort'); if (type == "_") { o.path += $(this).prev().text() + "/"; load(o.path); } else { // Select immediately this image $('#fm_btn_open').trigger('click'); } }); } if ($('#fm_bar_all').hasClass('ui-state-error')) { $('.fm_folderFilter').show(); $('.fm_fileFilter').show(); } else { $('.fm_fileFilter').hide(); if (o.folderFilter) { $('.fm_folderFilter').hide(); } } if ($('#fm_bar_background').hasClass('ui-state-error')) { $('.fm-files').removeClass('fm-dark-background').addClass('fm-light-background'); } else if ($('#fm_bar_background').hasClass('ui-state-highlight')) { $('.fm-files').removeClass('fm-light-background').addClass('fm-dark-background'); } if (o.view == "prev" && $('#fm_bar_all').hasClass('ui-state-error')) { $('.fm_fileFilter').css({display: "inline-table"}); } // BF: Workaround against wrong path if (o.path == o.root || o.path == '/') { $('#fm_bar_back').trigger('mouseleave'); $('#fm_bar_back').button("option", "disabled", true); } else { $('#fm_bar_back').button("option", "disabled", false); } if (o.currentFile) { $('.fm_prev_name').each(function () { if ($(this).html() == o.currentFile) { $(this).parent().find('.fm_prev_overlay').trigger('click'); $(this).parent()[0].scrollIntoView( true ); return false; } }); o.currentFile = null; } filter(o); } function filter(o) { var isAll = $('#fm_bar_all').hasClass('ui-state-error'); $('.fm_prev_container').each(function () { if (o.filter) { var filter = o.filter.toLowerCase(); var filename = $(this).find('.fm_prev_name').text(); if (filename.toLowerCase().indexOf(filter) == -1) { $(this).hide(); } else { if (isAll || !$(this).hasClass('fm_fileFilter')) { $(this).show(); } else { $(this).hide(); } } } else { if (isAll || !$(this).hasClass('fm_fileFilter')) { $(this).show(); } else { $(this).hide(); } } }); } $('body').append( '
' + ' ' + '
' + '
' + ' ' + ' ' + '
' + '
' + fmTranslate('Path:') + '
' + '
' + '
' + '
' + '
' + fmTranslate('File name:') + '
' + ' ' + '
' + '
' + ' ' + ' ' + ' ' + '
' + '
' + '
'); // hide show all button if no filter set if (!o.fileFilter || !o.fileFilter.length) $('#fm_bar_all').hide(); $('#dialog_fm').dialog({ height: $(window).height() - 100, width: 835, minWidth: 672, minHeight: 300, resizable: true, modal: true, close: function () { $('#dialog_fm').remove(); }, resize: function () { $('#fm_bar_filter').clearSearch('update'); } }); $('#fm_bar_filter').change(function () { var timer = $(this).data('timer'); if (timer) clearTimeout(timer); $(this).data('timer', setTimeout(function () { o.filter = $('#fm_bar_filter').val(); config.filter = o.filter; if (typeof storage != 'undefined') storage.set('visFM', JSON.stringify(config)); // Use filter filter(o); }), 500); }).keyup(function () { $(this).trigger('change'); }).clearSearch().parent().css({display: 'inline'}); // Set z-index of dialog if (o.zindex !== null) { $('div[aria-describedby="dialog_fm"]').css({'z-index': o.zindex}); } if (o.mode == "show") { $('.fm-buttonbar').hide(); } if (o.mode == "save") { $('#fm_btn_open').hide(); } if (o.mode == "open") { $('#fm_save_wrap').hide(); $('#fm_btn_save').hide(); } $('.fm_bar_icon').button(); $('#fm_bar_back') .button() .click(function () { var path_arry = o.path.split('/'); path_arry.pop(); path_arry.pop(); if (path_arry.length === 0) { o.path = ''; } else { o.path = path_arry.join('/') + '/'; } // Workaround for wrong path if (o.path == o.root || o.path == '/') { $('#fm_bar_back').trigger('mouseleave'); $('#fm_bar_back').button("option", "disabled", true); } load(o.path); }); // $("#fm_bar_play, #fm_bar_stop, #fm_bar_down").button('disable'); if (document.getElementById('script_scrollbar')) { $('.fm-files').wrap('
'); $('.fm-files').css({ minHeight: "100%", height: "auto", width: "calc(100% - 4px)", border: "none" }); $('#fm_scroll_pane').perfectScrollbar({ wheelSpeed: 40, suppressScrollX: true }); } if (!o.folderFilter) { $('#fm_bar_folder').addClass('ui-state-error'); } load(o.path); $('#fm_bar_all') .button({ icons: { primary: "ui-icon-gear" } }) .click(function () { $(this).toggleClass('ui-state-error'); if ($(this).hasClass('ui-state-error')) { $('.fm_fileFilter').show(); $('.fm_folderFilter').show(); if (o.view == "prev") { $('.fm_fileFilter').css({display: "inline-table"}); } } else { $('.fm_fileFilter').hide(); if (o.folderFilter) { $('.fm_folderFilter').hide(); } } $(this).removeClass('ui-state-focus'); }); $('#fm_bar_background') .button({ icons: { primary: "ui-icon-alert" } }) .click(function () { if ($(this).hasClass('ui-state-error')) { $('.fm-files').removeClass('fm-dark-background no_background').addClass('fm-light-background'); $(this).removeClass('ui-state-error').addClass('ui-state-highlight'); } else if ($(this).hasClass('ui-state-highlight')) { $(this).removeClass('ui-state-error ui-state-highlight'); $('.fm-files').removeClass('fm-light-background fm-dark-background').addClass('no_background'); } else { $(this).removeClass('ui-state-highlight').addClass('ui-state-error'); $('.fm-files').removeClass('no_background fm-light-background').addClass('fm-dark-background'); } config.background = $('#fm_bar_background').hasClass('ui-state-error') ? 'fm-dark-background' : ($('#fm_bar_background').hasClass('ui-state-highlight') ? 'fm-light-background' : ''); if (typeof storage != 'undefined') storage.set('visFM', JSON.stringify(config)); }); if (config.background == 'fm-dark-background') { $('#fm_bar_background').addClass('ui-state-error'); $('.fm-files').addClass(config.background).removeClass('no_background'); } else if (config.background == 'fm-light-background') { $('#fm_bar_background').addClass('ui-state-highlight'); $('.fm-files').addClass(config.background).removeClass('no_background'); } if (config.all) { $('#fm_bar_all').addClass('ui-state-error'); } $('.fm_bar_icon') .mouseenter(function () { $(this).addClass('ui-state-focus'); }) .mouseleave(function () { $(this).removeClass('ui-state-focus'); }) .click(function () { var id = $(this).attr('id'); //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if (id == "fm_bar_refresh") { load(o.path); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if (id == "fm_bar_add") { $('#dialog_fm').append( '
' + '
' + '

' + fmTranslate('Dropbox') + '
' + fmTranslate('Drop the files here') + '

' + ' ' + '
' + '
' + ' ' + ' ' + '
' + '
'); $('#dialog_fm_add').dialog({ dialogClass: "dialog_fm_add", resizable: false, draggable: false, close: function () { $('#dialog_fm_add').remove(); load(o.path); } }); var files = []; $('.fm_dropbox_text').click(function () { $('#fm_open_file').trigger('click'); }); $('#fm_open_file').change(function (event) { try { $.each(event.target.files, function () { files.push(this); }); if (files.length) { read(o, files, uploadArray); } return false; } catch (err) { alert(err); return false; } }); $('#fm_add_dropzone').bind('drop', function (e) { try { $.each(e.dataTransfer.files, function () { files.push(this); }); $('.dialog_fm_add > *').css({cursor: "wait"}); read(o, files, uploadArray); return false; } catch (err) { alert(err); return false; } }); try { $('#btn_fm_add_ok').button().click(function () { function upload() { try { var name = uploadArray[0].name.split('.'); // convert extension to lower case name[name.length - 1] = name[name.length - 1].toLowerCase(); name = name.join('.'); fmConn.writeFile64(o.path + name, uploadArray[0].value.split('base64,')[1], function (err, data) { // TODO Leerzeichem im Dateinmaen Berucksichtigen (da in classen keine leertzeichen sein dürfen) var class_name = uploadArray[0].name.split('.')[0].replace(" ", "_"); $("." + class_name).remove(); uploadArray.shift(); if (uploadArray.length > 0) { upload(); } else { $('.dialog_fm_add > *').css({cursor: "default"}); } }); } catch (err) { console.log(err); $('.dialog_fm_add > *').css({cursor: "default"}); } } $('.dialog_fm_add > *').css({cursor: "wait"}); upload(); }); $('#btn_fm_add_close').button().click(function () { $('#dialog_fm_add').remove(); load(o.path); }); } catch (err) { alert(err); } } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if (id == "fm_bar_addfolder") { try { $('#dialog_fm').append( '
' + '
' + '' + '

' + '
'); $('#dialog_fm_folder').dialog({ dialogClass: "dialog_fm_rename", resizable: false, draggable: false, modal: true, close: function () { $('#dialog_fm_folder').remove(); } }); $('#fm_btn_folder').button().click(function () { var new_folder = $('#fm_inp_folder').val(); $('#dialog_fm_folder').remove(); if (new_folder !== '' || new_folder !== undefined) { fmConn.mkdir(o.path + new_folder, function (err) { if (err) { console.log(err); alert(fmTranslate('Cannot create folder')); } else { load(o.path); } }); } }); } catch (err) { alert(err); } } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if (id === 'fm_bar_down') { try { fmConn.readFile64(o.path + selFile, function (err, data) { console.log(data); $('body').append(''); document.getElementById('fm_download').click(); document.getElementById('fm_download').remove(); }); } catch (err) { alert(err); } } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if (id === 'fm_bar_rename') { try { $('#dialog_fm').append( '
' + '
' + '' + '

' + '
'); $('#dialog_fm_rename').dialog({ dialogClass: "dialog_fm_rename", resizable: false, draggable: false, modal: true, close: function () { $('#dialog_fm_rename').remove(); } }); $('#fm_btn_rename').button().click(function () { var new_name = $('#fm_inp_rename').val(); $('#dialog_fm_rename').remove(); if (new_name !== "" || new_name !== undefined) { fmConn.renameFile(o.path + selFile, o.path + new_name, function (err) { if (err) { console.log(err); alert(fmTranslate('Cannot rename')); } else { load(o.path); } }); } }); } catch (err) { alert(err); } } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if (id === 'fm_bar_del') { try { fmConn.unlink(o.path + selFile, function (err) { if (err) { console.log(err); alert(fmTranslate('Delete failed')); } load(o.path); }); } catch (err) { alert('ordner \n' + err); } } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if (id === 'fm_bar_list') { o.view = 'table'; build(o); } if (id == "fm_bar_prev") { o.view = "prev"; build(o); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX if (id === 'fm_bar_play') { if (document.getElementById('fm_sound_play')) { document.getElementById('fm_sound_play').remove(); } $('#dialog_fm').append(''); document.getElementById('fm_sound_play').play(); } if (id == 'fm_bar_stop') { document.getElementById('fm_sound_play').remove(); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $(this).effect('highlight'); }); $('#fm_btn_cancel').button().click(function () { config.path = o.path; config.view = o.view; config.all = $('#fm_bar_all').hasClass('ui-state-error'); config.background = $('#fm_bar_background').hasClass('ui-state-error') ? 'fm-dark-background' : ($('#fm_bar_background').hasClass('ui-state-highlight') ? 'fm-light-background' : ''); if (typeof storage != 'undefined') storage.set('visFM', JSON.stringify(config)); $('#dialog_fm').remove(); }); $('#fm_btn_open').button().click(function () { $('#dialog_fm').remove(); config.path = o.path; config.view = o.view; config.all = $('#fm_bar_all').hasClass('ui-state-error'); config.background = $('#fm_bar_background').hasClass('ui-state-error') ? 'fm-dark-background' : ($('#fm_bar_background').hasClass('ui-state-highlight') ? 'fm-light-background' : ''); if (typeof storage != 'undefined') { storage.set('visFM', JSON.stringify(config)); } return callback({ path: o.path, file: selFile }, o.userArg); }); $('#fm_btn_save').button().click(function () { var file = $('#fm_inp_save').val(); $('#dialog_fm').remove(); config.path = o.path; config.view = o.view; config.all = $('#fm_bar_all').hasClass('ui-state-error'); config.background = $('#fm_bar_background').hasClass('ui-state-error') ? 'fm-dark-background' : ($('#fm_bar_background').hasClass('ui-state-highlight') ? 'fm-light-background' : ''); if (typeof storage != 'undefined') { storage.set('visFM', JSON.stringify(config)); } return callback({ path: o.path, file: file }, o.userArg); }); }; }) (jQuery); jQuery.fn.sortElements = (function () { var sort = [].sort; return function (comparator, getSortable) { getSortable = getSortable || function () { return this; }; var placements = this.map(function () { var sortElement = getSortable.call(this), parentNode = sortElement.parentNode, // Since the element itself will change position, we have // to have some way of storing it's original position in // the DOM. The easiest way is to have a 'flag' node: nextSibling = parentNode.insertBefore( document.createTextNode(''), sortElement.nextSibling ); return function () { if (parentNode === this) { throw new Error( "You can't sort elements if any one is a descendant of another." ); } // Insert before flag: parentNode.insertBefore(this, nextSibling); // Remove flag: parentNode.removeChild(nextSibling); }; }); return sort.call(this, comparator).each(function (i) { placements[i].call(getSortable.call(this)); }); }; })(); //--------------- https://github.com/waslos/jquery-clearsearch/blob/master/src/jquery.clearsearch.js ---------------------- /* ============================================================================ * jquery.clearsearch.js v1.0.3 * https://github.com/waslos/jquery-clearsearch * ============================================================================ * Copyright (c) 2012, Was los.de GmbH & Co. KG * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of the "Was los.de GmbH & Co. KG" nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ========================================================================= */ (function($) { $.fn.clearSearch = function(options) { if (options == 'update') { return this.each(function() { var $this = $(this); var width = $this.outerWidth(), height = $this .outerHeight(); var btn = $this.next(); btn.css({ top : height / 2 - btn.height() / 2, left : width - height / 2 - btn.height() / 2 }); }); } var settings = $.extend({ 'clearClass' : 'clear_input', 'focusAfterClear' : true, 'linkText' : '×' }, options); return this.each(function() { var $this = $(this), btn, divClass = settings.clearClass + '_div'; if (!$this.parent().hasClass(divClass)) { $this.wrap('
' + $this.html() + '
'); $this.after('' + settings.linkText + ''); } btn = $this.next(); function clearField() { $this.val('').change(); triggerBtn(); if (settings.focusAfterClear) { $this.focus(); } if (typeof (settings.callback) === "function") { settings.callback(); } } function triggerBtn() { if (hasText()) { btn.show(); } else { btn.hide(); } update(); } function hasText() { return $this.val().replace(/^\s+|\s+$/g, '').length > 0; } function update() { var width = $this.outerWidth(), height = $this .outerHeight(); btn.css({ top : height / 2 - btn.height() / 2, left : width - height / 2 - btn.height() / 2 }); } btn.on('click', clearField); $this.on('keyup keydown change focus', triggerBtn); triggerBtn(); }); }; })(jQuery);