Current Path : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/file_manager/js/ |
Current File : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/file_manager/js/manager.js |
function log(str) { if (FileManager.debug == true) { $("#FM-log").prepend(str + "<br />"); } } // http://www.webtoolkit.info/javascript-url-decode-encode.html var URL = { // публичная функция для кодирования URL encode : function (string) { return escape(this._utf8_encode(string)); }, // публичная функция для декодирования URL decode : function (string) { return this._utf8_decode(unescape(string)); }, // приватная функция для кодирования URL _utf8_encode : function (string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; }, // приватная функция для декодирования URL _utf8_decode : function (utftext) { var string = ""; var i = 0; var c = 0, c1 = 0, c2 = 0; while ( i < utftext.length ) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i+1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } } FileManager.settings = {}; FileManager.settings.confirm_file_delete = {type: "owner", state: true, name: "Подтверждение при удаление файла"}; FileManager.settings.confirm_file_rewrite = {type: "owner", state: true, name: "Подтверждение при перезаписи файла"}; FileManager.settings.absolute_path = {type: "owner", state: true, name: "Aбсолютные пути (иначе относительные)"}; FileManager.settings.maximum_performance = {type: "owner", state: true, name: "Максимальная производительность"}; FileManager.settings.click_description = {type: "owner", state: true, name: "Редактирование описания по одинарному клику (иначе двойной)"}; FileManager.folder = undefined; FileManager.cur = undefined; /* текущий <a> */ FileManager.dir = {}; FileManager.config = FileManager.config; /* type: parent, connect, owner */ FileManager.selected = []; // выбранные файлы FileManager.typeList = 'FMA-T'; // trumb default FileManager.typeCode = 'FML-A'; // адрес default FileManager.STO = {}; // window timeout id FileManager.history = []; FileManager.historyID = 0; /*========================================*/ /* http://snowcore.net/clone-javascript-object */ FileManager.cloneObject = function(o) { if(!o || 'object' !== typeof o) { return o; } var c = 'function' === typeof o.pop ? [] : {}; var p, v; for(p in o) { if(o.hasOwnProperty(p)) { v = o[p]; if(v && 'object' === typeof v) {c[p] = this.cloneObject(v)} else {c[p] = v} } } return c; } FileManager.lockUI = function(mode) { if (mode == true) { $("#FM-prev").addClass('disable'); $("#FM-next").addClass('disable'); $("#FM-refresh").addClass('disable'); $("ul.FM-tree").removeClass("FM-tree").addClass("FM-tree-lock"); } else { $("#FM-prev").removeClass('disable'); $("#FM-next").removeClass('disable'); $("#FM-refresh").removeClass('disable'); $("ul.FM-tree-lock").removeClass("FM-tree-lock").addClass("FM-tree"); } } FileManager.error = function(XMLHttpRequest, textStatus, errorThrown) { //A1 = XMLHttpRequest; var i = XMLHttpRequest.responseText.indexOf("{"); var m = i < 0 ? XMLHttpRequest.responseText : XMLHttpRequest.responseText.substring(0,i); E1 = XMLHttpRequest; E2 = textStatus; E3 = errorThrown; alert('error'); alert('status='+XMLHttpRequest.status+', readyState='+XMLHttpRequest.readyState+', сервер вернул ошибочный результат('+textStatus+'):\n'+m); // content this не принадлежит FileManager !!! $(FileManager.cur).parent().removeClass('wait'); // разблокируем FileManager.lockUI(false); } FileManager.mimeIA = "mp3,gif,jpg,jpeg,png,php,zip,txt,rar,doc,rtf,pdf,html,htm,css,xml,odt,avi,wmv,flv,swf,wav,xls,7z,gz"; FileManager.makeMap = function(str) { var obj = {}, items = str.split(","); for ( var i = 0; i < items.length; i++ ) obj[ items[i] ] = true; return obj; } FileManager.mimeIA = FileManager.makeMap(FileManager.mimeIA); /* по расширению взять картинку */ FileManager.getmimeIA = function(ext) { if((!ext) || (!this.mimeIA[ext])) {return "mime_empty.png"} else {return this.mimeIA[ext]+'.png'} } FileManager.clearPreview = function() { $("#FM-lightbox").css("visibility", 'hidden').attr("href",'#'); $("#FM-preview-image").hide(0).removeAttr("src"); $("#FM-preview-filename").hide(0).html(''); $("#FM-preview-table").hide(0); $("#FM-preview-desc").hide(0).html(''); $("#FileManager-buffer").val(''); this.selected = []; } FileManager.resizeimage = function(maxW, maxH, defW, defH) { var kofW = maxW/defW; var kofH = maxH/defH; if ((kofW < 1) || (kofH < 1)) { if (kofH < kofW) { kofW = kofH; } var imgW = Math.ceil(defW * kofW); var imgH = Math.ceil(defH * kofW); if (imgW > maxW) imgW = maxW; if (imgH > maxH) imgH = maxH; } else { var imgW = defW; var imgH = defH; } return [imgW, imgH]; } FileManager.setDS = function(folder) { var st = FileManager.DS; if (st == '\\') { st='\\\\'; } return folder.replace(new RegExp(st,'g'), '/'); } FileManager.lightboxURL = function(filename) { var url = this.url+URL.encode(this.setDS(this.folder)+filename); $("#FM-lightbox").attr("href", url); return url; } FileManager.previewResize = function(folder) { if ( (this.folder == folder) && $("#FM-preview-filename").html() ) { var f = this.dir[folder][$("#FM-preview-filename").html()]; //log('0 '+f); var size = this.resizeimage($("#FM-lightbox").width(), $("#FM-lightbox").height(), f.list.image.dim[0], f.list.image.dim[1]); $("#FM-preview-image").width(size[0]).height(size[1]).show(0); $("#FM-lightbox").fadeTo(0,0).css("visibility",'visible').fadeTo(0,1); } $("#FM-preview-image").unbind('load'); } FileManager.preview = function(name) { var f = this.dir[this.folder][name]; if ($("#FM-preview-filename").html() == f.filename){return;} $("#FM-preview-filename").html(f.filename).show(0); //log('1 '+f); if (f.list) { $("#FM-lightbox").css("visibility", 'hidden'); $("#FM-preview-image").hide(0).removeAttr("src").load(function(){FileManager.previewResize(FileManager.folder);}).attr("src", this.lightboxURL(f.filename)); $("#preview-width").html(f.list.image.dim[0]); $("#preview-height").html(f.list.image.dim[1]); } else { $("#FM-preview-image").removeAttr("src"); $("#FM-lightbox").css("visibility", 'hidden').attr("href",'#'); $("#preview-width").html(''); $("#preview-height").html(''); } $("#preview-size").html((f.filesize/1024).toFixed(2)); $("#FM-preview-table").show(0); //$("#preview-lastmodif").html(f.lastmodif); if (f.desc) { $("#FM-preview-desc").html(f.desc).show(0); } else { $("#FM-preview-desc").hide(0).html(''); } } FileManager.makeCode = function() { //if (typeof this.dir[this.folder] == "undefined") // alert("makeCode просмотр несуществующего каталога: "+this.folder); var fs = this.dir[this.folder]; var list =[]; for(var i in this.selected) { var name = this.selected[i]; var url =this.url+URL.encode(this.setDS(this.folder)+fs[name].filename), mini=''; if ((fs[name].list) && (fs[name].list.mini)) { mini = this.url+URL.encode(this.setDS(this.folder)+fs[name].list.mini.filename); } switch(this.typeCode) { case 'FML-A': list.push(url); break; case 'FML-H': if (mini) { list.push('<a href="'+url+'"><img src="'+mini+'" alt="" /></a>'); } else { list.push('<a href="'+url+'">'+fs[name].filename+'</a>'); } break; case 'FML-B': if (fs[name].list) { list.push('[image='+url+']'+url+'[/image]'); } else { list.push('[file='+url+']'+url+'[/file]'); } break; case 'FML-G': if (!mini) {mini = url;} list.push('[gal='+mini+' '+fs[name].filename+']'+url+'[/gal]'); break; } } var st = list.join('\n'); if (this.typeCode == 'FML-G') { st = '[gallery][galname]gallery name[/galname]\n'+st+'\n[/gallery]'; } $("#FileManager-buffer").val(st); //$("#FileManager-buffer").val(list.join('').replace(/</gm,'<').replace(/>/gm,'>')); } /* select File */ FileManager.selectFile = function(e, el) { clearTimeout(FileManager.STO['/preview/']); if(e.ctrlKey === false) { $("a."+FileManager.typeList).removeClass("FMS"); this.selected = []; $(el).addClass("FMS"); this.selected.push(el.title); } else { if($(el).hasClass("FMS") === true) { $(el).removeClass("FMS"); for(var i in this.selected) { if (this.selected[i] == el.title) { delete this.selected[i]; break; } } } else { $(el).addClass("FMS"); this.selected.push(el.title); } } this.makeCode(); FileManager.STO['/preview/'] = window.setTimeout(function(){FileManager.preview(el.title);}, 0); } FileManager.loadSrc = function(folder, f, dim) { if (this.folder == folder) { var fmTC = this.mimeIA [f.ext] ? ' fmTC-'+f.ext : ' fmTC-file'; $("a[title='"+f.filename+"'] .DIMG").attr("class", '').addClass('DIMG'); $("a[title='"+f.filename+"']").addClass("FML"); var dim = this.resizeimage(96, 84, dim[0], dim[1]); $("a[title='"+f.filename+"'] img").width(dim[0]).height(dim[1]).fadeTo(0,1); //$("a[title='"+f.filename+"'] img").unbind('load'); } } FileManager.setSrc = function(folder, f) { //log(f.filename); if (folder != this.folder){return} //log('2 '+f); if (f.list) { var url=this.url+URL.encode(this.setDS(folder)+f.filename), dim = f.list.image.dim; if (f.list.mini) { url = this.url+URL.encode(this.setDS(folder)+f.list.mini.filename); dim = f.list.mini.dim; } $("a[title='"+f.filename+"'] img").fadeTo(0,0.01).load(this.loadSrc(folder, f, dim)).attr("src", url); } } FileManager.addFile = function(folder, name) { var f = this.dir[folder][name]; var img = ''; var FML = ''; /* признак загруженности для изображений */ var list = '', listhead = ''; var d='', s=f.filesize; //log('3 '+f); for(var name in this.tasks) { if ((f.list) && (f.list[name])) { d = f.list[name].dim[0]+' × '+ f.list[name].dim[1]; s = f.list[name].filesize; img = '<img alt="" />'; // img = '<img alt="" onMouseDown="return false;" />'; } listhead+='<div class="COL">'+name+'</div>'; list+='<div class="SIZE">'+s+'</div><div class="DIM">'+d+'</div>'; d=''; s=''; } if (!img){FML=' FML';} /* class подложки, при загрузки изображения - ликвидируется */ var fmTC = this.mimeIA [f.ext] ? ' fmTC-'+f.ext : ' fmTC-file'; //var head = ''; //if ($("#FM-list")[0].childNodes.length == 0) // { // head='<div class="'+this.typeList+' FMH"><div class="DNAME">имя</div>'+listhead+'<div class="LAST">изменен</div></div>'; // } return '<a class="'+this.typeList+FML+'" title="'+f.filename+'"><div class="DIMG'+fmTC+'">'+img+'</div><div class="DREM"><textarea readOnly>'+f.desc+'</textarea></div><div class="DNAME">'+f.filename+'</div>'+list+'<div class="LAST">'+f.lastmodif+'</div></a>'; } FileManager.showFiles = function(folder) { if (folder != this.folder){return} for(var i in this.STO) { clearTimeout(this.STO[i]); } this.STO = {}; var files = this.dir[folder]; var list = {}; var html = []; html.push('<div id="FM-list">'); var count = 0; for(var name in files) { if ((name != '/tasks/') && (name != '/config/')) { list[name] = true; html.push(this.addFile(folder, name)); count++; } } html.push('</div>'); /* //FileManager.STO['/folder/'] = window.setTimeout(function(){$("#FM-list").html(html.join(''));}, 5000); FileManager.STO['/folder/'] = window.setTimeout(function() { $("#FM-RP").html(html.join('')); preventSelection($("#FM-list").get(0)); }, 500); */ this.$FM_RP.html(html.join('')); function toSSfast() { for(var name in files) { if (files[name].list){FileManager.setSrc(folder, files[name]);} } } var pac = 3; function toSS() { if (folder != FileManager.folder){return;} var ip = 0; for(var name in list) { delete list[name]; if (files[name].list) { FileManager.setSrc(folder, files[name]); ip++; if (ip == pac) { FileManager.STO[name] = window.setTimeout(function(){toSS()}, pac*50); return; } } } } if (this.settings.maximum_performance.state == true) { toSSfast() } else { FileManager.STO['/start/'] = window.setTimeout(function(){toSS()}, 200 + count*2); } } /* загрузка существующего файла (или его переименование) */ FileManager.refreshFile = function(folder, oldname, newname) { if (this.folder == folder) { //log('refresh '+$("#FM-preview-filename").html()+' '+oldname); st = this.addFile(folder, newname); $("a[title='"+oldname+"']").attr('title', newname).replaceWith(st); this.setSrc(folder, this.dir[folder][newname]); // картинка была на превью if ($("#FM-preview-filename").html() == newname) // #FM-preview-filename - изменено после редактирования { //log('refresh preview'); $("a[title='"+newname+"']").addClass("FMS"); $("#FM-preview-filename").html(''); // скидываем this.preview(newname); } } } /* upLoad File */ FileManager.upLoadFile = function(data) { //DATA = data; //log('upLoadFile'); var folder = data.folder; var f = data.file; for(var name in f.tasks) { if (f.tasks[name].error) { alert('Произошла ошибка выполнения задания "'+name+'" для файла "'+f.tasks[name].filename+'", ответ сервера: '+f.tasks[name].error); } } delete f.tasks; log('unload '+folder+' '+f.filename+' '+(typeof this.dir[folder][f.filename])); if (typeof this.dir[folder][f.filename] == "undefined") { this.dir[folder][f.filename] = f; if (this.folder == folder) { $('#FM-list').append(this.addFile(folder, f.filename)); this.setSrc(folder, this.dir[folder][f.filename]); } } else { // при загрузке существующего файла, описания мы не перечитываем, => надо брать то, что есть f.desc = this.dir[folder][f.filename].desc; this.dir[folder][f.filename] = f; this.refreshFile(folder, f.filename, f.filename); } } /* если данные для папки были загружены => удаляем */ FileManager.deleteData = function(li) { if (li.hasClass('__L')) { li.removeClass('__L'); var rel = $(li.children()[0]).attr('rel'); delete FileManager.dir[rel]; return true; } else {return false;} } /* если были данные проходимся по children */ FileManager.clearItems = function(li) { if (this.deleteData(li) === true) { $(li.children()[1]).children().each(function(i) { FileManager.clearItems($(this)); }); } } FileManager.removeTreeItems = function(li) { this.clearItems(li); li.removeClass('__E').addClass('__C'); delete li.children('ul').remove(); } /* makeTreeItem ===========================================================*/ FileManager.makeTreeItem = function(rel, name, _delete, _rename) { return '<li class="__C"><a rel="'+(rel ? rel+this.DS : '')+'"><span class="delete'+(_delete ? '' : ' disable')+'" title="удалить"></span><span class="rename'+(_rename ? '' : ' disable')+'" title="переименновать"></span><span class="new" title="создать подкаталог"></span><abbr>'+(name ? name : '')+'</abbr></a></li>'; } /* setData ===========================================================*/ FileManager.setData = function(li, json) { var dir = []; dir.push('<ul class="FM-tree" style="display: none;">'); for(var i=0, L=json.dir.length; i<L; i++) { dir.push(this.makeTreeItem(json.dir[i].rel, json.dir[i].name, true, true)); } dir.push('</ul>'); li.removeClass('wait').addClass('__L').append(dir.join('')); li.removeClass('__C').addClass('__E'); $(li.children()[1]).show(); this.dir[json.folder] = {}; this.dir[json.folder] = json.files; //this.dir[json.folder]['/tasks/'] = json.files['/tasks/']; this.makeTasks(json.folder, json.files['/tasks/']); } /* this.task - список задач текущего каталога как формируется this.task : берётся список задач родителя и если какой-то задачи нет в списке каталога, она добавляется */ // макеTasks вызывается только тогда когда данные загружены или есть в кэше FileManager.makeTasks = function(folder, t) // json.tasks { var tasks={}; if (t){tasks = t;} var _tasks; var parent = $(this.cur).parent().parent().parent(); if (parent.attr("id") == "FileManager-datatree") // корень { _tasks = this.tasksDef; } else { _tasks = this.dir[$(parent.children()[0]).attr("rel")]['/tasks/']; // ни хера се } for(var i in _tasks) // проходимся по родительскому списку { if ((typeof tasks[i] == "undefined") || (tasks[i].type == 'parent')) /* если в моём наборе этого нет или это родительский элемент */ { tasks[i] = this.cloneObject(_tasks[i]); // обязательно cloneObject, иначе получим ссылку tasks[i].type = 'parent'; } } this.tasks = this.dir[folder]['/tasks/'] = tasks; } /* loadData ===========================================================*/ FileManager.loadData = function(folder, li, show, refresh) { if (li.hasClass('__L')) /* уже загружен */ { this.makeTasks(folder, this.dir[folder]['/tasks/']); if (show === true){this.showFiles(folder);} return; } else log('loadData no cache'); li.addClass('wait'); $.ajax( { url :this.__fm ,data :{mode: 'folder', folder: folder, 'tasklist[]': this.getTaskList(), refresh: refresh} ,error :this.error ,success :function(json) { //JJson = json; if (json.refresh == "true"){$("#FM-refresh").removeClass("active");} if (json.error) { alert(json.error); $("#FM-path").html(''); li.hide(0); return; } FileManager.setData(li, json); if (show === true){FileManager.showFiles(json.folder);} } }); } /* setCur */ FileManager.setCur = function(a) { if (this.cur == a){return false} if (typeof this.cur != "undefined"){$(this.cur).removeClass('select')} this.cur = a; $(a).addClass('select'); this.folder = $(a).attr('rel'); $("#FM-path").html(this.FCPATH + this.folder); //$('#FM-list').empty(); /* пока не вышел jQuery 1.4 */ document.getElementById('FM-RP').removeChild(document.getElementById('FM-list')); FileManager.clearPreview(); return true; } /* delete FILES */ FileManager.deleteFiles = function() { var f = this.dir[this.folder].f; var list = []; for(var i in this.selected) { list.push(this.selected[i]); } if ( (this.settings.confirm_file_delete.state == false) || confirm("УДАЛЯЕМ ?\n\n"+list.join('; ')) ) { //$('.FM-tree').removeClass('FM-tree').addClass('FM-tree-lock'); $(this.cur).parent().addClass('wait'); $.ajax( { url :this.__fm ,data :{mode: 'deletefiles', folder: this.folder, 'files[]':list, 'tasklist[]': this.getTaskList()} ,async :false ,error :this.error ,success :function(json) { //$('.FM-tree-lock').removeClass('FM-tree-lock').addClass('FM-tree'); $(FileManager.cur).parent().removeClass('wait'); if (json.error) { alert(json.error); return; } var nodelete = []; for(var name in json.files) { if (json.files[name]['delete'] === false) {nodelete.push(json.files[name].file);} else { delete FileManager.dir[json.folder][name]; if (FileManager.folder == json.folder) { delete $("a[title='"+name+"']").remove(); } } } if (FileManager.folder == json.folder) { FileManager.clearPreview(); } if (nodelete.length) { alert('по неизвестной нам причине, некоторые файлы не были удалены:\n'+nodelete.join('\n')); } } }); } } /* for textarea */ FileManager.changeDesc = function(folder, div, text) { filename = $(div).attr('title'); $(FileManager.cur).parent().addClass('wait'); FileManager.lockUI(true); $.ajax( { url :this.__fm ,data :{mode: 'changedesc', folder: folder, 'filename': filename, desc: text} ,error :this.error ,success :function(json) { if (json.error) { alert(json.error); return; } FileManager.dir[json.folder][json.filename].desc = json.desc; if ((FileManager.folder == json.folder) && ($("#FM-preview-filename").html() == json.filename)) { $("#FM-preview-desc").html(json.desc); if (json.desc) { $("#FM-preview-desc").show(); } else { $("#FM-preview-desc").hide(); } } $(FileManager.cur).parent().removeClass('wait'); FileManager.lockUI(false); } }); } /* TEXTAREA функции */ FileManager.textarea = function(_self, e) { function Post(textarea) { textarea.attr("readOnly", true); textarea.css({"color":'#555', "background":'none', 'cursor':'pointer'}); } function Quest(folder, textarea, oldvalue) { if (confirm("Текст был изменен. Сохранить?")) {FileManager.changeDesc(folder, textarea.parent().parent(), textarea.val());} else {textarea.val(oldvalue);} Post(textarea); } if (_self.fm_init != true) { _self.fm_init = true; _self.selectionEnd = FileManager.curetPos; _self.selectionStart = _self.selectionEnd; $(_self).one("focus", function() { _self.fm_old = $(_self).val(); _self.fm_key = false; $(_self).removeAttr("readOnly"); // readOnly нужен для принятия решения при нажатии DEL //$(this).attr("enabled", true); $(_self).css({"color":'#000', "background":'#ffffff', 'cursor':'default'}); $(_self).attr("title",'для сохранения нажмите [Ctrl-S], для отмены [ESC]'); $(_self).one("blur", function() { _self.fm_init = false; $(_self).die(); // !!! if ((_self.fm_key === false) && (_self.fm_old != $(_self).val())) {window.setTimeout(function(f, t, v){ Quest(f, t, v)}, 25, FileManager.folder, $(_self), _self.fm_old);} else {Post($(_self))} }) }) // focus $(_self).keypress(function(e) { if (e.ctrlKey && (e.keyCode == 83)) { e.preventDefault(); // что б не было окна Save //e.stopPropagation(); FileManager.changeDesc(FileManager.folder, $(_self).parent().parent(), $(_self).val()); _self.fm_key = true; $(_self).blur(); return false; } }); $(_self).keydown(function(e) { if (e.ctrlKey && (e.keyCode == 83)) { //e.preventDefault(); window.setTimeout(function(f, a, v){FileManager.changeDesc(f, a, v)}, 25, FileManager.folder, $(_self).parent().parent(), $(_self).val()); _self.fm_key = true; $(_self).blur(); return false; } if (e.keyCode == 27) // ESC keypress not work in Chrome { $(_self).val(_self.fm_old); _self.fm_key = true; $(_self).blur(); return false; } }); $(_self).focus(); } } /* settings */ FileManager.absolute_path_change = function() { if (this.settings.absolute_path.state == false) { this.url = '/'; } else { this.url = this.fullurl; } this.makeCode(); } FileManager.FM_settings_save = function($panel, button) { $.ajax( { url :this.__fm ,data :{mode: 'changedesc', folder: this.root + this.DS, filename: '/settings/', desc: $.toJSON(this.settings)} ,async :false ,error :this.error ,success :function(json) { if (json.error) { alert(json.error); return; } $panel.slideUp('fast'); $("#FM-settings").toggleClass("active"); //alert($("#"+button.id).attr("class")); //alert(button.id); } }); } FileManager.FM_tasks_apply = function($panel, button) { $(button).parent().children('table').children('tbody').children().each(function (i) // список TR { var type = this.className; // - connect, parent, owner - автоматически меняется в this.tasks tds = $(this).children(); var items = ['0', '1', 'max', 'width', 'height', 'crop', 'rotate', 'watermark']; var st = ''; var name = $(tds[1]).html(); for(var i=2; i<8; i++) { //st+=names[i]+' '; //FileManager.tasks[name][items[i]] = $(tds[i]).children()[0].value; // input } // пока только мах FileManager.tasks[name][items[2]] = $(tds[2]).children()[0].value; /* $(this).children().each(function(i) // список TH, TD { // 0 - setConnect // 1 - config-name // ... // 8 - state st+=i+'='+this.className+'; '; }); */ //log(st); }); } FileManager.FM_tasks_save = function($panel, button) { var forsave = {}; for(var i in this.tasks) { if (this.tasks[i].type != 'parent') { forsave[i] = this.tasks[i]; } } $.ajax( { url :this.__fm ,data :{mode: 'changedesc', folder: this.folder, filename: '/tasks/', desc: $.toJSON(forsave)} ,async :false ,error :this.error ,success :function(json) { if (json.error) { alert(json.error); return; } $panel.slideUp('fast'); $(button).toggleClass("active"); } }); } FileManager.makeItemPanel = function(idpanel) { var disabled; function setType(type) { switch (type) { case 'parent': return '<a class="fm-button title="подключить"><span></span></a>'; case 'connect': return '<a class="fm-button title="отключить"><span></span></a>'; default: return ''; // owner } } $(idpanel+" tbody").empty(); var namearr = idpanel.replace(/#FM-([A-Za-z]*)-panel/,'$1'); var arr = this[namearr]; // мы работаем со ссылкой var st=''; for(var i in arr) // {type: "owner", state: true} { var t = arr[i]; if (t.type == 'parent') disabled = ' disabled'; else disabled = ''; st+='<tr class="'+t.type+'" title="'+namearr+'"><th class="setConnect" title="'+i+'">'+setType(t.type)+'</th><td class="config-name">'+t.name+'</td>'; for(var e in t) { if ((e != 'type') && (e != 'name') && (e != 'state')) { //st+='<td>'+t[e]+'</td>'; st+='<td><input type="text" value="'+t[e]+'" autocomplete="off"'+disabled+' /></td>'; } } var title = ''; if (t.type == 'parent') { title = 'изменение этой опции, будет выполняться, только пока Вы находитесь в этом каталоге, и действовать при переходе в подчинённые каталоги'; } st+='<th class="state" title="'+i+'"><a class="fm-button '+t.state+'" title="'+title+'"><span></span></a></th></tr>'; } $(idpanel+" tbody").append(st); } FileManager.save_splitter = function() { Storage.put('splitter', $.toJSON({width:{'#FM-LP':this.$FM_LP.width(), '#FM-RP': this.$FM_RP.width()}, height: {'#FM-LT': this.$FM_LT.height(), '#FM-LB': this.$FM_LB.height()}})); } /*==============================================================================================================*/ FileManager.setSizePreview = function() { var inline = false; if ($("#FM-preview-image").css("display") == 'inline') { inline = true; $("#FM-preview-image").hide(0); } $("#FM-lightbox").width($("#FM-preview").width()); $("#FM-lightbox").height(Math.ceil($("#FM-lightbox").width()/3 * 2)); // 3 x 2 if (inline == true) { this.previewResize(this.folder); } } FileManager.resize = function() { if (this.$FM.css("display") == 'none') { return; } this.$FM.hide(0); var WH = this.$w.height(); var WW = this.$w.width(); this.$FM .height(WH-parseInt(this.$FM.css('padding-top'))-parseInt(this.$FM.css('padding-bottom'))) .width(WW-parseInt(this.$FM.css('padding-left'))-parseInt(this.$FM.css('padding-right'))); this.$FM.show(0); var FM = this.$FM.height(); var FMP = $("#FM-menu").outerHeight(); var FMB = $("#FM-buf").outerHeight(); var FMI = $("#FM-info").outerHeight(); var FML = 0; if (this.debug == true) { FML = $("#FM-log").height(); } h = FM - (FMP + FMB + FMI + FML + 4); // 4 - borders // log(FM+' '+FMP+' '+FMB+' '+FMI +' '+FML+' '); this.$FM_LP.height(h); this.$FM_VS.height(h); var w = this.$FM.width() - this.$FM_VS.width() - parseInt(this.$FM_RP.css('margin-left')); var koffW= w / (this.$FM_LP.width() + this.$FM_RP.width()); var Lw = parseInt(koffW * this.$FM_LP.width()); this.$FM_LP.width(Lw); this.$FM_VS.css('left', Lw); this.$FM_RP.height(h).width(w - Lw); $("#FM-buf").width(this.$FM.width() - 6); h = h - this.$FM_HS.height() - 2 - 4; var koffH = h / (this.$FM_LT.height() + this.$FM_LB.height()); var Th = parseInt(koffH * this.$FM_LT.height()); this.$FM_LT.height(Th); this.$FM_HS.css('top', Th + 2 + 4); this.$FM_LB.height(h - Th); this.setSizePreview(); var p = $("#FileManager-buffer").offset(); $("#FM-panel-code").css({top: p.top - $("#FM-panel-code").height(), right:parseInt(this.$FM.css('padding-right')) + 24}); w = 0; $("#FM-menu").children().each(function (i) { // log(i + ' '+this.id); w = w+ $(this).outerWidth(); }); // log(w); $("#FM-path").width($("#FM-menu").innerWidth() - w + $("#FM-path").width() - 26); } /*==============================================================================================================*/ /*==============================================================================================================*/ $(function() { FileManager.load = true; $("#container").hide(0); /* CSS */ if ($.browser.mozilla === true) { $("#FM-editfoldername").css({"height":'15px', "padding-top":'3px'}); $("#FM-editfilename").css({"height":'15px', "padding-top":'3px'}); } if ($.browser.opera === true) { $("#FM-editfoldername").css({"height":'17px', "padding":'0 0 1px 3px', "vertical-align":'super'}); $("#FM-editfilename").css({"height":'17px', "padding":'0 0 1px 0', "vertical-align":'super'}); } $("#FM-lightbox").prependTo("#FM-preview").css("display", 'table-cell'); FileManager.$w = $(window); FileManager.$FM = $("#FM"); FileManager.$FM_LP = $("#FM-LP"); // левая панель FileManager.$FM_RP = $("#FM-RP"); // правая панель FileManager.$FM_VS = $("#FM-VS"); // вертикальный сплиттер между левой (FM-LP) и правой (FM-RP) панелями FileManager.$FM_HS = $("#FM-HS"); // горизонтальный сплиттер между FM-LT (верхней) и FM-LB (нижней) панелями FileManager.$FM_LT = $("#FM-LT"); // левая панель, верхняя часть (tree) FileManager.$FM_LB = $("#FM-LB"); // левая панель, нижняя часть (preview) FileManager.$FM.show(0); Storage.swfUrl = FileManager.fm + "swf/storage.swf"; Storage.init(function() { /* splitter */ data = $.parseJSON(Storage.get('splitter')); for(var css in data) { var i = data[css]; for(var name in i) { if (i[name] > 0){$(name)[css](i[name]);} } } FileManager.resize(); FileManager.$w.resize(function(){FileManager.resize();}); }); //if (!Storage.active) // { // alert('File-manager: Ошибка, вероятно у Вас не установлен или отключен Flash-плагин. Не будет работать загрузка файлов и сохранение положений сплиттеров.'); // } /* first resize */ function vSplit(_self) { var S = parseInt(FileManager.$FM_VS.css('left')) - _self.start; var minLW = 30; if ((_self.Lw+S) < minLW) { S = minLW - _self.Lw; FileManager.$FM_VS.css('left', S + _self.start); } var minRW = 100; if ((_self.Rw-S) < minRW) { S = _self.Rw - minRW; FileManager.$FM_VS.css('left', S + _self.start); } FileManager.$FM_LP.width(_self.Lw+S); FileManager.$FM_RP.width(_self.Rw-S); } FileManager.$FM_VS .draggable( { axis:'x' ,cursor:'e-resize' //,refreshPositions:true //,grid:[16] }) .bind('dragstart', function(event, ui) { this.Lw = FileManager.$FM_LP[0].clientWidth; this.Rw = FileManager.$FM_RP[0].clientWidth; this.start = this.Lw; }) .bind('drag', function(event, ui){vSplit(this);}) .bind('dragstop', function(event, ui) { vSplit(this); FileManager.setSizePreview(); FileManager.save_splitter(); } ); function hSplit(_self) { var S = parseInt(FileManager.$FM_HS.css('top')) - _self.Th - 6; // margin-top:4px; FileManager.$FM_LT.height(_self.Th + S); FileManager.$FM_LB.height(_self.Bh - S); } FileManager.$FM_HS .draggable( { axis:'y' ,cursor:'n-resize' ,refreshPositions:true ,grid:[16, 16] }) .bind('dragstart', function(event, ui) { this.Th = FileManager.$FM_LT.height(); this.Bh = FileManager.$FM_LB.height(); }) .bind('drag', function(){hSplit(this);}) .bind('dragstop', function() { hSplit(this); FileManager.setSizePreview(); FileManager.save_splitter(); } ); /* close FileManager */ $("#FM-close").mousedown(function(e) { if (e.button === 0) { $("div.fm-panel").hide(0); $("a.fm-button").removeClass('active'); //$("#FM-swfupload").css("position",'absolute').appendTo("body"); FileManager.$FM.hide(0); $("#FM-loading").hide(0); $("#container").show(0); //$("#FM-loader").slideDown(0); return false; } }); /* ========================================= */ $.ajaxSetup( { dataType :'json' // если будет неправильный разбор json свалимся в error ,global :false ,async :true // default ,cache :false ,type :'POST' ,timeout :20000 // 20 sec } ); /* set settings */ if (loader.settings) { delete loader.settings['confirm_file_rename']; // удаление старой переменной for(var i in loader.settings) { FileManager.settings[i] = FileManager.cloneObject(loader.settings[i]); } } FileManager.absolute_path_change(); /* DREM textarea */ FileManager.$FM_RP .click(function(e) { if (e.target.nodeName == 'TEXTAREA') { var ta = e.target; if (ta.selectionStart == ta.selectionEnd) { FileManager.curetPos = ta.selectionStart; } if (ta.fm_init != true) { if (FileManager.settings.click_description.state == true) {FileManager.textarea(ta, e)} else {ta.blur()} } } }) .dblclick(function(e) { if (e.target.nodeName == 'TEXTAREA') { var ta = e.target; if ((FileManager.settings.click_description.state == false) && (ta.fm_init != true)) {FileManager.textarea(ta, e)} } }); /* навигация по каталогам **************************************/ $("ul.FM-tree li").live("mousedown",function(e) { if ($(this).hasClass('wait')){return} if ((!e.button) || ((e.button == 0) && (e.ctrlKey === false) && (e.altKey === false) && (e.shiftKey === false))) { if ((e.target.tagName == "A") || (e.target.tagName == "ABBR") || ((e.target.tagName == "LI") && (!$(this).hasClass('__L')))) // A || ABBR in CSS display:block !!! { var pcur = FileManager.cur; if (FileManager.setCur($(this).children()[0]) == true) { // удалить элементы массива от FileManager.historyID (включительно) до конца if (FileManager.history.length > 0) { FileManager.history.splice(FileManager.historyID, FileManager.history.length - FileManager.historyID); $("#FM-next").addClass('disable'); } FileManager.history.push(pcur); FileManager.historyID = FileManager.history.length; $("#FM-prev").removeClass('disable'); FileManager.loadData(FileManager.folder, $(this), true); return false; } } // открытие - закрытие папок if (e.target.tagName == "LI") { if ($(this).hasClass('__E')) { $(this).removeClass('__E').addClass('__C'); $($(this).children()[1]).hide(); return false; } if ($(this).hasClass('__L')) { $(this).removeClass('__C').addClass('__E'); $($(this).children()[1]).show(); return false; } } } } ); /* PREV */ $("#FM-prev").mousedown(function() { if ($("#FM-prev").hasClass('disable')){return;} var a = FileManager.history[FileManager.historyID-1]; var pcur = FileManager.cur; if (FileManager.setCur(a) == true) { if (FileManager.historyID == FileManager.history.length) { FileManager.history.push(pcur); } FileManager.historyID--; if (FileManager.historyID == 0) { $("#FM-prev").addClass('disable'); } $("#FM-next").removeClass('disable'); FileManager.loadData(FileManager.folder, $(a).parent(), true); return false; } }); /* NEXT */ $("#FM-next").mousedown(function() { if ($("#FM-next").hasClass('disable')){return;} var a = FileManager.history[FileManager.historyID+1]; if (FileManager.setCur(a) == true) { FileManager.historyID++; if (FileManager.historyID == FileManager.history.length -1) { FileManager.history.pop(); $("#FM-next").addClass('disable'); } $("#FM-prev").removeClass('disable'); FileManager.loadData(FileManager.folder, $(a).parent(), true); return false; } }); /* создание корня */ //$("#FM-tree").html(FileManager.makeTreeItem('root', 'root', false, false)); $("#FM-tree").html(FileManager.makeTreeItem(FileManager.root, FileManager.root, false, false)); FileManager.setCur($("#FM-tree a")[0]); FileManager.setData($("#FM-tree li"), loader); FileManager.showFiles(loader.folder); //delete loader; /* имитиция root open */ //$("#FM-tree abbr").mousedown(); /* new, rename folder */ $("#FM-editfoldername").FMeditor( { activator : $("#FM-tree .rename, #FM-tree .new") ,before : function(activator) { //if ($(this).hasClass('disable') == true){return;} if (activator.hasClass('new') === true) { if (!$(FileManager.cur).parent().hasClass('__L')) { alert('Нельзя создать подкаталог, каталог не был загружен...'); return false; } var UL = activator.parent().next().prepend(FileManager.makeTreeItem('', 'New folder', true, true)); var LI0 = $(UL.children()[0]); LI0.attr("id",'FM-EFN'); $(LI0.children()[0]).after($("#FM-editfoldername")); //FileManager.editfoldername } if (activator.hasClass('rename') === true) { activator.parent().after($("#FM-editfoldername")); } FileManager.lockUI(true); return true; } ,setText : function(activator) { if (activator.hasClass('rename') === true){return activator.parent().children("abbr")} // return element TEXT if (activator.hasClass('new') === true){return $("#FM-editfoldername").prev().children("abbr")} } ,setContainer : function(activator) { if (activator.hasClass('rename') === true){return activator.parent()} // контейнер if (activator.hasClass('new') === true){return $("#FM-editfoldername").prev()} } ,afterstart : function(activator, text, cont) { if (activator.hasClass('new') === true){text.html('')} cont.next().next().removeClass('FM-tree').addClass('FM-tree-lock'); } ,callback : function(activator, oldname, newname, a, post, error) { $(FileManager.cur).parent().addClass('wait'); $(document).css("cursor",'wait'); $.ajax( { url :FileManager.__fm ,data :{mode:activator.attr("class")+'folder', folder:FileManager.folder, newname:newname, oldname:oldname, 'tasklist[]':FileManager.getTaskList()} ,async :false ,error :FileManager.error ,success :function(json) { $(FileManager.cur).parent().removeClass('wait'); // это не правильно, найти li отдельно для error, new & rename if (json.error) { alert(json.error); error(); } else { post(json.newname); $("#FM-editfoldername").appendTo(FileManager.$FM[0]); if (activator.attr("class") == 'rename') { $("#FM-path").html(FileManager.FCPATH + json.folder); FileManager.removeTreeItems(a.parent()); a.attr("rel", json.folder); FileManager.folder = json.folder; FileManager.setData(a.parent(), json); FileManager.clearPreview(); //$('#FM-list').empty(); /* по не вышел jQuery 1.4 */ document.getElementById('FM-RP').removeChild(document.getElementById('FM-list')); FileManager.showFiles(json.folder); } // при создании нового каталога, мы остаёмся в родительском if (activator.attr("class") == 'new') { a.parent().removeAttr("id"); a.attr("rel", json.folder); FileManager.setData(a.parent(), json); } } } }); } ,cancel :function(activator) { $("#FM-editfoldername").appendTo(FileManager.$FM[0]); if (activator.hasClass('rename') === true){} if (activator.hasClass('new') === true) { $("#FM-EFN").remove(); // old remove } } ,after :function(cont) { //cont.next().next().removeClass('FM-tree-lock').addClass('FM-tree'); FileManager.lockUI(false); } }); /* !!! $("a.fm-button") .mousedown(function(e) { if ((e.button === 0) && (this.id != 'FM-close')) { $(this).addClass("down"); } }) .mouseup(function() { $(this).removeClass("down"); } ); */ /* refresh folder */ $("#FM-refresh").mousedown(function(e) { if (e.button != 0){return;} if ($(this).hasClass("active")){return;} $(this).addClass("active"); var MTL = $(FileManager.cur).parent(); FileManager.removeTreeItems(MTL); FileManager.clearPreview(); //$("#FM-list").empty(); /* по не вышел jQuery 1.4 */ document.getElementById('FM-RP').removeChild(document.getElementById('FM-list')); FileManager.loadData(FileManager.folder, MTL, true, true); } ); /* delete folder */ $("ul.FM-tree .delete").live("mousedown", function(e) { if (e.button != 0){return;} log('span '+e.target.className); if ($(this).hasClass('disable') == true){return;} var mode = e.target.className; var MTL = $(FileManager.cur).parent(); var folder = FileManager.folder; if (mode == 'delete') { if (confirm("Удалить каталог '"+folder+"' и всё содержимое?")) { $(MTL).addClass('wait'); $.ajax( { url :FileManager.__fm ,data :{mode:'deletefolder', folder: folder} ,error :FileManager.error ,success :function(json) { if (json.error) { $(MTL).removeClass('wait'); alert(json.error); return; } if (confirm("УДАЛЯЕМ ?\n\n"+json.list)) { $.ajax( { url :FileManager.__fm ,data :{mode:'deletefolder', folder: folder, command:'run'} ,error :FileManager.error ,success :function(json) { if (json.error) { $(MTL).removeClass('wait'); alert(json.error); return; } if (json.list == true) { var item; if ($(MTL).next().length > 0) {item = $(MTL).next()} else { if ($(MTL).prev().length > 0) {item = $(MTL).prev()} else {item = $(MTL).parent().parent()} } FileManager.removeTreeItems(MTL); $(MTL).remove(); // // old empty old remove $("#FileManager-buffer").val(''); /* MTL - больше нет !!! */ FileManager.setCur(item.children()[0]); FileManager.loadData(FileManager.folder, $(FileManager.cur).parent(), true); /* так как может быть не загружен */ } else {alert('что-то пошло не так, json.list != true')} } }); } else {$(MTL).removeClass('wait')} } }); } } return false; // no mousedown .FM-tree li }); /* rename file */ $("#FM-editfilename").FMeditor( { activator : $("#FM-preview-filename") ,before : function(activator) { FileManager.lockUI(true); $("#FM-editfilename").width($("#FM-preview").width() - 4); // 2 - border + margin FM-editfilename return true; } ,callback : function(activator, oldname, newname, container, post, error) { $("#FM-lightbox").mousedown(function(){return false;}); $(FileManager.cur).parent().addClass('wait'); $.ajax( { url :FileManager.__fm ,data :{mode:'renamefile', folder:FileManager.folder, newname:newname, oldname:oldname, 'tasklist[]':FileManager.getTaskList()} ,async :false ,error :FileManager.error ,success :function(json) { $("#FM-lightbox").die('mousedown'); $(FileManager.cur).parent().removeClass('wait'); FileManager.lockUI(false); if (json.error) { alert(json.error); error(); return; } post(json.newname); delete FileManager.dir[json.folder][json.oldname]; FileManager.dir[json.folder][json.newname] = json.file; FileManager.refreshFile(json.folder, json.oldname, json.newname); delete FileManager.selected[$.inArray(json.oldname, FileManager.selected)]; FileManager.selected.push(json.newname); FileManager.makeCode(); } }); } ,after :function(cont) { FileManager.lockUI(false); } }); /* delete file(s) */ FileManager.$w.keydown(function(e) { if ( (e.keyCode == 46) && FileManager.selected.length && ($("#FM-editfilename").css('display') == 'none') && ($("#FM-editfoldername").css('display') == 'none') && ($("div.DREM textarea").not("[readOnly]").length == 0) ) // del { FileManager.deleteFiles(); return false; } }); /* SELECT FILE */ //$(".FMA-T, .FMA-D, .FMA-L").live('click',function(e){e.preventDefault();e.stopPropagation();return false;}); $("#FM-list .FMA-T, #FM-list .FMA-D, #FM-list .FMA-L").live('mousedown',function(e) { if ((e.button === 0) && !$(this).hasClass('FMH')) // FMH - заголовок списка { // e.preventDefault(); // e.stopPropagation(); if ($("#FM-editfilename").css('display') != 'none'){return true} FileManager.selectFile(e, this); // return false; // принимает textarea } } ); /* E2 = []; $("#FM-RP").bind("mousedown", function(e) { E2.push(e); if (e.target.parentNode.nodeName == 'A') { if ($("#FM-editfilename").css('display') != 'none'){return;} FileManager.selectFile(e, $(e.target.parentNode)); } }); */ /* режимы списка */ $("#FMA-T, #FMA-D, #FMA-L").mousedown(function() { $("#"+FileManager.typeList).removeClass("select"); $(this).addClass("select"); $("a."+FileManager.typeList).removeClass(FileManager.typeList).addClass(this.id); FileManager.typeList = this.id; return false; }); /* режимы кода */ $("#FML-A, #FML-H, #FML-B, #FML-G").mousedown(function() { $("#"+FileManager.typeCode).removeClass("select"); $(this).addClass("select"); $("a."+FileManager.typeCode).removeClass(FileManager.typeCode).addClass(this.id); FileManager.typeCode = this.id; FileManager.makeCode(FileManager.folder); }); $("#FileManager-buffer").click(function() { $(this).select(); //$(this).blur(); return false; } ); /* настройки =========================================*/ // открытие панели $("#FM-settings, #FM-tasks").mousedown(function() { $("div.fm-panel:visible").slideUp(0); $("a.active:not(#"+this.id+")").toggleClass("active"); $(this).toggleClass("active"); if ($(this).hasClass('active')) { var idpanel = "#"+this.id+"-panel"; var p = $(this).offset(); FileManager.makeItemPanel(idpanel); $(idpanel).fadeTo(0, 1).css({"top":p.top + $(this).height() + 10, "left":p.left - $(idpanel).width() + $(this).width()}).slideDown('fast'); } return false; }); /* $("a.fm-button-save").mousedown(function() { //var panel = $(this).parent(); $("div.fm-panel:visible").slideUp('fast'); $("a.active").toggleClass("active"); if ($.isFunction(FileManager[this.id])) { FileManager[this.id](); } else { alert('Функция '+this.id+' не определена см. a.fm-button-save'); } return false; }); */ $(".fm-panel > div > a").mousedown(function() // кнопки на fm-panel: APPLY, SAVE { if ($.isFunction(FileManager[this.id])) { FileManager[this.id]($(this).parent().parent(), this); } else { alert('Функция '+this.id+' не определена см. a.fm-button-save'); } return false; }); $("div.fm-panel th.setConnect a").live("mousedown",function() { var td = $(this).parent(); var tr = td.parent(); var arr = tr.attr('title'); var i = td.attr('title'); //alert(name); var type=''; if (FileManager[arr][i].type == 'parent') { tr.removeClass('parent').addClass('connect'); type = 'connect'; tr.children("td").children("input").removeAttr("disabled"); } if (FileManager[arr][i].type == 'connect') { tr.removeClass('connect').addClass('parent'); type = 'parent'; tr.children("td").children("input").attr("disabled", true); } FileManager[arr][i].type = type; return false; }); $("div.fm-panel th.state a").live("mousedown",function() { if($(this).hasClass('false')) $(this).removeClass('false').addClass('true'); else $(this).removeClass('true').addClass('false'); var arr = FileManager[$(this).parent().parent().attr('title')][$(this).parent().attr('title')].state = $(this).hasClass('true') ? true : false; var f_opt = $(this).parent().attr('title')+'_change'; /* определенна функция для опции */ if ($.isFunction(FileManager[f_opt])) { FileManager[f_opt](); } var f_panel = $(this).parent().parent().attr('title')+'_change'; /* определенна функция для панели */ if ($.isFunction(FileManager[f_panel])) { FileManager[f_panel]($(this).parent().attr('title')); } return false; }); /* $("div.fm-panel > input").change(function() { log('change'); }); $(":input").keydown(function() { log('keydown'); }); $("tr").keydown(function() { log('keydown tr'); }); $("div.fm-panel table").keydown(function(e) { if ((e.target.nodeName == "INPUT") && (e.target.type == "text")) { EE = e; //var v = String.fromCharCode(e.keyCode); //v.replace(/(\d?)/gm,'$1')); //alert(); //log('keydown = '+e.target.value); //e.target.value = e.target.value;.replace(/\d?/gm) } }); */ /* запрет выделения */ preventSelection($("#FM-settings-panel").get(0)); preventSelection($("#FM-tasks-panel").get(0)); preventSelection($("#FileManager-datatree").get(0)); preventSelection(FileManager.$FM_RP[0]); preventSelection($("#FM-panel-code").get(0)); }); /* $.ajax(options) async - логический тип, по умолчанию true, т.е все запросы отсылаются асинхронно. В случае false - отправка осуществляется синхронно, синхронные запросы могут на время выполнения запроса заблокировать браузер. beforeSend - может содержать функцию, которая должна быть вызвана до передачи запроса. Функция Ajax Event. cache - логический тип, по умолчанию true. Если установить в false, запрашиваемая страница не будет кэшироваться браузером. complete - функция, которая исполняется после завершения запроса AJAX. Функция Ajax Event. contentType - при передаче данных серверу сообщает content-type. По умолчанию - application/x-www-form-urlencoded. data - данные, которые передаются на сервер. Если данные не являются строкой, то они конвертируются в строку запроса. Для запросов типа GET данные прикрепляются к URL. Объект должен состоять из пар ключ/значение. Если в значении массив, то jQuery упорядочивает значения, принадлежащие одному ключу, например, {foo:["bar1", "bar2"]} превращается в &foo=bar1&foo=bar2. dataType - тип данных, ожидаемых от сервера. Если опция не определена, то jQuery попытается определить тип, основываясь на MIME-типе ответа сервера. Доступные типы - xml, html, script, text, json (расценивает ответ как данные в формате JSON и возвращает JavaScript объект), jsonp (загружает данные в формате JSON используя JSONP, необходимо дополнительно добавить "?callback=?" в конец строки запроса в URL, чтобы определить вызов). error - функция, исполняемая в случае неудачного запроса. global - логический тип, по умолчанию true. Вызывать или нет глобальные обработчики событий Ajax для этого запроса (например ajaxStart или ajaxStop). ifModified - логический тип, по умолчанию false, запрос будет успешным только в случае, если данные ответа изменились со времени последнего запроса. username - имя пользователя, которое будет использовано для HTTP запроса авторизации. password - пароль, который будет использован для HTTP запроса авторизации. processData - логический тип, по умолчанию true. В опции data данные представлены в виде объекта, который преобразуется в строку запроса, подходящую для content-type по умолчанию - "application/x-www-form-urlencoded". Если требуется дугое, нужно установить processData в false. success - функция, которая будет вызвана в случае успешного завершения запроса timeout - устанавливает локальное время ожидания для запроса в мс. type - тип запроса - POST либо GET. По умолчанию - GET. url - url запроса. По умолчанию - текущая страница. */