389 lines
15 KiB
JavaScript
389 lines
15 KiB
JavaScript
'use strict';
|
|
|
|
|
|
pandora.ui.collection = function() {
|
|
|
|
var that,
|
|
ui = pandora.user.ui,
|
|
view = ui.collectionView,
|
|
keys = [
|
|
'description', 'dimensions', 'extension', 'id', 'title', 'ratio', 'size', 'user', 'entities', 'modified',
|
|
'editable'
|
|
];
|
|
|
|
if (view == 'list') {
|
|
that = Ox.TableList({
|
|
columns: pandora.site.documentSortKeys.filter(function(key) {
|
|
return !key.capability
|
|
|| pandora.hasCapability(key.capability);
|
|
}).map(function(key) {
|
|
var position = ui.collectionColumns.indexOf(key.id);
|
|
return {
|
|
addable: key.id != 'random',
|
|
align: ['string', 'text'].indexOf(
|
|
Ox.isArray(key.type) ? key.type[0]: key.type
|
|
) > -1 ? 'left' : key.type == 'list' ? 'center' : 'right',
|
|
defaultWidth: key.columnWidth,
|
|
format: (function() {
|
|
return function(value, data) {
|
|
var value = pandora.formatDocumentKey(key, data);
|
|
if (Ox.isArray(value)) {
|
|
value = value.join(', ');
|
|
}
|
|
return value;
|
|
}
|
|
})(),
|
|
id: key.id,
|
|
operator: pandora.getDocumentSortOperator(key.id),
|
|
position: position,
|
|
removable: !key.columnRequired,
|
|
title: Ox._(key.title),
|
|
type: key.type,
|
|
visible: position > -1,
|
|
width: ui.collectionColumnWidth[key.id] || key.columnWidth
|
|
};
|
|
}),
|
|
columnsVisible: true,
|
|
columnsMovable: true,
|
|
columnsRemovable: true,
|
|
columnsResizable: true,
|
|
columnsVisible: true,
|
|
draggable: true,
|
|
items: function(data, callback) {
|
|
pandora.api.findDocuments(Ox.extend(data, {
|
|
query: ui.findDocuments
|
|
}), callback);
|
|
return Ox.clone(data, true);
|
|
},
|
|
keys: keys,
|
|
scrollbarVisible: true,
|
|
selected: ui.collectionSelection,
|
|
sort: ui.collectionSort.concat([
|
|
{key: 'extension', operator: '+'},
|
|
{key: 'title', operator: '+'}
|
|
]),
|
|
unique: 'id',
|
|
})
|
|
.bindEvent({
|
|
columnchange: function(data) {
|
|
var columnWidth = {};
|
|
pandora.UI.set({collectionColumns: data.ids});
|
|
/*
|
|
data.ids.forEach(function(id) {
|
|
columnWidth[id] =
|
|
ui.collections[ui.collection].columnWidth[id]
|
|
|| Ox.getObjectById(pandora.site.sortKeys, id).width
|
|
});
|
|
pandora.UI.set({collectionColumnWidth: columnWidth});
|
|
*/
|
|
},
|
|
columnresize: function(data) {
|
|
pandora.UI.set('collectionColumnWidth.' + data.id, data.width);
|
|
},
|
|
sort: function(data) {
|
|
pandora.UI.set({
|
|
collectionSort: [{key: data.key, operator: data.operator}]
|
|
});
|
|
}
|
|
});
|
|
|
|
} else if (view == 'grid') {
|
|
that = Ox.IconList({
|
|
borderRadius: 0,
|
|
defaultRatio: 640/1024,
|
|
draggable: true,
|
|
id: 'list',
|
|
item: function(data, sort, size) {
|
|
var sortKey = sort[0].key,
|
|
infoKey = sortKey == 'title' ? 'extension' : sortKey,
|
|
key = Ox.getObjectById(pandora.site.documentKeys, infoKey),
|
|
info = pandora.formatDocumentKey(key, data, size),
|
|
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: ui.findDocuments
|
|
}), callback);
|
|
return Ox.clone(data, true);
|
|
},
|
|
keys: keys,
|
|
selected: ui.collectionSelection,
|
|
size: 128,
|
|
sort: ui.collectionSort.concat([
|
|
{key: 'extension', operator: '+'},
|
|
{key: 'title', operator: '+'}
|
|
]),
|
|
unique: 'id'
|
|
})
|
|
.addClass('OxMedia');
|
|
} else if (view == 'pages') {
|
|
that = Ox.InfoList({
|
|
borderRadius: 0,
|
|
defaultRatio: 640/1024,
|
|
draggable: true,
|
|
id: 'list',
|
|
item: function(data, sort, size) {
|
|
size = 128;
|
|
var sortKey = sort[0].key,
|
|
infoKey = sortKey == 'title' ? 'extension' : sortKey,
|
|
key = Ox.getObjectById(pandora.site.documentKeys, infoKey),
|
|
info = pandora.formatDocumentKey(key, data, size);
|
|
return {
|
|
icon: {
|
|
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)
|
|
},
|
|
info: {
|
|
css: {marginTop: '2px'},
|
|
element: pandora.ui.documentPages,
|
|
id: data.id,
|
|
options: {
|
|
id: data.id,
|
|
pages: data.pages,
|
|
query: ui.findDocuments,
|
|
ratio: data.ratio,
|
|
title: data.title
|
|
}
|
|
}
|
|
};
|
|
},
|
|
items: function(data, callback) {
|
|
pandora.api.findDocuments(Ox.extend(data, {
|
|
query: ui.findDocuments
|
|
}), callback);
|
|
return Ox.clone(data, true);
|
|
},
|
|
keys: ['pages'].concat(keys),
|
|
selected: ui.listSelection,
|
|
size: 192,
|
|
sort: ui.collectionSort.concat([
|
|
{key: 'extension', operator: '+'},
|
|
{key: 'title', operator: '+'}
|
|
]),
|
|
unique: 'id',
|
|
width: window.innerWidth
|
|
- ui.showSidebar * ui.sidebarSize - 1
|
|
- Ox.UI.SCROLLBAR_SIZE
|
|
})
|
|
.addClass('OxMedia')
|
|
.bindEvent({
|
|
key_left: function() {
|
|
// ...
|
|
},
|
|
key_right: function() {
|
|
// ...
|
|
}
|
|
});
|
|
}
|
|
|
|
if (['list', 'grid'].indexOf(view) > -1) {
|
|
// react to the resize event of the split panel
|
|
that.bindEvent({
|
|
resize: function(data) {
|
|
that.size();
|
|
},
|
|
pandora_showbrowser: function(data) {
|
|
that.size();
|
|
}
|
|
});
|
|
}
|
|
|
|
if (['list', 'grid', 'pages'].indexOf(view) > -1) {
|
|
|
|
//fixme
|
|
|
|
pandora.enableDragAndDrop(that, true);
|
|
|
|
that.bindEvent({
|
|
closepreview: function(data) {
|
|
if (pandora.$ui.documentDialog) {
|
|
pandora.$ui.documentDialog.close();
|
|
delete pandora.$ui.documentDialog;
|
|
}
|
|
},
|
|
copy: function(data) {
|
|
pandora.clipboard.copy(data.ids, 'document');
|
|
},
|
|
copyadd: function(data) {
|
|
pandora.clipboard.add(data.ids, 'document');
|
|
},
|
|
cut: function(data) {
|
|
var listData = pandora.getListData();
|
|
if (listData.editable && listData.type == 'static') {
|
|
pandora.clipboard.copy(data.ids, 'document');
|
|
pandora.doHistory('cut', data.ids, ui._collection, function() {
|
|
pandora.UI.set({collectionSelection: []});
|
|
pandora.reloadList();
|
|
});
|
|
}
|
|
},
|
|
cutadd: function(data) {
|
|
var listData = pandora.getListData();
|
|
if (listData.editable && listData.type == 'static') {
|
|
pandora.clipboard.add(data.ids, 'document');
|
|
pandora.doHistory('cut', data.ids, ui._collection, function() {
|
|
pandora.UI.set({collectionSelection: []});
|
|
pandora.reloadList();
|
|
});
|
|
}
|
|
},
|
|
'delete': function(data) {
|
|
var listData = pandora.getListData();
|
|
if (listData.editable && listData.type == 'static') {
|
|
//fixme use history
|
|
//pandora.doHistory('delete', data.ids, ui._collection, function() {
|
|
pandora.api.removeCollectionItems({
|
|
collection: ui._collection,
|
|
items: data.ids
|
|
|
|
}, function() {
|
|
pandora.UI.set({collectionSelection: []});
|
|
pandora.reloadList();
|
|
});
|
|
} else if (pandora.user.ui._collection == '' && data.ids.every(function(item) {
|
|
return pandora.$ui.list.value(item, 'editable');
|
|
})) {
|
|
pandora.ui.deleteDocumentDialog(
|
|
data.ids.map(function(id) {
|
|
return pandora.$ui.list.value(id);
|
|
}),
|
|
function() {
|
|
Ox.Request.clearCache();
|
|
if (ui.document) {
|
|
pandora.UI.set({document: ''});
|
|
} else {
|
|
pandora.$ui.list.reloadList()
|
|
}
|
|
}
|
|
).open();
|
|
}
|
|
},
|
|
init: function(data) {
|
|
var folder, list;
|
|
if (data.query.conditions.length == 0) {
|
|
pandora.$ui.allItems.update(data.items);
|
|
} else if (
|
|
data.query.conditions.length == 1
|
|
&& data.query.conditions[0].key == 'document'
|
|
&& data.query.conditions[0].operator == '=='
|
|
) {
|
|
list = data.query.conditions[0].value;
|
|
folder = pandora.getListData(list).folder;
|
|
if (pandora.$ui.folderList[folder]
|
|
&& !Ox.isEmpty(pandora.$ui.folderList[folder].value(list))) {
|
|
pandora.$ui.folderList[folder].value(
|
|
list, 'items', data.items
|
|
);
|
|
}
|
|
}
|
|
pandora.$ui.statusbar.set('total', data);
|
|
data = [];
|
|
pandora.site.totals.forEach(function(v) {
|
|
data[v.id] = 0;
|
|
});
|
|
pandora.$ui.statusbar.set('selected', data);
|
|
},
|
|
open: function(data) {
|
|
var set = {document: data.ids[0]};
|
|
pandora.UI.set(set);
|
|
},
|
|
openpreview: function(data) {
|
|
if (!pandora.$ui.documentDialog) {
|
|
pandora.$ui.documentDialog = pandora.openDocumentDialog({
|
|
documents: that.options('selected').map(function(id) {
|
|
return that.value(id);
|
|
})
|
|
}).bindEvent({
|
|
close: function() {
|
|
that.closePreview();
|
|
delete pandora.$ui.documentDialog;
|
|
}
|
|
});
|
|
} else {
|
|
pandora.$ui.documentDialog.update({
|
|
index: 0,
|
|
items: that.options('selected').map(function(id) {
|
|
return that.value(id);
|
|
})
|
|
});
|
|
}
|
|
},
|
|
paste: function(data) {
|
|
var items = pandora.clipboard.paste();
|
|
if (items.length && pandora.clipboard.type() == 'document' && pandora.getListData().editable) {
|
|
//fixme use history
|
|
//pandora.doHistory('paste', items, ui._collection, function() {
|
|
pandora.api.addCollectionItems({
|
|
collection: ui._collection,
|
|
items: items
|
|
|
|
}, function() {
|
|
pandora.UI.set({collectionSelection: items});
|
|
pandora.reloadList();
|
|
});
|
|
}
|
|
},
|
|
select: function(data) {
|
|
var query;
|
|
pandora.UI.set('collectionSelection', data.ids);
|
|
if (data.ids.length == 0) {
|
|
pandora.$ui.statusbar.set('selected', {items: 0});
|
|
} else {
|
|
if (Ox.isUndefined(data.rest)) {
|
|
query = {
|
|
conditions: data.ids.map(function(id) {
|
|
return {
|
|
key: 'id',
|
|
value: id,
|
|
operator: '=='
|
|
}
|
|
}),
|
|
operator: '|'
|
|
};
|
|
} else {
|
|
query = {
|
|
conditions: [ui.find].concat(
|
|
data.rest.map(function(id) {
|
|
return {
|
|
key: 'id',
|
|
value: id,
|
|
operator: '!='
|
|
};
|
|
})
|
|
),
|
|
operator: '&'
|
|
};
|
|
}
|
|
pandora.api.find({
|
|
query: query
|
|
}, function(result) {
|
|
pandora.$ui.statusbar.set('selected', result.data);
|
|
});
|
|
}
|
|
},
|
|
|
|
pandora_collectionsort: function(data) {
|
|
that.options({sort: data.value});
|
|
},
|
|
pandora_showdocument: function(data) {
|
|
isItemView && that.toggleElement(1);
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
return that;
|
|
|
|
};
|