"use strict"; // window.elFinder = function(node, options) { var self = this, // listeners = {}; /** * id * * @type Array */ this.selected = []; /** * * * @type Object */ this.ui = {}; /** * * * @type Object */ this.commands = {}; /** * . * * @param String , * @param Object * @return elFinder */ this.bind = function(event, callback) { var i; if (typeof(callback) == 'function') { event = ('' + event).toLowerCase().split(/\s+/); for (i = 0; i < event.length; i++) { if (listeners[event[i]] === void(0)) { listeners[event[i]] = []; } listeners[event[i]].push(callback); } } return this; }; /** * . * * @param String * @param Object * @return elFinder */ this.unbind = function(event, callback) { var l = listeners[('' + event).toLowerCase()] || [], i = l.indexOf(callback); i > -1 && l.splice(i, 1); return this; }; /** * . * * @param String * @param Object * @return elFinder */ this.trigger = function(event, data) { var event = event.toLowerCase(), handlers = listeners[event] || [], i; if (handlers.length) { event = $.Event(event); for (i = 0; i < handlers.length; i++) { // // event.data = $.extend(true, {}, data); try { if (handlers[i](event, this) === false || event.isDefaultPrevented()) { break; } } catch (ex) { window.console && window.console.log && window.console.log(ex); } } } return this; } /** * . * * @param Object * @return jQuery.Deferred */ this.ajax = function(data) { var self = this, dfrd = $.Deferred() .fail(function(error) { self.error({error : error}); }) .done(function(data) { // self.trigger(data.cmd, data); }); $.ajax({ // ... data : data }).error(function() { dfrd.reject('Unable to connect to backend'); }).success(function(data) { if (!this.validData(data)) { dfrd.reject('Invalid data from backend'); } else if (data.error) { dfrd.reject(data.error); } dfrd.resolve(data); }) return dfrd; } // - - // .............. // "" // - / . $.each(['open', 'select', 'error'], function(i, name) { self[name] = function() { var arg = arguments[0]; return arguments.length == 1 && typeof(arg) == 'function' ? self.bind(name, arg) : self.trigger(name, $.isPlainObject(arg) ? arg : {}); } }); // this.open(function(e) { // }) .select(function(e) { // this.selected = e.data.selected; }) .error(function(e) { // alert(e.data.error); }); } elFinder.prototype = { // views : { // cwd : function(fm, node) { var self = this, view = $('<div/>') .appendTo(node) .delegate('div[id]', 'click', function() { view.find('div[id]').removeClass('selected'); $(this).addClass('selected'); // "select" fm.select({selected : [this.id]}); }) .delegate('div[id]', 'dblclick', function() { fm.trigger('dblclick', {target : this.id}); }) ; // "open" fm.open(function(e) { var files = e.data.files; // }); } }, // commands : { open : function(fm) { this.enabled = false; // "dblclick" fm.select(function(e) { // , / // , Enter this.enabled = e.data.selected.length > 0; }) bind('dblclick', function(e) { // fm.ajax({cmd : 'open', target : e.data.target}); }); } } }
Source: https://habr.com/ru/post/119304/
All Articles