pandora/static/js/documentBrowser.js

144 lines
5.3 KiB
JavaScript

'use strict';
pandora.ui.documentBrowser = function() {
var that;
if (!pandora.user.ui.document) {
pandora.user.ui.filterSizes = pandora.getFilterSizes();
pandora.$ui.documentFilters = pandora.ui.documentFilters();
that = Ox.SplitPanel({
elements: [
{
element: pandora.$ui.documentFilters[0],
size: pandora.user.ui.filterSizes[0]
},
{
element: pandora.$ui.documentFiltersInnerPanel = pandora.ui.documentFiltersInnerPanel()
},
{
element: pandora.$ui.documentFilters[4],
size: pandora.user.ui.filterSizes[4]
},
],
id: 'browser',
orientation: 'horizontal'
})
.bindEvent({
resize: function(data) {
pandora.$ui.documentFilters.forEach(function(list) {
list.size();
});
},
resizeend: function(data) {
pandora.UI.set({documentFiltersSize: data.size});
},
toggle: function(data) {
data.collapsed && pandora.$ui.list.gainFocus();
pandora.UI.set({showDocumentFilters: !data.collapsed});
if (!data.collapsed) {
pandora.$ui.documentFilters.forEach(function($documentFilter) {
var selected = $documentFilter.options('_selected');
if (selected) {
$documentFilter.bindEventOnce({
load: function() {
$documentFilter.options({
_selected: false,
selected: selected
});
}
}).reloadList();
}
});
pandora.$ui.documentFilters.updateMenus();
}
}
});
} else {
var that = Ox.IconList({
borderRadius: 0,
centered: true,
defaultRatio: pandora.site.posters.ratio,
draggable: true,
id: 'list',
item: function(data, sort, size) {
size = size || 64;
var sortKey = sort[0].key,
infoKey = sortKey == 'title' ? 'extension' : sortKey,
key = Ox.getObjectById(pandora.site.documentKeys, infoKey),
info = pandora.formatDocumentKey(key, data),
size = size || 128;
return {
height: Math.round(data.ratio > 1 ? size / data.ratio : size),
id: data.id,
info: info,
title: data.title,
url: pandora.getMediaURL('/documents/' + data.id + '/256p.jpg?' + data.modified),
width: Math.round(data.ratio > 1 ? size : size * data.ratio)
};
},
items: function(data, callback) {
pandora.api.findDocuments(Ox.extend(data, {
query: pandora.user.ui.findDocuments
}), callback);
return Ox.clone(data, true);
},
keys: ['description', 'dimensions', 'extension', 'id', 'title', 'ratio', 'size', 'user', 'entities', 'modified'],
max: 1,
min: 1,
orientation: 'horizontal',
pageLength: 32,
selected: [pandora.user.ui.document],
size: 64,
sort: getSort(),
unique: 'id'
})
.addClass('OxMedia')
.bindEvent({
copy: function() {
pandora.clipboard.copy(pandora.user.ui.document, 'document');
},
copyadd: function() {
pandora.clipboard.add(pandora.user.ui.document, 'document');
},
gainfocus: function() {
pandora.$ui.mainMenu.replaceItemMenu();
},
open: function() {
that.scrollToSelection();
},
openpreview: function() {
// ..
},
select: function(data) {
data.ids.length && pandora.UI.set({
'document': data.ids[0]
});
},
toggle: function(data) {
pandora.UI.set({showBrowser: !data.collapsed});
},
pandora_document: function(data) {
that.options({selected: [data.value]});
}
})
.bindEventOnce({
load: function() {
// gain focus if we're on page load or if we've just switched
// to an item and the not-yet-garbage-collected list still has
// focus
if (!Ox.Focus.focusedElement() || (
pandora.$ui.list && pandora.$ui.list.hasFocus()
)) {
that.gainFocus();
}
}
});
that.css({overflowY: 'hidden'}); // this fixes a bug in firefox
pandora.enableDragAndDrop(that, false);
}
function getSort() {
return pandora.user.ui.collectionSort;
}
return that;
};