Файловый менеджер - Редактировать - /home/lmsyaran/public_html/media/com_easyblog/scripts_/media/browser.js
Назад
// module: start EasyBlog.module("media/browser", function($) { var module = this; // require: start EasyBlog.require() .library( "image", "easing", "scrollTo", "throttle-debounce" ) .script( "media/browser.item" ) // .view( // "media/browser", // "media/browser.itemGroup", // "media/browser.item", // "media/browser.treeItemGroup", // "media/browser.treeItem", // "media/browser.paginationPage" // ) // .language( // 'COM_EASYBLOG_MM_CONFIRM_DELETE_ITEM', // 'COM_EASYBLOG_MM_CANCEL_BUTTON', // 'COM_EASYBLOG_MM_YES_BUTTON', // 'COM_EASYBLOG_MM_ITEM_DELETE_CONFIRMATION' // ) .done(function(){ var $Media, $Library, $Browser, $Uploader, $Prompt, DS; // controller: start EasyBlog.Controller("Media.Browser", // Class properties { defaultOptions: { view: { browser : "media/browser", itemGroup : "media/browser.item-group", item : "media/browser.item", treeItemGroup : "media/browser.tree-item-group", treeItem : "media/browser.tree-item", paginationPage : "media/browser.pagination-page" }, path: "", items: undefined, mode: "browse", layout: { viewMode: "tile", tileSize: 0.125, scrollToItemDuration: 500, scrollToItemEasing: 'swing', iconMaxLoadThread: 8 }, search: { chunkSize: 128, chunkDelay: 500 }, "{modalHeader}" : ".modalHeader", "{modalToolbar}" : ".modalToolbar", "{modalContent}" : ".modalContent", "{modalFooter}" : ".modalFooter", "{modalPrompt}" : ".modalPrompt", // Also shared with folder hint's .uploaderButton "{modalUploaderButton}" : ".uploaderButton", "{header}" : ".browserHeader", "{content}" : ".browserContent", "{footer}" : ".browserFooter", "{treeToggleButton}": ".browserTreeToggleButton", "{tileViewButton}" : ".browserTileViewButton", "{listViewButton}" : ".browserListViewButton", "{itemField}" : ".browserItemField", "{itemGroup}" : ".browserItemGroup", "{item}" : ".browserItem", "{treeItemField}" : ".browserTreeItemField", "{treeItemGroup}" : ".browserTreeItemGroup", "{treeItem}" : ".browserTreeItem", "{headerTitle}" : ".browserTitle", "{headerSearch}" : ".browserSearch", "{headerNavigation}": ".browserNavigation", "{headerUpload}" : ".browserUploadButton", "{footerStatus}" : ".browserStatus", "{footerMessage}" : ".browserMessage", "{itemActionSet}": ".browserItemActionSet", "{itemFieldHints}": ".browserItemField .hints", "{browserPagination}" : ".browserPagination", "{currentPage}" : ".currentPage", "{totalPage}" : ".totalPage", "{prevPageButton}" : ".prevPageButton", "{nextPageButton}" : ".nextPageButton", "{pageSelection}" : ".pageSelection", "{paginationPage}" : ".paginationPage", "{searchInput}" : ".searchInput" } }, // Instance properties function(self) { return { init: function() { // Globals $Media = self.media; $Library = $Media.library; $Browser = $Media.browser = self; DS = $Media.options.directorySeparator; self.iconThread = $.Threads({threadLimit: self.options.layout.iconMaxLoadThread}); self.enqueue = $.Enqueue(); // Render browser UI self.element .addClass("browser") .html( self.view.browser() ); // Browser navigation self.headerNavigation() .implement( EasyBlog.Controller.Media.Navigation, { controller: self.controllerProps() }, function() { // Assign controller as a property of myself self.navigation = this; } ); self.modalPrompt() .implement( EasyBlog.Controller.Media.Prompt, { controller: self.controllerProps() }, function() { $Prompt = self.promptDialog = this; } ); // Implement browser actions self.element .implement( EasyBlog.Controller.Media.Browser.Actions, { controller: self.controllerProps() }, function() { self.actions = this; } ); self.search = $.debounce(500, self._search); // Set to browse mode self.mode("browse"); // Always revert to browser mode when going back to dashboard $Media.element.bind("hideModal", function(){ self.mode("browse"); }); // Set browser layout self.viewMode(self.options.layout.viewMode); self.setLayout(); // Bind item group scroll event self._bind( self.itemField(), "scroll", $.debounce(250, self["{itemField} scroll"]) ); // Create all places $.each($Library.places, function(id, place) { self.createPlace(place); }); // Determine which place is the initial place, // if no intial place was given, automatically select // the first place on the list. self.activatePlace(self.options.initialPlace || $Library.places[0].id) .done( self.enqueue(function(place){ self.activateItem(place.baseFolder()); }) ); }, controllerProps: function(prop) { return $.extend( { media: $Media }, prop || {}); }, items: {}, createPlace: function(place) { var place = $Library.getPlace(place); place.treeItemGroup = self.view.treeItemGroup() .appendTo(self.treeItemField()); place.treeItem = self.view.treeItem({title: place.title}) .addClass("type-place") .data("place", place) .appendTo(place.treeItemGroup); place.itemGroup = self.view.itemGroup() .appendTo(self.itemField()); return place; }, activatePlace: function(place) { var place = $Library.getPlace(place); if (place===undefined) return; // Toggle active class on item group self.itemGroup().removeClass("active"); place.itemGroup.addClass("active"); // Toggle active class on item tree self.treeItem().removeClass("active"); place.treeItem.addClass("active"); // Create the activator task if (!place.activator) { place.activator = $.Deferred(); } // If flickr is not authenticated yet if (place.id==="flickr" && !place.options.associated) { // Show the flickr login prompt $Browser.currentFolderStatus("flickr"); return place.activator; } if (!place.populated) { // Mark as populated so this doesn't run again place.populated = true; // Add busy indicator self.currentFolderStatus("loading"); var populator = /jomsocial|flickr/.test(place.id) ? place.populate() : place.ready; populator .done(function() { // Create base folder var baseFolderItem = self.createFolder(place.baseFolder()); place.activator.resolveWith(place, [place, baseFolderItem]); }) .fail(function() { self.currentFolderStatus("error"); place.activator.rejectWith(place, arguments); }); } return place.activator; }, getItem: function(item) { // Skip going through all the tests below. if (item===undefined) return; // Item instance if (item instanceof EasyBlog.Controller.Media.Browser.Item) { return item; } // Item key if (typeof item === "string") { return self.items[item]; } // Meta if ($Library.isMeta(item)) { return self.items[$Library.getKey(item)]; } }, createItem: function(meta, options) { var meta = $Library.getMeta(meta); if (!meta) return; // Create item, store to item map, return item. return self.items[meta.key] = new EasyBlog.Controller.Media.Browser.Item( self.view.item({meta: meta}), { controller: { key: meta.key, media: $Media } } ); }, createFolder: function(meta, options) { var meta = $Library.getMeta(meta); return self.getItem(meta) || (function(){ // Create & insert item var item = self.createItem(meta); var place = item.place(), parentFolder = item.parentFolder(); ((parentFolder) ? item.element .insertAfter(parentFolder.element) : item.element .appendTo(place.itemGroup)); // Create & insert tree item item.treeItem = ((parentFolder) ? self.view.treeItem({title: meta.title}) .addClass("type-folder") .css("marginLeft", 18 * (meta.path.split(DS).length - 1)) .insertAfter(parentFolder.treeItem) : place.treeItem // Store a reference to the item ).data("item", item); // Listen to the subfolder for changes meta.data.views .create({group: "folders"}) .updated(function(folders){ $.each(folders, function(i, key) { self.createFolder(key); }); }); return item; })(); }, createFile: function(meta, options) { var meta = $Library.getMeta(meta); return self.getItem(meta) || self.createItem(meta); }, removeItem: function(item) { clearTimeout(self.removeItem.revert); var item = self.getItem(item), parentFolder = item.parentFolder(); // Remove item element & handler item.remove(); // Remove treeItem if it exists if (item.treeItem) { item.treeItem.remove(); } // Delete from entry delete self.items[item.key]; // Don't revert if searching if (self.itemField().hasClass("searching")) return; self.removeItem.revert = setTimeout(function(){ if (parentFolder) { self.activateItem(parentFolder); } }, 500); }, focusItem: function(item, alsoActivate) { var item = self.getItem(item); // If item does not exist, skip. if (!item) return; if (!alsoActivate) { // Set item as current item self.currentItem(item); // Remove the active class because // we just want to focus it, not activate it. item.element.removeClass("active"); } else { self.activateItem(item); } self.scrollTo(item); self.trigger("itemFocus", [item]); }, locateItem: function(meta) { if (self.itemField().hasClass("searching")) { self.clearSearch(true); } var meta = $Library.getMeta(meta); if (!meta) return; self.activatePlace(meta.place) .done( self.enqueue(function() { var isFolder = meta.type==="folder", item = self.activateItem((isFolder) ? meta : meta.parentKey); if (item===undefined) return; if (!isFolder) { item.handler.locateItem(meta); } // Quick monkey patch var folderView = item.handler.folderView; if (folderView) { folderView.refresh(); } }) ); }, activateItem: function(item) { var item = self.getItem(item); // If item does not exist, skip. if (!item) return; // Set item as current item self.currentItem(item); // Activating an item will trigger its handler, e.g. // for folders it will generate items inside it. item.activate(); self.trigger("itemActivate", [item]); return item; }, scrollTo: function(item) { var item = self.getItem(item); if (!item) return; self.itemField() .scrollTo(item.element, { duration: self.options.layout.scrollToItemDuration, easing: self.options.layout.scrollToItemEasing, // This means that the item will be scrolled to 10% from the top of the field offset: {top: self.itemField().height() * -0.10} }); }, currentItem: function(item) { // Get current item. var currentItem = self.currentItem.item; // If current item has been destroyed, if (currentItem && currentItem._destroyed) { // set current item as undefined. currentItem = self.currentItem.item = undefined; } // If this is a setter operation, get the item. var item = self.getItem(item); // If the new current item does not exist, // just return current item. if (!item) return currentItem; // If the new current item has already been destroyed, // just return current item. if (item._destroyed) return currentItem; // If previous current item exists, if (currentItem) { /// remove its active & focus class. currentItem.element.removeClass("active focus"); // Also, if this item is a file, // remove active & focus class from its parent folder. if (currentItem.meta().type!=="folder") { currentItem.parentFolder().element.removeClass("active focus"); } // Also remove active class from place's itemgroup currentItem.place().itemGroup.removeClass("active"); } // Add active & focus class to new current item item.element.addClass("active focus"); // Lets see if this item is a folder. var isFolder = item.meta().type=="folder"; // If new current item is file, if (!isFolder) { // then add a focus class to its parent folder. item.parentFolder().element.addClass("focus"); } // Add active class to item group item.place().itemGroup.addClass("active"); // If this a folder, set current folder to the item itself. // If this is a file, set current folder to the item's parent folder. self.currentFolder( (isFolder) ? item : item.parentFolder() ); // Set the navigation to the new current item. self.navigation.setPathway(item.key); // Set and return new current item. return self.currentItem.item = item; }, currentFolder: function(folder) { // Get current folder var currentFolder = self.currentFolder.folder; // If current folder has been destroyed, if (currentFolder && currentFolder._destroyed) { // set current folder as undefined. currentFolder = self.currentFolder.folder = undefined; } // If this is a setter operation, get the item. var folder = self.getItem(folder); // If the folder does not exist, return current folder. // Also, as getter operation. if (!folder) return currentFolder; // Add active class to new current folder self.treeItem().removeClass("active"); folder.treeItem.addClass("active"); // Also expand the place tree if (folder.meta().path!==DS) { folder.place().treeItemGroup.addClass("expanded"); } // Also refresh view if (folder.handler.folderView) { if (folder.handler.refreshSeed!==self.folderRefreshSeed) { folder.handler.folderView.refresh(); folder.handler.refreshSeed = self.folderRefreshSeed; } } // Set and return new current folder. return self.currentFolder.folder = folder; }, currentFolderStatus: function(status) { // Quick monkey patch to prevent double activation (also fixes jomsocial) if (self.itemField().hasClass("searching") && !/emptySearch|ready/.test(status)) return; var lastStatus = self.currentFolderStatus.lastStatus; // Getter if (status === undefined) return lastStatus; // Setter if (typeof status !== "string") return; // Remove last status if (lastStatus) { self.itemField() .removeClass(lastStatus); } // Add new status self.itemField().addClass(status); return self.currentFolderStatus.lastStatus = status; }, setLayout: function() { // Skip if no layout has been set OR current modal is not us. if (!$Media.layout || $Media.currentModal!=="browser") return; var contentHeight; self.modalContent() .hide() .height( contentHeight = self.element.height() - self.modalHeader().outerHeight() - self.modalToolbar().outerHeight() - self.modalFooter().outerHeight() ) .show(); if ($.browser.msie) { self.treeItemField() .height(contentHeight); self.itemField() .height(contentHeight); self.itemFieldHints() .height(contentHeight); } self.setItemLayout(); self.trigger("setLayout"); }, setItemStyle: function(force) { // If this is not forced, skip setting item style // if layout seed hasn't changed yet. if (!force) { // Get current layout seed var seed = $Media.layout; // If layout seed matches, no setting of item style is necessary. if (self.setItemStyle.seed===seed) return; // Set current layout seed self.setItemStyle.seed = seed; } // Set up variables var viewMode = self.viewMode(), cssRules = {}; if (viewMode=="tile") { var browserItem = "#EasyBlogMediaManager .browser .browserItemField.view-tile .browserItem", availableWidth = (function() { var testElement = $(document.createElement("DIV")).prependTo(self.itemField()), availableWidth = testElement.width(); testElement.remove(); return availableWidth; })(), itemWidth = Math.floor(availableWidth * self.options.layout.tileSize), itemHeight = itemWidth - 24; cssRules[browserItem] = { width: itemWidth + "px", height: itemHeight + "px" } } // Get the document head var head = document.getElementsByTagName("head")[0]; // Remove previous stylesheet if (self.itemStyle) { try { head.removeChild(self.itemStyle); } catch(e) {}; } // Create new stylesheet self.itemStyle = document.createElement("style"); self.itemStyle.type = "text/css"; // Generate css text var cssText = ""; $.each(cssRules, function(selector, props) { cssText += selector + "{" + $.map(props, function(val, key){ return key + ":" + val; }).join(";") + "}\n"; }); // Append css text to stylesheet if (self.itemStyle.styleSheet) { self.itemStyle.styleSheet.cssText = cssText; } else { self.itemStyle.appendChild(document.createTextNode(cssText)); } // Append stylesheet to head head.appendChild(self.itemStyle); }, setItemLayout: function() { // Skip if no layout has been set OR current modal is not us. if (!$Media.layout || $Media.currentModal!=="browser") return; self.setItemStyle(); setTimeout(function() { var items = []; if (self.itemField().hasClass("searching")) { // Monkey patch if (self.searchItemGroup) { items = self.searchItemGroup.find(".browserItem"); } } else { // If there's no current folder selected, don't do anything. var currentFolder = self.currentFolder(); if (currentFolder===undefined) return; items = currentFolder.childItem(); } if (items.length < 1) return; // Drill down var itemFieldOffset = self.itemField().offset(), item, itemOffset, j = items.length, i = 1; if (items.length < 1) return; while (Math.abs(j - i) > 1) { item = items.eq(i-1); itemOffset = item.offset(); var itemBottom = itemOffset.top - itemFieldOffset.top + item.outerHeight(); if (itemBottom < 0) { i = Math.ceil((j + i) / 2); } else { j = i; i = Math.ceil(j / 2); } } // From the first found visible item, // work backwards & forwards until all // visible items on the viewport are covered if (i===1) i = 0; var b = i, f = i, min = 0, max = items.length - 1; setLayout = function(i) { if (i < min || i > max) return false; var item = items.eq(i).data("item"); if (!item.isVisible()) return false; item.setLayout(); }; while (true) { if (setLayout(b)===false) break; b--; } while (true) { if (setLayout(f)===false) break; f++; } }, 0); }, viewMode: function(mode) { // Get current view mode var currentMode = self.viewMode.mode; // If a mode hasn't been set yet, take from options. if (!currentMode) { currentMode = self.viewMode.mode = self.options.layout.viewMode; } // Setter operation if (mode!==undefined) { // Force a seed refresh self.setItemStyle.seed = null; // Replace view mode self.itemField() .removeClass("view-" + currentMode) .addClass("view-" + mode); // Update current view mode self.viewMode.mode = currentMode = mode; // Set browser layout self.setLayout(); // Scroll to current item (as its position have changed in different view modes) var currentItem = self.currentItem(); if (currentItem!==undefined) { self.scrollTo(currentItem); } } // Getter operation return currentMode; }, mode: function(mode) { // Getter if (mode===undefined) return self.mode.currentMode || "browse"; switch (mode) { case "browse": self.element .removeClass("mode-blogimage") .addClass("mode-browse"); // Quick monkey patch to hide jomsocial & flickr items // under blog imagemode. $.each($Library.places, function(i, place){ if (/jomsocial|flickr/.test(place.id)) { place.treeItemGroup && place.treeItemGroup.show(); place.itemGroup && place.itemGroup.show(); } }); break; case "blogimage": self.element .addClass("mode-blogimage") .removeClass("mode-browse"); // Quick monkey patch to hide jomsocial & flickr items // under blog imagemode. var currentItem = self.currentItem(), switchToNearestLocalPlace = false; if (currentItem) { if (/jomsocial|flickr/.test(currentItem.place().id)) { switchToNearestLocalPlace = true; } } $.each($Library.places, function(i, place){ if (/jomsocial|flickr/.test(place.id)) { place.treeItemGroup && place.treeItemGroup.hide(); place.itemGroup && place.itemGroup.hide(); } else { if (switchToNearestLocalPlace) { switchToNearestLocalPlace = false; if (place.treeItem) { place.treeItem.click(); } } } }); break; } self.mode.currentMode = mode; }, "{self} itemActivate": function(el, event, item) { self.itemActionSet().removeClass("active"); if (item.meta().type=="folder") { self.itemActionSet(".type-folder").addClass("active"); } else { self.itemActionSet(".type-item").addClass("active"); } }, "{headerNavigation} activate": function(el, event, key) { self.activateItem(key); }, "{tileViewButton} click": function(el, event) { el.addClass("active") .siblings() .removeClass("active"); self.viewMode("tile"); }, "{listViewButton} click": function(el, event) { el.addClass("active") .siblings() .removeClass("active"); self.viewMode("list"); }, "{treeItem} click": function(el, event) { self.clearSearch(true); var item = el.data("item"); if (el.hasClass("type-place")) { var place = el.data("place"); // If the toggle icon was clicked if ($(event.target).hasClass("treeItemToggle")) { // Expand the tree group place.treeItemGroup.toggleClass("expanded"); } self.activatePlace(place) .done( self.enqueue(function(place, baseFolder) { if (place.id==="jomsocial") { place.treeItemGroup.addClass("expanded"); } self.activateItem(baseFolder); }) ); return; } self.activateItem(item); }, "{itemField} scroll": function(el, event) { self.setItemLayout(); }, "{item} click": function(el, event) { // Prevents click event from being bubbled back to parent folder item event.stopPropagation(); var item = el.data("item"); if (item===undefined) return; var place = item.place(); self.activatePlace(place) .done( self.enqueue(function(place, baseFolder) { // Monkey patch to work with search // self.activateItem(baseFolder); self.activateItem(item); }) ); }, "{item} dblclick": function(el, event) { // Prevents click event from being bubbled back to parent folder item event.stopPropagation(); var item = el.data("item"); // #debug:start if (event.shiftKey) { $Media.console("log", [item]); return; } // #debug:end if (item===undefined) return; if (item.meta().type=="folder") return; if(self.mode.currentMode==='blogimage') { if (item.meta().type=="image") { // We are getting the raw meta var meta = $Library.meta[item.key]; EasyBlog.dashboard.blogImage.setImage(meta); $Media.hide(); } } else { $Media.edit(item.key); } }, "{modalUploaderButton} click": function() { var item = self.currentFolder(); $Media.upload((item.place().acl.canUploadItem) ? item.key : ""); }, "{self} modalActivate": function(el, event, meta, mode) { if (mode!==undefined) { self.mode(mode); } var meta = $Library.getMeta(meta) || self.currentItem().meta(); if (meta) { self.locateItem(meta); } }, "{prevPageButton} click": function() { var folder = $Browser.currentFolder(); folder.handler.changePage('prev'); }, "{nextPageButton} click": function() { var folder = $Browser.currentFolder(); folder.handler.changePage('next'); }, // "{pageSelection} change": function(el) { // var folder = $Browser.currentFolder(), // page = el.val(); // folder.handler.currentPage(page); // }, "{pageSelection} click": function(el) { if(self.paginationPage().length > 1) { el.toggleClass('expanded'); } }, "{paginationPage} click": function(el) { if(self.pageSelection().hasClass('expanded') && !el.hasClass('selected')) { var page = el.data('page'), folder = $Browser.currentFolder(); folder.handler.isChangingPage = true; folder.handler.currentPage(page); } }, "{window} click": function(el, event) { var className = $(event.target).attr('class'); if(!/pageSelection|paginationPage/.test(className)) { if(self.pageSelection().hasClass('expanded')) { self.pageSelection().removeClass('expanded'); } } }, _search: function(keyword) { if (!self.itemBeforeSearch) { self.itemBeforeSearch = self.currentItem().meta(); } self.element.addClass("searching"); self.itemField() .addClass("searching"); if (!self.searchItemGroup) { self.searchItemGroup = self.view.itemGroup() .appendTo(self.itemField()); } self.searchItemGroup .addClass("active search-mode"); var timer; self.searchView = $Library.search(keyword) .create({from: 0, to: 300}) .updated(function(files){ var l = files.length; if (l < 1) { timer = setTimeout(function(){ $Browser.currentFolderStatus("emptySearch"); }, 500); return; } clearTimeout(timer); $Browser.currentFolderStatus("ready"); for (i=0; i<l; i++) { var key = files[i]; // This either return the newly created file, // or the file that has been previously created. var file = $Browser.createFile(key); file.element .appendTo(self.searchItemGroup); } self.setItemLayout(); }); }, clearSearch: function(cancel) { self.folderRefreshSeed = $.uid(); if (cancel) { self.searchInput().val("").blur(); } self.element.removeClass("searching"); self.itemField() .removeClass("searching"); if (self.searchItems) { $.each(self.searchItems, function(i, item){ $(item).detach(); }); } if (self.searchItemGroup) { self.searchItemGroup .find(".browserItem") .detach(); self.searchItemGroup.removeClass("active"); } if (self.searchView) { self.searchView.destroy(); } delete self.searchView; if (self.itemBeforeSearch) { self.locateItem(self.itemBeforeSearch); } }, "{searchInput} focusin": function(el) { el.parent().addClass("active"); if ($.trim(el.val())!=="") { el.parent().addClass("showCancelButton"); } }, "{searchInput} focusout": function(el) { setTimeout(function(){ if ($.trim(el.val())==="") { el.parent().removeClass("active showCancelButton"); } }, 50); }, "{searchInput} keyup": function(el) { var keyword = $.trim(el.val()); if (keyword==="") { el.parent().removeClass("showCancelButton"); self.clearSearch(); delete self.itemBeforeSearch; return; } el.parent().addClass("showCancelButton"); self.search(keyword); } }} ); // controller: end EasyBlog.Controller("Media.Browser.Actions", { defaultOptions: { // Item actions "{customizeItemButton}": ".customizeItemButton", "{insertAsGalleryButton}": ".insertAsGalleryButton", "{insertItemButton}": ".insertItemButton", "{insertBlogImageButton}": ".insertBlogImageButton", // Create folder prompt "{createFolderButton}" : ".createFolderButton", "{confirmCreateFolderButton}" : ".createFolderPrompt .confirmCreateFolderButton", "{folderPath}" : ".createFolderPrompt .folderPath", "{folderCreationPath}" : ".createFolderPrompt .folderCreationPath", "{folderInput}" : ".createFolderPrompt .folderInput", "{folderCreationFailedReason}": ".createFolderPrompt .folderCreationFailedReason", // Remove item prompt "{removeItemButton}" : ".removeItemButton", "{removeItemFilename}" : ".removeItemPrompt .removeItemFilename", "{confirmRemoveItemButton}": ".confirmRemoveItemButton", "{removeItemFailedReason}" : ".removeItemPrompt .removeItemFailedReason", // Flickr login "{flickrLoginButton}": ".flickrLoginButton", // Search "{cancelSearchButton}": ".cancelSearchButton", // Error prompt "{retryPopulateButton}": ".retryPopulateButton" } }, function(self) { return { init: function() { }, "{self} itemActivate": function(el, event, item) { self.item = item; var acl = item.place().acl; // If the current file can't be removed, hide remove item button. self.removeItemButton() .toggle(acl.canRemoveItem); self.createFolderButton() .toggle(acl.canCreateFolder); // Show insert blog image button if we are selecting blog image self.insertBlogImageButton().toggle($Browser.mode()==="blogimage" && item.meta().type==="image"); }, // Item actions "{customizeItemButton} click": function() { $Media.edit(self.item.key); }, "{insertAsGalleryButton} click": function() { $Media.insert(self.item.key); }, "{insertItemButton} click": function() { $Media.insert(self.item.key); }, "{insertBlogImageButton} click": function() { // We are getting the raw meta var meta = $Library.meta[self.item.key]; EasyBlog.dashboard.blogImage.setImage(meta); $Media.hide(); }, // Create folder prompt "{createFolderButton} click": function() { $Prompt.get("createFolderPrompt") .show() .state("default"); var currentFolder = $Browser.currentFolder(); // Set folder path self.folderPath() .html(currentFolder.meta().friendlyPath); self.folderInput() .focus()[0] .select(); }, "{folderInput} keyup": function(el, event) { if (event.keyCode==13) { self.confirmCreateFolderButton().click(); } }, "{confirmCreateFolderButton} click": function() { var folderName = $.trim(self.folderInput().val()); // Don't do anything if folder name not given if (folderName==="") return; // Get friendly path of the new folder var parentMeta = $Browser.currentFolder().meta(), path = parentMeta.friendlyPath + DS + folderName; // and set it to the folder creation path self.folderCreationPath() .html(path); // Show progress state var createFolderPrompt = $Prompt.get("createFolderPrompt"); createFolderPrompt.state("progress"); // Create folder on server $Library.createFolder(parentMeta, folderName) .done(function(meta){ var item = $Browser.createFolder(meta); createFolderPrompt.hide(); $Browser.activateItem(item); }) .fail(function(message){ self.folderCreationFailedReason() .html(message); createFolderPrompt.state("fail"); }); }, // Remove item prompt "{removeItemButton} click": function() { self.removeItemFilename() .html(self.item.meta().title); // Show prompt $Prompt.get("removeItemPrompt") .show() .state("default"); }, "{confirmRemoveItemButton} click": function(el) { var removeItemPrompt = $Prompt.get("removeItemPrompt"); removeItemPrompt.state("progress"); $Library.removeRemoteMeta(self.item.key) .done(function(){ removeItemPrompt.hide(); }) .fail(function(message){ self.removeItemFailedReason() .html(message); removeItemPrompt.state("fail"); }); }, "{flickrLoginButton} click": function(el) { var login = el.data("login"), callback = el.data("callback"), activateFlickrPlace = $Browser.enqueue(function(){ $Browser.activatePlace("flickr") .done( $Browser.enqueue(function(place, baseFolder){ $Browser.activateItem(baseFolder); }) ); }); window[callback] = function() { var place = $Library.getPlace("flickr"); // Flickr is now associated place.options.associated = true; // Reactivate flickr place activateFlickrPlace(); } window.open(login, "Flickr Login", 'scrollbars=no, resizable=no, width=650, height=700'); }, "{cancelSearchButton} click": function() { $Browser.clearSearch(true); }, "{retryPopulateButton} click": function() { var place = self.item.place(); delete place.activator; place.populated = false; place.treeItem.click(); } }} ); // controller: end module.resolve(); }); // require: end }); // module: end
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка