Spade
Mini Shell
home/lmsyaran/public_html/media/com_easyblog/scripts_/media.js000064400000126015151161720250020616
0ustar00EasyBlog.module("media", function($){
var module = this;
var htmlentity = function(str) {
return $("<div>").text(str)
.html()
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
var $Media, $Library, $Browser, $Uploader, DS;
//
// 1. Create media manager controller.
//
EasyBlog.Controller("Media",
{
defaultOptions: {
debug: {
logging: EasyBlog.debug,
itemVisibility: false,
delayConfiguration: 0,
delayCommon: 0,
delayBrowser: 0,
delayUploader: 0,
delayEditor: 0
},
ui: "#EasyBlogMediaManagerUI",
overlay: {
background: "black",
opacity: 0
},
modal: {
size: 0.9
},
recentActivities: {
hideAfter: 3000
},
"{modalGroup}" : ".mediaModalGroup",
"{modal}" : ".mediaModal",
"{loaderModal}" : ".loaderModal",
"{uploaderModal}" : ".uploaderModal",
"{browserModal}" : ".browserModal",
"{editorModal}" : ".editorModal",
"{modalContent}" : ".modalContent",
"{overlay}": ".media-overlay",
"{modalDashboardButton}": ".dashboardButton",
"{assetItem}": ".assetItem"
}
},
function(self) { return {
console: function(method, args) {
if (!self.options.debug.logging) return;
var console = window.console;
if (!console) return;
var method = console[method];
if (!method) return;
// Normal browsers
if (method.apply) {
method.apply(console, args);
// IE
} else {
method(args.join(" "));
}
},
assets: {},
getAsset: function(name) {
if (self.assets[name]===undefined) {
var asset = self.assets[name] = $.Deferred();
asset
.done(function(){
self.assetItem(".asset-type-"+name)
.removeClass("loading done failed")
.addClass("done");
})
.fail(function(){
self.assetItem(".asset-type-"+name)
.removeClass("loading done failed")
.addClass("fail");
});
}
return self.assets[name];
},
createAsset: function(name, factory, delay) {
var asset = self.getAsset(name);
asset.factory = factory;
setTimeout(function(){
asset.factory && asset.factory(asset);
}, delay);
return asset;
},
init: function() {
// Globals
$Media = self;
self.IE = (function(){
var undef,
v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i');
while (
div.innerHTML = '<!--[if gt IE ' + (++v) +
']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : undef;
}());
if( typeof( tinyMCE ) != 'undefined' )
{
// Caret position fix
if (tinyMCE && tinyMCE.isIE && self.IE==9) {
// Wait for TinyMCE to be ready
var waitForTinyMCE = setInterval(function(){
var editor = tinyMCE.editors.write_content;
if (!editor) return;
var events = "keydown.mediaManager mousedown.mediaManager
focus.mediaManager";
$(editor.contentWindow)
// Just in case it was binded
.off(events)
.on(events, function(){
self.bookmark = {
element: editor.selection.getEnd(),
range: editor.selection.getBookmark(1).rng
}
});
clearInterval(waitForTinyMCE);
}, 500);
}
}
// Remember the document body's original overflow property
// Used with .hide();
self.originalBodyOverflow =
$("body").css("overflow");
// When "module/configuration" gets resolved,
// file & folder indexing kicks in immediately
// without waiting for the other assets to resolve.
self.createAsset(
"configuration",
function(asset) {
EasyBlog.module("media/configuration")
.done(function() {
var options = this;
self.initialize(this);
asset.resolve();
})
.fail(function(){
asset.reject();
});
},
self.options.debug.delayConfiguration
);
// Stylesheet & navigation is given priority because it needs to be
// ready before uploader can initialize. And we need
// uploader to be up & ready as fast as possible.
self.createAsset(
"common",
function(asset) {
EasyBlog.require()
.script(
"media/navigation"
)
.view(
"media/recent.item",
// Browser
"media/browser",
"media/browser.item-group",
"media/browser.item",
"media/browser.tree-item-group",
"media/browser.tree-item",
"media/browser.pagination-page",
// Uploader
"media/browser.uploader",
"media/browser.uploader.item",
// Editor
"media/editor",
"media/editor.viewport",
// Navigation
"media/navigation.item",
"media/navigation.itemgroup"
)
.language(
"COM_EASYBLOG_MM_UNABLE_TO_FIND_EXPORTER",
"COM_EASYBLOG_MM_GETTING_IMAGE_SIZES",
"COM_EASYBLOG_MM_UNABLE_TO_RETRIEVE_VARIATIONS",
"COM_EASYBLOG_MM_ITEM_INSERTED",
"COM_EASYBLOG_MM_UPLOADING",
"COM_EASYBLOG_MM_UPLOADING_STATE",
"COM_EASYBLOG_MM_UPLOADING_PENDING",
"COM_EASYBLOG_MM_UPLOAD_COMPLETE",
"COM_EASYBLOG_MM_UPLOAD_PREPARING",
"COM_EASYBLOG_MM_UPLOAD_UNABLE_PARSE_RESPONSE",
"COM_EASYBLOG_MM_UPLOADING_LEFT",
"COM_EASYBLOG_MM_CONFIRM_DELETE_ITEM",
"COM_EASYBLOG_MM_CANCEL_BUTTON",
"COM_EASYBLOG_MM_YES_BUTTON",
"COM_EASYBLOG_MM_ITEM_DELETE_CONFIRMATION"
)
.stylesheet("media/style")
.done(function() {
asset.resolve();
})
.fail(function(){
asset.reject();
});
},
self.options.debug.delayCommon
);
// Load all uploader dependencies NOW so we can shave off
// that extra 1-2 seconds that was used to wait for
// "media/uploader" module to resolve.
self.createAsset(
"uploader",
function(asset) {
$.when(
self.getAsset("configuration"),
self.getAsset("common"),
EasyBlog.require().script("media/uploader").done()
)
.done(function() {
var modal = self.createModal("uploader");
$Uploader = modal.controller = new
EasyBlog.Controller.Media.Uploader(modal.element, self.options.uploader);
asset.resolve();
})
.fail(function(){
asset.reject();
});
},
self.options.debug.delayUploader
);
// Browser
self.createAsset(
"browser",
function(asset) {
$.when(
self.getAsset("configuration"),
self.getAsset("common"),
EasyBlog.require().script("media/browser").done()
)
.done(function(){
var modal = self.createModal("browser");
$Browser = modal.controller = new
EasyBlog.Controller.Media.Browser(modal.element, self.options.browser);
asset.resolve();
})
.fail(function(){
asset.reject();
});
},
self.options.debug.delayBrowser
);
// Editor
self.createAsset(
"editor",
function(asset) {
$.when(
self.getAsset("browser"),
EasyBlog.require().script("media/editor").done()
)
.done(function(){
var modal = self.createModal("editor");
modal.controller = new
EasyBlog.Controller.Media.Editor(modal.element, self.options.editor);
asset.resolve();
})
.fail(function(){
asset.reject();
});
},
self.options.debug.delayEditor
);
// Progressive enhancement
EasyBlog.require()
.library("throttle-debounce")
.done(function(){
// Debounce self.setLayout(). Debouncing setLayout() is only useful
when
// media explorer is doing resource-intensive thumbnail resizing.
self.setLayout = $.debounce(200, self._setLayout);
});
},
initialize: function(options) {
// Inject subcontroller options with back-reference to media
var media = {controller: {media: self}},
options = $.extend(true, options, {browser: media, uploader: media,
library: media, editor: media, exporter: media});
// Reload configuration
self.update(options);
// Globals
DS = options.directorySeparator;
// Render media manager UI
var UI = $(self.options.ui);
self.element.append(UI.html());
UI.remove();
// Set up overlay
self.overlay()
.css(self.options.overlay);
// Set up loader
self.loader = new
EasyBlog.Controller.Media.Loader(self.createModal("loader"),
{controller: {media: self}});
// Implement media library
self.element
.implement(
EasyBlog.Controller.Media.Library,
self.options.library,
function(){
}
);
// Implement media exporter
self.element
.implement(
EasyBlog.Controller.Media.Exporter,
self.options.exporter
);
module.resolve();
},
// This will be replaced with a debounced function later on.
setLayout: function() {
self._setLayout();
},
// We are retaining direct access to non-debounced setLayout()
// because we might need it sometimes.
_setLayout: function() {
self.layout = (self.element.hasClass("active")) ? $.uid() :
null;
if (self.layout) {
self.setModalLayout();
}
return self.layout;
},
modals: {},
createModal: function(name) {
var element = self.modal("."+name+"Modal");
if (element.length < 1) {
element = $('<div
class="mediaModal"></div>').addClass(name+"Modal").appendTo(self.modalGroup());
}
return self.modals[name] = {
name: name,
element: element
}
},
activateModal: function(name, args) {
if (self.modals[name]===undefined) {
self.loader
.when(self.assets[name])
.done(function(){
setTimeout(function(){
self.activateModal(name, args);
}, 1000);
});
return;
}
// If modal to activate is current modal, skip.
if (self.currentModal===name) return true;
var modal = self.modals[name];
if (!modal) return false;
self.deactivateModal(self.currentModal);
self.currentModal = name;
// This will also set modal layout
self.show();
// Trigger "modalActivate event"
var controller = modal.controller;
if (controller) {
controller.trigger("modalActivate", args);
}
return true;
},
deactivateModal: function(name, args) {
var modal = self.modals[name];
if (!modal) return false;
// Trigger "modalActivate event"
var controller = modal.controller;
if (controller) {
try {
controller.trigger("modalDeactivate", args);
} catch (e) {
console.error(e);
}
}
modal.element.removeClass("active");
self.currentModal = undefined;
return true;
},
setModalLayout: function() {
clearTimeout(self.setModalLayout.task);
var modal = self.modals[self.currentModal];
// Skip if modal does not exist, or no visible modal.
if (!modal) return;
// If no layout has been set, set it first.
// setModalLayout will eventually be called again.
if (!self.layout) return self._setLayout();
// Show the modal
modal.element.addClass("active");
// Set the layout modal
var controller = modal.controller;
if (controller && $.isFunction(controller.setLayout)) {
// This fixes an issue where the modal requires
// more time than expected to paint on the screen.
// Whenever the modal is painted on the screen,
// its top/left is never 0.
var task = function() {
var offset = controller.element.offset();
if (offset.top===0 || offset.left===0) {
self.setModalLayout.task = setTimeout(task, 50);
} else {
controller.setLayout();
}
};
task();
}
},
show: function() {
// This prevents scrolling of page body
// $("body").css("overflow", "hidden");
self.element
.addClass("active");
self._setLayout();
// Conflict with certain mootools version
// self.trigger("show");
self.trigger("showModal");
},
hide: function() {
self.element
.removeClass("active");
self.deactivateModal(self.currentModal);
// $("body").css("overflow",
self.originalBodyOverflow);
// Conflict with certain mootools version
// self.trigger("hide");
self.trigger("hideModal");
},
"{overlay} click": function() {
self.hide();
},
"{window} resize": function() {
self.setLayout();
},
"{modalDashboardButton} click": function(el, event) {
// #debug:start
if (event.shiftKey) return self.console("dir", [self]);
// #debug:end
self.hide();
},
// Sugar methods
upload: function() { self.activateModal("uploader",
arguments); },
browse: function() { self.activateModal("browser", arguments);
},
edit : function() { self.activateModal("editor", arguments);
}
}}
);
EasyBlog.Controller("Media.Loader",
{
defaultOptions: {
}
},
function(self) { return {
init: function() {
},
when: function() {
self.media.activateModal("loader");
var queue = $.when.apply(null, arguments),
onQueueDone = queue.done; // Keep an original copy of done method
queue.id = $.uid();
queue.done = function(callback) {
onQueueDone(function(){
// If we are still waiting for it
if (self.currentQueueId==queue.id) {
// then execute the callback
callback && callback();
}
});
}
self.currentQueueId = queue.id;
return queue;
},
"{self} hide": function() {
self.currentQueueId = null;
}
}}
);
EasyBlog.Controller("Media.Prompt",
{
defaultOptions: {
"{dialog}": ".modalPromptDialog",
"{cancelButton}": ".promptCancelButton"
}
},
function(self){ return {
init: function() {
},
get: function(name) {
var dialog = self.dialog("." + name);
return self.instantiate(dialog);
},
instantiate: function(dialog) {
var methods = {
element: dialog,
show: function() {
dialog.addClass("active");
self.element.addClass("active");
return methods;
},
hide: function() {
dialog.removeClass("active");
self.element.removeClass("active");
return methods;
},
state: function(state) {
var lastState = dialog.data("lastPromptState");
if (state===undefined) {
return lastState;
}
var getStateElement = function(state) {
return dialog.find(".promptState" + ".state-" +
state);
},
currentState = getStateElement(state),
lastState = getStateElement(lastState);
if (currentState.length < 1) {
return;
}
lastState.removeClass("active");
currentState.addClass("active");
dialog.data("lastPromptState", state);
return methods;
}
}
return methods;
},
hideAll: function() {
self.dialog().removeClass("active");
self.element.removeClass("active");
},
"{cancelButton} click": function() {
self.hideAll();
}
}}
);
EasyBlog.Controller("Media.Library",
{
defaultOptions: {
// options for managing indexing of metas here
places: [],
place: {
files: {},
acl: {
canCreateFolder: false,
canUploadItem: false,
canRenameItem: false,
canRemoveItem: false,
canCreateVariation: false,
canDeleteVariation: false
},
populateImmediately: false
}
}
},
function(self) { return {
init: function() {
// Register itself to media
self.media.library = self;
$.each(self.options.places, function(i, place) {
self.addPlace(place);
});
},
places: {},
getPlace: function(place) {
// Skip going through all the tests below.
if (!place) return;
// Place (test using acl property)
if (place.acl) {
return place;
}
// Place ID or Key
if (typeof place==="string") {
return self.places[place.split("|")[0]];
}
},
addPlace: function(place) {
var place = self.places[place.id] = $.extend(
{
tasks: $.Threads({threadLimit: 1}),
ready: $.Deferred(),
baseFolder: function() {
return self.getMeta(place.id + "|" +
self.media.options.directorySeparator);
}
},
self.options.place,
place
);
place.done = place.ready.done;
place.fail = place.ready.fail;
place.always = place.ready.always;
var importJSON = function(data) {
// When tree is not populated, it is an empty object.
if ($.isEmptyObject(data)) return;
// When tree is a string, it might be json string.
if (typeof data === "string") {
// Try to eval it.
try { data = $.evalJSON(data); } catch(e) {}
}
return (typeof data === "object") ? data : undefined;
}
// Import initial file tree
place.files = importJSON(place.files);
if (place.files) {
place.tasks.add(function(){
self.importMeta(place.files);
place.ready.resolve(place);
});
};
place.populate = function() {
if (place.populate.task!==undefined) return place.populate.task;
place.populate.task = $.Deferred();
// JomSocial & Flickr goes directly to getFileTree,
// User & Shared folder getFolderTree first.
place.populate[
(/jomsocial|flickr/.test(place.id) || place.files) ?
"getFileTree" : "getFolderTree"
]();
return place.populate.task;
};
place.populate.getFolderTree = function() {
// Get final folder tree
return self.getRemoteMeta({place: place.id, foldersOnly: 1})
.done(function(meta){
// Import the folder tree
place.tasks.add(function(){
// #debug:start
// var profiler = "Importing final folder tree for " +
place.id;
// self.media.console("time", [profiler]);
// #debug:end
self.importMeta(meta);
place.ready.resolve(place);
// #debug:start
// self.media.console("timeEnd", [profiler]);
// #debug:end
});
place.populate.getFileTree();
})
.fail(function(){
place.populate.task.reject(place);
delete place.populate.task;
place.ready.reject(place);
});
};
place.populate.getFileTree = function() {
// Get final file tree
return self.getRemoteMeta({place: place.id})
.done(function(meta){
// Import the folder tree
place.tasks.add(function(){
// #debug:start
// var profiler = "Importing final file tree for " +
place.id;
// self.media.console("time", [profiler]);
// #debug:end
self.importMeta(meta);
place.ready.resolve(place);
place.populate.task.resolve(place);
// #debug:start
// self.media.console("timeEnd", [profiler]);
// #debug:end
});
})
.fail(function(){
place.populate.task.reject(place);
delete place.populate.task;
});
};
if (place.populateImmediately) {
place.populate();
}
return place;
},
meta: {},
metadata: {}, // Extended data attribute for meta
isMeta: function(meta) {
return !(meta===undefined || !$.isPlainObject(meta) ||
$.isEmptyObject(meta));
},
get: function(key) {
if (!self.meta.hasOwnProperty(key)) return;
// Create a clone of the meta, keeping the original intact
var meta = $.extend({}, self.meta[key]);
// Extend meta with additional data attributes
meta.data = self.metadata[key];
return meta;
},
getKey: function(meta) {
return (meta) ? meta.place + "|" + meta.path : null;
},
getParentKey: function(meta) {
if (!meta) return;
var key = (typeof meta==="string") ? meta : (meta.key ||
self.getKey(meta)),
start = key.indexOf(DS),
end = key.lastIndexOf(DS);
return (end===key.length-1) ? undefined : key.substring(0, end +
((start===end) ? 1 : 0));
},
getMeta: function(meta) {
// Skip going through all the tests below.
if (!meta) return;
// Meta
if (self.isMeta(meta)) {
// Try to get the updated meta,
// if it doesn't work, just return the existing meta.
return self.get(self.getKey(meta)) || meta;
}
// Key
if (typeof meta==="string") {
return self.get(meta); // meta == key
}
},
getRemoteMeta: function(options) {
var task = $.Deferred();
task.retry = 0;
var defaultOptions = {
path: self.media.options.directorySeparator,
retry: 3,
retryAfter: 1000,
variation: 0,
foldersOnly: 0
},
options = $.extend(defaultOptions, options);
// Don't do anything if place is not given
if (options.place===undefined) {
return task.rejectWith(task, "Error: Place not given!");
}
var loadRemoteMeta = (function() {
task.loader =
EasyBlog.ajax(
"site.views.media.getMeta",
options,
{
success: function(data) {
task.resolveWith(task, arguments);
},
// Server-side error
fail: function() {
task.rejectWith(task, arguments);
},
// Network error
error: function() {
task.retry++;
if (task.retry < options.retry) {
loadRemoteMeta();
} else {
task.rejectWith(task, arguments);
}
}
}
);
return arguments.callee;
})();
return task;
},
getMetaVariations: function(meta) {
var meta = self.getMeta(meta);
if (meta===undefined) return;
return self.getRemoteMeta({place: meta.place, path: meta.path,
variation: 1})
.done(function(meta){
self.addMeta(meta);
});
},
removeMetaVariation: function(meta, variationName) {
var meta = self.getMeta(meta);
if (meta===undefined) return;
if (meta.variations===undefined) return;
var variation;
for (var i=0; i<meta.variations.length; i++) {
if (meta.variations[i].name===variationName) {
variation = meta.variations[i];
meta.variations.splice(i, 1);
break;
}
};
return variation;
},
addMeta: function(meta) {
var key = self.getKey(meta),
existingMeta = self.getMeta(key);
// If the meta passed in is the meta that we already have,
// just return the existing meta.
if (existingMeta && meta.hash===existingMeta.hash) return
existingMeta;
// Create meta
meta.key = key;
meta.hash = $.uid();
meta.group = (meta.type=="folder") ? "folders" :
"files";
// Store parent key if this is not the top level folder
meta.parentKey = self.getParentKey(meta);
// Add friendly path
var place = self.getPlace(meta.place);
meta.friendlyPath =
(meta.path===DS) ?
place.title :
place.title + meta.path.substring(meta.path.indexOf(DS),
meta.path.length);
// Store it to our meta library
self.meta[key] = meta;
// Create metadata
var data = meta.data = (self.metadata[key] || (self.metadata[key] =
$.eventable({})));
// Additional metadata for folder type
if (meta.type=="folder") {
data.files = data.files || {};
data.folders = data.folders || {};
data.views = data.views || self.createMetaView(meta);
}
// For new meta, add to parent meta's view.
if (!existingMeta) {
var parentMeta = self.getMeta(meta.parentKey);
if (parentMeta) {
parentMeta.data.views.addMeta(meta);
}
// For existing meta, fire update event.
} else {
// Ensure events don't slow down adding of large list of metas
setTimeout(function(){ meta.data.fire("updated", meta); },
0);
}
return meta;
},
removeMeta: function(meta) {
var meta = self.getMeta(meta);
if (meta===undefined) return;
if (meta.type==="folder") {
var folders = meta.data.folders,
files = meta.data.files;
for (key in folders) {
self.removeMeta(key);
}
for (key in files) {
self.removeMeta(key);
}
}
// If this is not base folder
if (meta.parentKey) {
// Remove meta from parent
var parentMeta = self.getMeta(meta.parentKey);
if (parentMeta) {
parentMeta.data.views.removeMeta(meta);
}
delete self.meta[meta.key];
setTimeout(function(){ meta.data.fire("removed", meta); },
0);
}
return meta;
},
removeRemoteMeta: function(meta) {
var task = $.Deferred();
var meta = self.getMeta(meta);
if (meta===undefined) {
return task.rejectWith(task, "The file does not exist in the
media library.");
}
task.loader =
EasyBlog.ajax(
"site.views.media.delete",
{
place: meta.place,
path: meta.path
},
{
success: function() {
self.removeMeta(meta);
// Return the meta which is no longer in the library
task.resolveWith(task, [meta]);
},
// Server-side error
fail: function() {
task.rejectWith(task, arguments);
},
// Network error
error: function(xhr, errorStatus) {
task.rejectWith(task, [errorStatus])
}
});
return task;
},
createFolder: function(meta, name) {
var task = $.Deferred();
// Don't do anything if parent meta not found.
var meta = self.getMeta(meta),
place = meta.place;
if (meta===undefined || meta.type!=="folder") {
return task.rejectWith(task, "Parent folder was not
found.");
}
task.loader =
EasyBlog.ajax(
"site.views.media.createFolder",
{
place: place,
path : meta.path + DS + name
},
{
success: function(meta) {
// #hack: Restore place property
meta.place = place;
var meta = self.addMeta(meta);
task.resolveWith(task, [meta]);
},
// Server-side error
fail: function() {
task.rejectWith(task, arguments);
},
// Network error
error: function(xhr, errorStatus) {
task.rejectWith(task, [errorStatus])
}
}
);
return task;
},
importMeta: function(meta, recursive) {
if (meta===undefined) return;
if (meta.type!=="folder") return;
if (recursive===undefined) recursive = true;
// Remove the contents property
// before adding into our meta library.
var contents = meta.contents,
length = contents.length;
delete meta.contents;
// Temporary hack
contents.reverse();
// If the folder meta was created before,
// the update event is triggered by the parent.
var folder = self.addMeta(meta),
data = folder.data,
_data = {files: {}, folders: {}};
var i = 0;
while (i < length) {
var meta = self.addMeta(contents[i]),
key = meta.key,
group = meta.group;
_data[group][key] = delete data[group][key];
i++;
}
for (key in data.files) {
self.removeMeta(key);
}
for (key in data.folders) {
self.removeMeta(key);
}
// Update to the new set of data
data.folders = _data.folders;
data.files = _data.files;
if (recursive) {
for (key in data.folders) {
self.importMeta(self.getMeta(key), recursive);
}
}
return folder;
},
createMetaView: function(meta) {
var view = {
meta: meta,
addMeta: function(meta) {
for (mode in view.modes) {
var viewMap = view.modes[mode][meta.group];
viewMap && viewMap.add(meta);
}
},
removeMeta: function(meta) {
for (mode in view.modes) {
var viewMap = view.modes[mode][meta.group];
viewMap && viewMap.remove(meta);
}
},
create: function(options) {
var defaultOptions = {
from: 0,
to: 1024,
mode: "dateModified",
group: "files"
};
// Create monitor
var monitor = $.Callbacks("unique memory");
$.extend(
monitor,
defaultOptions,
options,
{
uid: $.uid(),
select: function(options) {
// Update options
$.extend(monitor, options);
// Deregister from the previous map
if (monitor.map) {
delete monitor.map.monitors[monitor.uid];
}
monitor.map = view.modes[monitor.mode][monitor.group];
// Register to the new map
monitor.map.monitors[monitor.uid] = monitor;
// #debug:start
// self.media.console("log", ["Monitoring " +
monitor.group + " in " + meta.key, monitor]);
// #debug:end
return monitor.refresh();
},
updated: monitor.add,
refresh: function() {
return monitor.fire(monitor.map.slice(monitor.from, monitor.to));
},
destroy: function() {
monitor.disable();
if (monitor.map) {
delete monitor.map.monitors[monitor.uid];
}
return monitor;
}
}
);
return monitor.select();
}
};
// Extend view with view modes
self.createViewModes(view);
return view;
},
createViewModes: function(view) {
// TODO: Make this extensible for other types of sort maps.
view.modes = {
dateModified: {
folders: self.createViewMap(view, true), // Monkey patch
files: self.createViewMap(view)
}
};
return view;
},
// TODO: When createViewModes is extensible,
// this is only part of dateModified mode.
createViewMap: function(view, folderGroup) {
var map = $.extend([], {
task: $.Threads({threadLimit: 1}),
affectedIndex: [],
add: function(meta) {
map.task.add(function() {
// TODO: Proper date modified insertion
map.unshift(meta.key);
map.affectedIndex.push(0);
// Monkey patch to show folder tree in alphabetical order
if (folderGroup) {
map.sort().reverse();
}
map.refreshMonitor();
});
},
remove: function(meta) {
map.task.add(function() {
var key = meta.key,
i = map.length,
position;
while (i--) {
if (map[i]===key) {
position = i;
break;
}
}
if (position===undefined) return;
map.splice(i, 1);
map.affectedIndex.push(i);
map.refreshMonitor();
});
},
monitors: {},
refreshMonitor: function() {
clearTimeout(map.refreshMonitor.timer);
map.refreshMonitor.timer = setTimeout(function(){
var affectedIndex = map.affectedIndex;
map.affectedIndex = [];
map.task.add(function(){
var l = affectedIndex.length,
i = 0;
for (id in map.monitors) {
var monitor = map.monitors[id],
from = monitor.from,
to = monitor.to,
i;
for (i=0; i<l; i++) {
var a = affectedIndex[i];
if (a >= from || a <= to) {
monitor.refresh();
break;
}
}
}
});
}, 250);
}
});
return map;
},
search: function(keyword) {
// TODO: Also remove DS from keyword
if ($.trim(keyword)==="") return [];
// #debug:start
// var profiler = "Searching library using keyword '" +
keyword + "'";
// self.media.console("time", [profiler]);
// #debug:end
var keyword = keyword.toLowerCase();
var results = self.createMetaView({type: "search"});
for (key in self.meta) {
var parts = key.split("|"),
place = parts[0],
path = parts[1],
meta = self.meta[key];
if (/jomsocial|flickr/.test(place)) {
// Note: This means that album name keyword cannot be matched.
path = meta.title || "";
}
if (path.toLowerCase().match(keyword)) {
results.addMeta(meta);
}
}
// #debug:start
// self.media.console("timeEnd", [profiler]);
// #debug:end
return results;
}
}}
);
EasyBlog.Controller("Media.Exporter",
{
defaultOptions: {
view: {
recentItem: "media/recent.item"
},
// Recent inserts
"{recentActivities}" :
".recentActivities",
"{recentActivitiesDialog}" : ".recentActivities
.modalPromptDialog",
"{hideRecentActivitiesButton}" : ".recentActivities
.promptHideButton",
"{dashboardButton}" : ".recentActivities
.dashboardButton",
"{recentItemGroup}": ".recentItemGroup",
"{recentItem}" : ".recentItem"
}
},
function(self){ return {
init: function() {
$Media.exporter = self;
$Media.insert = self.insert;
},
handler: {},
showDialog: function() {
self.recentActivitiesDialog()
.addClass("active");
self.recentActivities()
.css({top: 0, opacity: 1})
.addClass("active");
},
hideDialog: function() {
self.recentActivities()
.animate({top: "-=50px", opacity: 0}, {duration: 250,
complete: function() {
self.recentActivities()
.removeClass("active");
self.recentActivitiesDialog()
.removeClass("active");
}
});
},
"{dashboardButton} click": function() {
self.hideDialog();
},
"{hideRecentActivitiesButton} click": function() {
self.hideDialog();
},
// Recent inserts
insert: function(item, settings) {
var meta = $Media.library.getMeta(item);
if (meta===undefined) return;
var task = self.create(meta.type, meta.key, settings);
// Show dialog
self.showDialog();
// Create recent item
task.recentItem =
self.view.recentItem({meta: meta})
.addClass("loading")
.css({opacity: 0})
.prependTo(self.recentItemGroup())
.animate({opacity: 1}, {duration: 500, complete: function() {
task
.done(function(html) {
if (html==="") {
task.recentItem
.removeClass("loading done")
.addClass("error")
.find(".itemProgress")
.html($.language("COM_EASYBLOG_MM_UNABLE_TO_EXPORT_ITEM"));
}
if( typeof( tinyMCE ) != 'undefined' )
{
// If you are TinyMCE/JCE on IE
if (tinyMCE && tinyMCE.isIE && $Media.IE==9) {
// Get back the bookmark we stored just now
var bookmark = $Media.bookmark;
if (bookmark) {
var editor = tinyMCE.editors.write_content;
editor.selection.moveToBookmark({rng: bookmark.range});
editor.execCommand('mceInsertContent', false, html);
// Just in case we did not get the bookmark
} else {
EasyBlog.dashboard.editor.insert(html);
}
} else {
EasyBlog.dashboard.editor.insert(html);
}
}
else
{
EasyBlog.dashboard.editor.insert(html);
}
task.recentItem
.removeClass("loading failed")
.addClass("done")
.find(".itemProgress")
.html($.language("COM_EASYBLOG_MM_ITEM_INSERTED"));
if ($Media.options.recentActivities.hideAfter > 0) {
setTimeout(function(){ self.hideDialog(); },
$Media.options.recentActivities.hideAfter);
}
})
.progress(function(message){
if (task.recentItem.hasClass("done")) return;
task.recentItem
.find(".itemProgress")
.html(message);
})
.fail(function(message){
task.recentItem
.removeClass("loading done")
.addClass("error")
.find(".itemProgress")
.html(message);
});
}
});
return task;
},
create: function(type, key, settings) {
var handler = self.handler[type],
task = $.Deferred();
if (handler===undefined) {
var Exporter =
EasyBlog.Controller.Media.Exporter[$.String.capitalize(type)];
if (Exporter===undefined) {
task.reject($.language("COM_EASYBLOG_MM_UNABLE_TO_FIND_EXPORTER"));
return task;
}
handler = self.handler[type] = new Exporter(self.element, $.extend({},
{settings: self.options[type], controller: { media: self.media }}));
}
handler.create(task, key, settings);
return task;
}
}}
);
EasyBlog.Controller("Media.Exporter.File",
{
defaultOptions: {
settings: {
title: "",
target: "_self",
content: ""
}
}
},
function(self){ return {
init: function() {
},
create: function(task, key, customSettings) {
var settings = $.extend({}, self.options.settings, customSettings),
meta = self.media.library.getMeta(key),
link =
$(document.createElement("A"))
.attr({
title: settings.title,
target: settings.target,
href: meta.url
})
.html((settings.content) ? settings.content : meta.title);
task.resolve(link.toHTML());
return task;
}
}}
);
EasyBlog.Controller("Media.Exporter.Folder",
{
defaultOptions: {
settings: {
}
}
},
function(self){ return {
init: function() {
},
create: function(task, key, customSettings) {
var settings = $.extend({}, self.options.settings, customSettings),
meta = self.media.library.getMeta(key),
embedType = (meta.place=="jomsocial") ? "album" :
"gallery";
settings.file = meta.path;
settings.place = meta.place;
var snippet = "[embed=" + embedType + "]" +
$.toJSON(settings) + "[/embed]";
task.resolve(snippet);
return task;
}
}}
);
EasyBlog.Controller("Media.Exporter.Image",
{
defaultOptions: {
settings: {
zoom: null, // variationName
caption: null,
enforceDimension: false,
enforceWidth: null,
enforceHeight: null,
variation: null, // variationName
defaultVariation: "thumbnail",
defaultZoom: "original"
}
}
},
function(self){ return {
init: function() {
},
create: function(task, key, customSettings) {
var settings = $.extend({}, self.options.settings, customSettings),
meta = self.media.library.getMeta(key),
image = $(new Image());
// Convert caption into html entities,
// escape quotes and other special characters.
var title = htmlentity(meta.title);
image.attr({
src: meta.thumbnail.url,
alt: title,
title: title
});
var resolve = function() {
task.resolve(image.toHTML());
},
process = function() {
var variations = {};
$.each(meta.variations, function(i, variation) {
variations[variation.name] = variation;
});
// Use provided variation, else use default variation, or the first
variation on the list.
var variation = variations[settings.variation] ||
variations[settings.defaultVariation] ||
meta.variations[0];
// Convert caption into html entities,
// escape quotes and other special characters.
var title = htmlentity(variation.title);
// Use setting from selected variation
image.attr({
src: variation.url,
alt: title,
title: title
});
// Enforce dimension
if (settings.enforceDimension) {
if (settings.enforceWidth!==null &&
settings.enforceHeight!==null) {
var sizes = $.Image.resizeWithin(
variation.width, variation.height,
settings.enforceWidth, settings.enforceHeight
);
// Turn it into whole number
sizes.width = Math.floor(sizes.width);
sizes.height = Math.floor(sizes.height);
image.attr(sizes);
}
}
// Image caption
if (settings.caption!==null) {
// Convert caption into html entities,
// escape quotes and other special characters.
var caption = htmlentity(settings.caption);
image
.addClass("easyblog-image-caption")
.attr("title", caption);
}
// Image zooming capabilities
if (settings.zoom!==null) {
var zoomWith = variations[settings.zoom] ||
variations[settings.defaultZoom] ||
{url: meta.thumbnail.url, title: meta.title};
var title = htmlentity(settings.caption || zoomWith.title ||
"");
image =
$("<a>")
.addClass("easyblog-thumb-preview")
.attr({
href: zoomWith.url,
title: title
})
.html(image);
};
resolve();
}
// If any of these criterias were true,
// we need to retrieve the variations.
if (settings.variation || settings.zoom || settings.enforceWidth ||
settings.enforceHeight) {
// If the variations hasn't been loaded
if (meta.variations===undefined) {
task.notify($.language("COM_EASYBLOG_MM_GETTING_IMAGE_SIZES"));
// Then get it first
self.media.library.getMetaVariations(key)
.done(function(metaWithVariations) {
// Add variations to our meta
meta = metaWithVariations;
// Process the rest of the image settings
process();
})
.fail(function() {
// If the ajax call failed, reject task.
task.reject($.language("COM_EASYBLOG_MM_UNABLE_TO_RETRIEVE_VARIATIONS"));
});
// If variations has been loaded,
// process the rest of the image settings now.
} else {
process();
}
// If there are no fancy image settings,
// the default one will work just fine.
} else {
resolve();
}
return task;
}
}}
);
EasyBlog.Controller("Media.Exporter.Audio",
{
defaultOptions: {
width: 400,
height: 24,
autostart: false,
controlbar: "bottom",
backcolor: "#333333",
frontcolor: "#ffffff"
}
},
function(self){ return {
init: function() {
},
create: function(task, key, customSettings) {
var settings = $.extend({}, self.options.settings, customSettings),
meta = self.media.library.getMeta(key);
settings.file = meta.path;
settings.place = meta.place;
var snippet = "[embed=audio]" + $.toJSON(settings) +
"[/embed]";
task.resolve(snippet);
return task;
}
}}
);
EasyBlog.Controller("Media.Exporter.Video",
{
defaultOptions: {
settings: {
width: 400,
height: 225,
autostart: false,
controlbar: "bottom",
backcolor: "#333333",
frontcolor: "#ffffff"
}
}
},
function(self){ return {
init: function() {
},
create: function(task, key, customSettings) {
var settings = $.extend({}, self.options.settings, customSettings),
meta = self.media.library.getMeta(key);
settings.file = meta.path;
settings.place = meta.place;
var snippet = "[embed=video]" + $.toJSON(settings) +
"[/embed]";
task.resolve(snippet);
return task;
}
}}
);
EasyBlog.Controller("MediaLauncher",
{
defaultOptions: {
"{uploadImageButton}": ".uploadImageButton",
"{chooseImageButton}": ".chooseImageButton"
}
},
function(self) { return {
init: function() {
$("#media_manager_button").click(function(){
EasyBlog.mediaManager.browse();
});
},
"{uploadImageButton} click": function() {
EasyBlog.mediaManager.upload();
},
"{chooseImageButton} click": function() {
EasyBlog.mediaManager.browse();
}
}}
);
//
// 2. Initialize media manager.
//
var container =
$(document.createElement("div")).attr("id",
"EasyBlogMediaManager").appendTo("body");
EasyBlog.mediaManager = new EasyBlog.Controller.Media(container);
});
home/lmsyaran/public_html/j3/media/com_easyblog/scripts/media.js000064400000051273151177624330021007
0ustar00EasyBlog.module("media",function(e){var
t=this,n=function(t){return
e("<div>").text(t).html().replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'")},r,i,s,o,u;EasyBlog.Controller("Media",{defaultOptions:{debug:{logging:EasyBlog.debug,itemVisibility:!1,delayConfiguration:0,delayCommon:0,delayBrowser:0,delayUploader:0,delayEditor:0},ui:"#EasyBlogMediaManagerUI",overlay:{background:"black",opacity:0},modal:{size:.9},recentActivities:{hideAfter:3e3},"{modalGroup}":".mediaModalGroup","{modal}":".mediaModal","{loaderModal}":".loaderModal","{uploaderModal}":".uploaderModal","{browserModal}":".browserModal","{editorModal}":".editorModal","{modalContent}":".modalContent","{overlay}":".media-overlay","{modalDashboardButton}":".dashboardButton","{assetItem}":".assetItem"}},function(n){return{console:function(e,t){if(!n.options.debug.logging)return;var
r=window.console;if(!r)return;var
e=r[e];if(!e)return;e.apply?e.apply(r,t):e(t.join("
"))},assets:{},getAsset:function(t){if(n.assets[t]===undefined){var
r=n.assets[t]=e.Deferred();r.done(function(){n.assetItem(".asset-type-"+t).removeClass("loading
done
failed").addClass("done")}).fail(function(){n.assetItem(".asset-type-"+t).removeClass("loading
done failed").addClass("fail")})}return
n.assets[t]},createAsset:function(e,t,r){var i=n.getAsset(e);return
i.factory=t,setTimeout(function(){i.factory&&i.factory(i)},r),i},init:function(){r=n,n.IE=function(){var
e,t=3,n=document.createElement("div"),r=n.getElementsByTagName("i");while(n.innerHTML="<!--[if
gt IE "+
++t+"]><i></i><![endif]-->",r[0]);return
t>4?t:e}();if(typeof
tinyMCE!="undefined"&&tinyMCE&&tinyMCE.isIE&&n.IE==9)var
t=setInterval(function(){var
r=tinyMCE.editors.write_content;if(!r)return;var
i="keydown.mediaManager mousedown.mediaManager
focus.mediaManager";e(r.contentWindow).off(i).on(i,function(){n.bookmark={element:r.selection.getEnd(),range:r.selection.getBookmark(1).rng}}),clearInterval(t)},500);n.originalBodyOverflow=e("body").css("overflow"),n.createAsset("configuration",function(e){EasyBlog.module("media/configuration").done(function(){var
t=this;n.initialize(this),e.resolve()}).fail(function(){e.reject()})},n.options.debug.delayConfiguration),n.createAsset("common",function(e){EasyBlog.require().script("media/navigation").view("media/recent.item","media/browser","media/browser.item-group","media/browser.item","media/browser.tree-item-group","media/browser.tree-item","media/browser.pagination-page","media/browser.uploader","media/browser.uploader.item","media/editor","media/editor.viewport","media/navigation.item","media/navigation.itemgroup").language("COM_EASYBLOG_MM_UNABLE_TO_FIND_EXPORTER","COM_EASYBLOG_MM_GETTING_IMAGE_SIZES","COM_EASYBLOG_MM_UNABLE_TO_RETRIEVE_VARIATIONS","COM_EASYBLOG_MM_ITEM_INSERTED","COM_EASYBLOG_MM_UPLOADING","COM_EASYBLOG_MM_UPLOADING_STATE","COM_EASYBLOG_MM_UPLOADING_PENDING","COM_EASYBLOG_MM_UPLOAD_COMPLETE","COM_EASYBLOG_MM_UPLOAD_PREPARING","COM_EASYBLOG_MM_UPLOAD_UNABLE_PARSE_RESPONSE","COM_EASYBLOG_MM_UPLOADING_LEFT","COM_EASYBLOG_MM_CONFIRM_DELETE_ITEM","COM_EASYBLOG_MM_CANCEL_BUTTON","COM_EASYBLOG_MM_YES_BUTTON","COM_EASYBLOG_MM_ITEM_DELETE_CONFIRMATION").stylesheet("media/style").done(function(){e.resolve()}).fail(function(){e.reject()})},n.options.debug.delayCommon),n.createAsset("uploader",function(t){e.when(n.getAsset("configuration"),n.getAsset("common"),EasyBlog.require().script("media/uploader").done()).done(function(){var
e=n.createModal("uploader");o=e.controller=new
EasyBlog.Controller.Media.Uploader(e.element,n.options.uploader),t.resolve()}).fail(function(){t.reject()})},n.options.debug.delayUploader),n.createAsset("browser",function(t){e.when(n.getAsset("configuration"),n.getAsset("common"),EasyBlog.require().script("media/browser").done()).done(function(){var
e=n.createModal("browser");s=e.controller=new
EasyBlog.Controller.Media.Browser(e.element,n.options.browser),t.resolve()}).fail(function(){t.reject()})},n.options.debug.delayBrowser),n.createAsset("editor",function(t){e.when(n.getAsset("browser"),EasyBlog.require().script("media/editor").done()).done(function(){var
e=n.createModal("editor");e.controller=new
EasyBlog.Controller.Media.Editor(e.element,n.options.editor),t.resolve()}).fail(function(){t.reject()})},n.options.debug.delayEditor),EasyBlog.require().library("throttle-debounce").done(function(){n.setLayout=e.debounce(200,n._setLayout)})},initialize:function(r){var
i={controller:{media:n}},r=e.extend(!0,r,{browser:i,uploader:i,library:i,editor:i,exporter:i});n.update(r),u=r.directorySeparator;var
s=e(n.options.ui);n.element.append(s.html()),s.remove(),n.overlay().css(n.options.overlay),n.loader=new
EasyBlog.Controller.Media.Loader(n.createModal("loader"),{controller:{media:n}}),n.element.implement(EasyBlog.Controller.Media.Library,n.options.library,function(){}),n.element.implement(EasyBlog.Controller.Media.Exporter,n.options.exporter),t.resolve()},setLayout:function(){n._setLayout()},_setLayout:function(){return
n.layout=n.element.hasClass("active")?e.uid():null,n.layout&&n.setModalLayout(),n.layout},modals:{},createModal:function(t){var
r=n.modal("."+t+"Modal");return
r.length<1&&(r=e('<div
class="mediaModal"></div>').addClass(t+"Modal").appendTo(n.modalGroup())),n.modals[t]={name:t,element:r}},activateModal:function(e,t){if(n.modals[e]===undefined){n.loader.when(n.assets[e]).done(function(){setTimeout(function(){n.activateModal(e,t)},1e3)});return}if(n.currentModal===e)return!0;var
r=n.modals[e];if(!r)return!1;n.deactivateModal(n.currentModal),n.currentModal=e,n.show();var
i=r.controller;return
i&&i.trigger("modalActivate",t),!0},deactivateModal:function(e,t){var
r=n.modals[e];if(!r)return!1;var
i=r.controller;if(i)try{i.trigger("modalDeactivate",t)}catch(s){console.error(s)}return
r.element.removeClass("active"),n.currentModal=undefined,!0},setModalLayout:function(){clearTimeout(n.setModalLayout.task);var
t=n.modals[n.currentModal];if(!t)return;if(!n.layout)return
n._setLayout();t.element.addClass("active");var
r=t.controller;if(r&&e.isFunction(r.setLayout)){var
i=function(){var
e=r.element.offset();e.top===0||e.left===0?n.setModalLayout.task=setTimeout(i,50):r.setLayout()};i()}},show:function(){n.element.addClass("active"),n._setLayout(),n.trigger("showModal")},hide:function(){n.element.removeClass("active"),n.deactivateModal(n.currentModal),n.trigger("hideModal")},"{overlay}
click":function(){n.hide()},"{window}
resize":function(){n.setLayout()},"{modalDashboardButton}
click":function(e,t){if(t.shiftKey)return
n.console("dir",[n]);n.hide()},upload:function(){n.activateModal("uploader",arguments)},browse:function(){n.activateModal("browser",arguments)},edit:function(){n.activateModal("editor",arguments)}}}),EasyBlog.Controller("Media.Loader",{defaultOptions:{}},function(t){return{init:function(){},when:function(){t.media.activateModal("loader");var
n=e.when.apply(null,arguments),r=n.done;return
n.id=e.uid(),n.done=function(e){r(function(){t.currentQueueId==n.id&&e&&e()})},t.currentQueueId=n.id,n},"{self}
hide":function(){t.currentQueueId=null}}}),EasyBlog.Controller("Media.Prompt",{defaultOptions:{"{dialog}":".modalPromptDialog","{cancelButton}":".promptCancelButton"}},function(e){return{init:function(){},get:function(t){var
n=e.dialog("."+t);return
e.instantiate(n)},instantiate:function(t){var
n={element:t,show:function(){return
t.addClass("active"),e.element.addClass("active"),n},hide:function(){return
t.removeClass("active"),e.element.removeClass("active"),n},state:function(e){var
r=t.data("lastPromptState");if(e===undefined)return r;var
i=function(e){return
t.find(".promptState.state-"+e)},s=i(e),r=i(r);if(s.length<1)return;return
r.removeClass("active"),s.addClass("active"),t.data("lastPromptState",e),n}};return
n},hideAll:function(){e.dialog().removeClass("active"),e.element.removeClass("active")},"{cancelButton}
click":function(){e.hideAll()}}}),EasyBlog.Controller("Media.Library",{defaultOptions:{places:[],place:{files:{},acl:{canCreateFolder:!1,canUploadItem:!1,canRenameItem:!1,canRemoveItem:!1,canCreateVariation:!1,canDeleteVariation:!1},populateImmediately:!1}}},function(t){return{init:function(){t.media.library=t,e.each(t.options.places,function(e,n){t.addPlace(n)})},places:{},getPlace:function(e){if(!e)return;if(e.acl)return
e;if(typeof e=="string")return
t.places[e.split("|")[0]]},addPlace:function(n){var
n=t.places[n.id]=e.extend({tasks:e.Threads({threadLimit:1}),ready:e.Deferred(),baseFolder:function(){return
t.getMeta(n.id+"|"+t.media.options.directorySeparator)}},t.options.place,n);n.done=n.ready.done,n.fail=n.ready.fail,n.always=n.ready.always;var
r=function(t){if(e.isEmptyObject(t))return;if(typeof
t=="string")try{t=e.evalJSON(t)}catch(n){}return typeof
t=="object"?t:undefined};return
n.files=r(n.files),n.files&&n.tasks.add(function(){t.importMeta(n.files),n.ready.resolve(n)}),n.populate=function(){return
n.populate.task!==undefined?n.populate.task:(n.populate.task=e.Deferred(),n.populate[/jomsocial|flickr/.test(n.id)||n.files?"getFileTree":"getFolderTree"](),n.populate.task)},n.populate.getFolderTree=function(){return
t.getRemoteMeta({place:n.id,foldersOnly:1}).done(function(e){n.tasks.add(function(){t.importMeta(e),n.ready.resolve(n)}),n.populate.getFileTree()}).fail(function(){n.populate.task.reject(n),delete
n.populate.task,n.ready.reject(n)})},n.populate.getFileTree=function(){return
t.getRemoteMeta({place:n.id}).done(function(e){n.tasks.add(function(){t.importMeta(e),n.ready.resolve(n),n.populate.task.resolve(n)})}).fail(function(){n.populate.task.reject(n),delete
n.populate.task})},n.populateImmediately&&n.populate(),n},meta:{},metadata:{},isMeta:function(t){return
t!==undefined&&!!e.isPlainObject(t)&&!e.isEmptyObject(t)},get:function(n){if(!t.meta.hasOwnProperty(n))return;var
r=e.extend({},t.meta[n]);return
r.data=t.metadata[n],r},getKey:function(e){return
e?e.place+"|"+e.path:null},getParentKey:function(e){if(!e)return;var
n=typeof
e=="string"?e:e.key||t.getKey(e),r=n.indexOf(u),i=n.lastIndexOf(u);return
i===n.length-1?undefined:n.substring(0,i+(r===i?1:0))},getMeta:function(e){if(!e)return;if(t.isMeta(e))return
t.get(t.getKey(e))||e;if(typeof e=="string")return
t.get(e)},getRemoteMeta:function(n){var r=e.Deferred();r.retry=0;var
i={path:t.media.options.directorySeparator,retry:3,retryAfter:1e3,variation:0,foldersOnly:0},n=e.extend(i,n);if(n.place===undefined)return
r.rejectWith(r,"Error: Place not given!");var s=function(){return
r.loader=EasyBlog.ajax("site.views.media.getMeta",n,{success:function(e){r.resolveWith(r,arguments)},fail:function(){r.rejectWith(r,arguments)},error:function(){r.retry++,r.retry<n.retry?s():r.rejectWith(r,arguments)}}),arguments.callee}();return
r},getMetaVariations:function(e){var
e=t.getMeta(e);if(e===undefined)return;return
t.getRemoteMeta({place:e.place,path:e.path,variation:1}).done(function(e){t.addMeta(e)})},removeMetaVariation:function(e,n){var
e=t.getMeta(e);if(e===undefined)return;if(e.variations===undefined)return;var
r;for(var
i=0;i<e.variations.length;i++)if(e.variations[i].name===n){r=e.variations[i],e.variations.splice(i,1);break}return
r},addMeta:function(n){var
r=t.getKey(n),i=t.getMeta(r);if(i&&n.hash===i.hash)return
i;n.key=r,n.hash=e.uid(),n.group=n.type=="folder"?"folders":"files",n.parentKey=t.getParentKey(n);var
s=t.getPlace(n.place);n.friendlyPath=n.path===u?s.title:s.title+n.path.substring(n.path.indexOf(u),n.path.length),t.meta[r]=n;var
o=n.data=t.metadata[r]||(t.metadata[r]=e.eventable({}));n.type=="folder"&&(o.files=o.files||{},o.folders=o.folders||{},o.views=o.views||t.createMetaView(n));if(!i){var
a=t.getMeta(n.parentKey);a&&a.data.views.addMeta(n)}else
setTimeout(function(){n.data.fire("updated",n)},0);return
n},removeMeta:function(e){var
e=t.getMeta(e);if(e===undefined)return;if(e.type==="folder"){var
n=e.data.folders,r=e.data.files;for(key in n)t.removeMeta(key);for(key in
r)t.removeMeta(key)}if(e.parentKey){var
i=t.getMeta(e.parentKey);i&&i.data.views.removeMeta(e),delete
t.meta[e.key],setTimeout(function(){e.data.fire("removed",e)},0)}return
e},removeRemoteMeta:function(n){var r=e.Deferred(),n=t.getMeta(n);return
n===undefined?r.rejectWith(r,"The file does not exist in the media
library."):(r.loader=EasyBlog.ajax("site.views.media.delete",{place:n.place,path:n.path},{success:function(){t.removeMeta(n),r.resolveWith(r,[n])},fail:function(){r.rejectWith(r,arguments)},error:function(e,t){r.rejectWith(r,[t])}}),r)},createFolder:function(n,r){var
i=e.Deferred(),n=t.getMeta(n),s=n.place;return
n===undefined||n.type!=="folder"?i.rejectWith(i,"Parent
folder was not
found."):(i.loader=EasyBlog.ajax("site.views.media.createFolder",{place:s,path:n.path+u+r},{success:function(e){e.place=s;var
e=t.addMeta(e);i.resolveWith(i,[e])},fail:function(){i.rejectWith(i,arguments)},error:function(e,t){i.rejectWith(i,[t])}}),i)},importMeta:function(e,n){if(e===undefined)return;if(e.type!=="folder")return;n===undefined&&(n=!0);var
r=e.contents,i=r.length;delete e.contents,r.reverse();var
s=t.addMeta(e),o=s.data,u={files:{},folders:{}},a=0;while(a<i){var
e=t.addMeta(r[a]),f=e.key,l=e.group;u[l][f]=delete o[l][f],a++}for(f in
o.files)t.removeMeta(f);for(f in
o.folders)t.removeMeta(f);o.folders=u.folders,o.files=u.files;if(n)for(f in
o.folders)t.importMeta(t.getMeta(f),n);return
s},createMetaView:function(n){var r={meta:n,addMeta:function(e){for(mode in
r.modes){var
t=r.modes[mode][e.group];t&&t.add(e)}},removeMeta:function(e){for(mode
in r.modes){var
t=r.modes[mode][e.group];t&&t.remove(e)}},create:function(t){var
n={from:0,to:1024,mode:"dateModified",group:"files"},i=e.Callbacks("unique
memory");return e.extend(i,n,t,{uid:e.uid(),select:function(t){return
e.extend(i,t),i.map&&delete
i.map.monitors[i.uid],i.map=r.modes[i.mode][i.group],i.map.monitors[i.uid]=i,i.refresh()},updated:i.add,refresh:function(){return
i.fire(i.map.slice(i.from,i.to))},destroy:function(){return
i.disable(),i.map&&delete
i.map.monitors[i.uid],i}}),i.select()}};return
t.createViewModes(r),r},createViewModes:function(e){return
e.modes={dateModified:{folders:t.createViewMap(e,!0),files:t.createViewMap(e)}},e},createViewMap:function(t,n){var
r=e.extend([],{task:e.Threads({threadLimit:1}),affectedIndex:[],add:function(e){r.task.add(function(){r.unshift(e.key),r.affectedIndex.push(0),n&&r.sort().reverse(),r.refreshMonitor()})},remove:function(e){r.task.add(function(){var
t=e.key,n=r.length,i;while(n--)if(r[n]===t){i=n;break}if(i===undefined)return;r.splice(n,1),r.affectedIndex.push(n),r.refreshMonitor()})},monitors:{},refreshMonitor:function(){clearTimeout(r.refreshMonitor.timer),r.refreshMonitor.timer=setTimeout(function(){var
e=r.affectedIndex;r.affectedIndex=[],r.task.add(function(){var
t=e.length,n=0;for(id in r.monitors){var
i=r.monitors[id],s=i.from,o=i.to,n;for(n=0;n<t;n++){var
u=e[n];if(u>=s||u<=o){i.refresh();break}}}})},250)}});return
r},search:function(n){if(e.trim(n)==="")return[];var
n=n.toLowerCase(),r=t.createMetaView({type:"search"});for(key in
t.meta){var
i=key.split("|"),s=i[0],o=i[1],u=t.meta[key];/jomsocial|flickr/.test(s)&&(o=u.title||""),o.toLowerCase().match(n)&&r.addMeta(u)}return
r}}}),EasyBlog.Controller("Media.Exporter",{defaultOptions:{view:{recentItem:"media/recent.item"},"{recentActivities}":".recentActivities","{recentActivitiesDialog}":".recentActivities
.modalPromptDialog","{hideRecentActivitiesButton}":".recentActivities
.promptHideButton","{dashboardButton}":".recentActivities
.dashboardButton","{recentItemGroup}":".recentItemGroup","{recentItem}":".recentItem"}},function(t){return{init:function(){r.exporter=t,r.insert=t.insert},handler:{},showDialog:function(){t.recentActivitiesDialog().addClass("active"),t.recentActivities().css({top:0,opacity:1}).addClass("active")},hideDialog:function(){t.recentActivities().animate({top:"-=50px",opacity:0},{duration:250,complete:function(){t.recentActivities().removeClass("active"),t.recentActivitiesDialog().removeClass("active")}})},"{dashboardButton}
click":function(){t.hideDialog()},"{hideRecentActivitiesButton}
click":function(){t.hideDialog()},insert:function(n,i){var
s=r.library.getMeta(n);if(s===undefined)return;var
o=t.create(s.type,s.key,i);return
t.showDialog(),o.recentItem=t.view.recentItem({meta:s}).addClass("loading").css({opacity:0}).prependTo(t.recentItemGroup()).animate({opacity:1},{duration:500,complete:function(){o.done(function(n){n===""&&o.recentItem.removeClass("loading
done").addClass("error").find(".itemProgress").html(e.language("COM_EASYBLOG_MM_UNABLE_TO_EXPORT_ITEM"));if(typeof
tinyMCE!="undefined")if(tinyMCE&&tinyMCE.isIE&&r.IE==9){var
i=r.bookmark;if(i){var
s=tinyMCE.editors.write_content;s.selection.moveToBookmark({rng:i.range}),s.execCommand("mceInsertContent",!1,n)}else
EasyBlog.dashboard.editor.insert(n)}else
EasyBlog.dashboard.editor.insert(n);else
EasyBlog.dashboard.editor.insert(n);o.recentItem.removeClass("loading
failed").addClass("done").find(".itemProgress").html(e.language("COM_EASYBLOG_MM_ITEM_INSERTED")),r.options.recentActivities.hideAfter>0&&setTimeout(function(){t.hideDialog()},r.options.recentActivities.hideAfter)}).progress(function(e){if(o.recentItem.hasClass("done"))return;o.recentItem.find(".itemProgress").html(e)}).fail(function(e){o.recentItem.removeClass("loading
done").addClass("error").find(".itemProgress").html(e)})}}),o},create:function(n,r,i){var
s=t.handler[n],o=e.Deferred();if(s===undefined){var
u=EasyBlog.Controller.Media.Exporter[e.String.capitalize(n)];if(u===undefined)return
o.reject(e.language("COM_EASYBLOG_MM_UNABLE_TO_FIND_EXPORTER")),o;s=t.handler[n]=new
u(t.element,e.extend({},{settings:t.options[n],controller:{media:t.media}}))}return
s.create(o,r,i),o}}}),EasyBlog.Controller("Media.Exporter.File",{defaultOptions:{settings:{title:"",target:"_self",content:""}}},function(t){return{init:function(){},create:function(n,r,i){var
s=e.extend({},t.options.settings,i),o=t.media.library.getMeta(r),u=e(document.createElement("A")).attr({title:s.title,target:s.target,href:o.url}).html(s.content?s.content:o.title);return
n.resolve(u.toHTML()),n}}}),EasyBlog.Controller("Media.Exporter.Folder",{defaultOptions:{settings:{}}},function(t){return{init:function(){},create:function(n,r,i){var
s=e.extend({},t.options.settings,i),o=t.media.library.getMeta(r),u=o.place=="jomsocial"?"album":"gallery";s.file=o.path,s.place=o.place;var
a="[embed="+u+"]"+e.toJSON(s)+"[/embed]";return
n.resolve(a),n}}}),EasyBlog.Controller("Media.Exporter.Image",{defaultOptions:{settings:{zoom:null,caption:null,enforceDimension:!1,enforceWidth:null,enforceHeight:null,variation:null,defaultVariation:"thumbnail",defaultZoom:"original"}}},function(t){return{init:function(){},create:function(r,i,s){var
o=e.extend({},t.options.settings,s),u=t.media.library.getMeta(i),a=e(new
Image),f=n(u.title);a.attr({src:u.thumbnail.url,alt:f,title:f});var
l=function(){r.resolve(a.toHTML())},c=function(){var
t={};e.each(u.variations,function(e,n){t[n.name]=n});var
r=t[o.variation]||t[o.defaultVariation]||u.variations[0],i=n(r.title);a.attr({src:r.url,alt:i,title:i});if(o.enforceDimension&&o.enforceWidth!==null&&o.enforceHeight!==null){var
s=e.Image.resizeWithin(r.width,r.height,o.enforceWidth,o.enforceHeight);s.width=Math.floor(s.width),s.height=Math.floor(s.height),a.attr(s)}if(o.caption!==null){var
f=n(o.caption);a.addClass("easyblog-image-caption").attr("title",f)}if(o.zoom!==null){var
c=t[o.zoom]||t[o.defaultZoom]||{url:u.thumbnail.url,title:u.title},i=n(o.caption||c.title||"");a=e("<a>").addClass("easyblog-thumb-preview").attr({href:c.url,title:i}).html(a)}l()};return
o.variation||o.zoom||o.enforceWidth||o.enforceHeight?u.variations===undefined?(r.notify(e.language("COM_EASYBLOG_MM_GETTING_IMAGE_SIZES")),t.media.library.getMetaVariations(i).done(function(e){u=e,c()}).fail(function(){r.reject(e.language("COM_EASYBLOG_MM_UNABLE_TO_RETRIEVE_VARIATIONS"))})):c():l(),r}}}),EasyBlog.Controller("Media.Exporter.Audio",{defaultOptions:{width:400,height:24,autostart:!1,controlbar:"bottom",backcolor:"#333333",frontcolor:"#ffffff"}},function(t){return{init:function(){},create:function(n,r,i){var
s=e.extend({},t.options.settings,i),o=t.media.library.getMeta(r);s.file=o.path,s.place=o.place;var
u="[embed=audio]"+e.toJSON(s)+"[/embed]";return
n.resolve(u),n}}}),EasyBlog.Controller("Media.Exporter.Video",{defaultOptions:{settings:{width:400,height:225,autostart:!1,controlbar:"bottom",backcolor:"#333333",frontcolor:"#ffffff"}}},function(t){return{init:function(){},create:function(n,r,i){var
s=e.extend({},t.options.settings,i),o=t.media.library.getMeta(r);s.file=o.path,s.place=o.place;var
u="[embed=video]"+e.toJSON(s)+"[/embed]";return
n.resolve(u),n}}}),EasyBlog.Controller("MediaLauncher",{defaultOptions:{"{uploadImageButton}":".uploadImageButton","{chooseImageButton}":".chooseImageButton"}},function(t){return{init:function(){e("#media_manager_button").click(function(){EasyBlog.mediaManager.browse()})},"{uploadImageButton}
click":function(){EasyBlog.mediaManager.upload()},"{chooseImageButton}
click":function(){EasyBlog.mediaManager.browse()}}});var
a=e(document.createElement("div")).attr("id","EasyBlogMediaManager").appendTo("body");EasyBlog.mediaManager=new
EasyBlog.Controller.Media(a)});