From c5e7154374ff28ad922a39d2875483169a7a5599 Mon Sep 17 00:00:00 2001 From: j <0x006A@0x2620.org> Date: Thu, 9 Jan 2014 08:06:01 +0000 Subject: [PATCH] use documentsPanel in documentsDialog --- static/js/documentsDialog.js | 527 +---------------------------------- static/js/documentsPanel.js | 63 ++++- static/js/documentsView.js | 4 +- 3 files changed, 70 insertions(+), 524 deletions(-) diff --git a/static/js/documentsDialog.js b/static/js/documentsDialog.js index 834d43aaa..f88f4094f 100644 --- a/static/js/documentsDialog.js +++ b/static/js/documentsDialog.js @@ -6,230 +6,7 @@ pandora.ui.documentsDialog = function() { var dialogHeight = Math.round((window.innerHeight - 48) * 0.9), dialogWidth = Math.round(window.innerWidth * 0.9), - itemWidth = 272 + Ox.UI.SCROLLBAR_SIZE, - selected = null, - $reloadButton = Ox.Button({ - disabled: true, - title: 'redo', - tooltip: Ox._('Reload'), - type: 'image' - }) - .css({float: 'left', margin: '4px 2px 4px 4px'}) - .bindEvent({ - click: function() { - $reloadButton.options({disabled: true}); - Ox.Request.clearCache('findDocuments'); - $list.reloadList(true); - } - }), - - $userCheckbox = Ox.Checkbox({ - title: Ox._('Only show my documents'), - value: false - }) - .css({float: 'left', margin: '4px 2px'}) - .bindEvent({ - change: function(data) { - data.value - ? $robotsCheckbox.show() - : $robotsCheckbox.hide().options({value: false}); - updateList(); - } - }), - - $findSelect = Ox.Select({ - items: [ - {id: 'all', title: Ox._('Find: All')}, - {id: 'user', title: Ox._('Find: Username')}, - {id: 'file', title: Ox._('Find: Filename')} - ], - overlap: 'right', - type: 'image' - }) - .bindEvent({ - change: function(data) { - $findInput.value() && updateList(); - $findInput.options({placeholder: data.title}); - } - }), - - $findInput = Ox.Input({ - changeOnKeypress: true, - clear: true, - placeholder: Ox._('Find: All'), - width: 192 - }) - .bindEvent({ - change: updateList - }), - - $findElement = Ox.FormElementGroup({ - elements: [ - $findSelect, - $findInput - ] - }) - .css({float: 'right', margin: '4px'}), - - $list = Ox.TableList({ - columns: [ - { - id: 'user', - operator: '+', - title: Ox._('Username'), - visible: true, - width: 128 - }, - { - align: 'right', - id: 'name', - operator: '+', - title: Ox._('Filename'), - visible: true, - width: 256 - }, - { - id: 'extension', - operator: '+', - title: Ox._('Extension'), - visible: true, - width: 64 - }, - { - align: 'right', - format: function(value) { - return Ox.formatValue(value, 'B'); - }, - id: 'size', - operator: '-', - title: Ox._('Size'), - visible: true, - width: 64 - }, - { - align: 'right', - id: 'matches', - operator: '-', - title: Ox._('Matches'), - visible: true, - width: 64 - }, - { - id: 'description', - operator: '+', - title: Ox._('Description'), - visible: true, - width: 256 - }, - { - align: 'right', - format: function(value) { - return Ox.formatDate(value, '%F %T'); - }, - id: 'created', - operator: '-', - title: Ox._('Created'), - visible: true, - width: 144 - }, - { - align: 'right', - format: function(value) { - return Ox.formatDate(value, '%F %T'); - }, - id: 'modified', - operator: '-', - title: Ox._('Modified'), - visible: true, - width: 144 - } - ], - columnsVisible: true, - items: pandora.api.findDocuments, - keys: ['ratio'], - query: {conditions: [], operator: '&'}, - scrollbarVisible: true, - sort: [{key: 'user', operator: '+'}], - unique: 'id' - }) - .bindEvent({ - 'delete': deleteDocuments, - init: function(data) { - $status.html( - Ox.toTitleCase(Ox.formatCount(data.items, 'document')) - ); - }, - load: function() { - $reloadButton.options({disabled: false}); - }, - select: function(data) { - selected = data.ids[0]; - $addButton.options({disabled: data.ids.length == 0}); - selectFile(); - } - }), - - $embedButton = Ox.Button({ - title: 'embed', - tooltip: Ox._('Embed'), - type: 'image' - }) - .css({ - float: 'left', - margin: '4px 2px 4px 4px' - }) - .bindEvent({ - click: function() { - pandora.ui.embedDocumentDialog( - $list.options('selected')[0] - ).open(); - } - }), - - $closeButton = Ox.Button({ - title: 'close', - tooltip: Ox._('Close'), - type: 'image' - }) - .css({ - float: 'left', - margin: '4px 4px 4px 2px' - }) - .bindEvent({ - click: function() { - $list.options({selected: []}); - } - }), - - $item = Ox.Element().css({overflowY: 'scroll'}), - - $preview, - - $form, - - $itemToolbar = Ox.Bar({size: 24}), - - $deleteButton = Ox.Button({ - title: Ox._('Delete Document...'), - width: 128 - }) - .css({float: 'left', margin: '4px'}) - .hide() - .bindEvent({ - click: deleteDocuments - }) - .appendTo($itemToolbar), - - $addButton = Ox.Button({ - disabled: true, - id: 'add', - title: Ox._('Add'), - width: 48 - }).bindEvent({ - click: addDocuments - }), - $doneButton = Ox.Button({ id: 'done', title: Ox._('Done'), @@ -240,80 +17,13 @@ pandora.ui.documentsDialog = function() { } }), - $uploadButton = Ox.FileButton({ - title: Ox._('Upload Documents...'), - width: 128 - }) - .css({float: 'right', margin: '4px'}) - .bindEvent({ - click: uploadDocuments - }) - .appendTo($itemToolbar), - - $content = Ox.SplitPanel({ - elements: [ - { - element: Ox.SplitPanel({ - elements: [ - { - element: Ox.Bar({size: 24}) - .append($reloadButton) - .append($userCheckbox) - .append($findElement), - size: 24 - }, - { - element: $list - } - ], - orientation: 'vertical' - }) - }, - { - element: Ox.SplitPanel({ - elements: [ - { - element: Ox.Bar({size: 24}) - .append($itemLabel), - size: 24 - }, - { - element: $item - }, - { - element: $itemToolbar, - size: 24 - } - ], - orientation: 'vertical' - }) - .bindEvent({ - resize: setWidth - }), - resizable: true, - resize: [ - 272 + Ox.UI.SCROLLBAR_SIZE, - 400 + Ox.UI.SCROLLBAR_SIZE, - 528 + Ox.UI.SCROLLBAR_SIZE - ], - size: 272 + Ox.UI.SCROLLBAR_SIZE - } - ], - orientation: 'horizontal' + // reference in pandora.$ui needed to receive pandora_ events + $content = pandora.$ui.documentsDialogPanel = pandora.ui.documentsPanel({ + isItemView: false }), - $itemLabel = Ox.Label({ - textAlign: 'center', - title: Ox._('No document selected'), - width: getLabelWidth() - }) - .css({ - float: 'left', - margin: '4px' - }), - that = Ox.Dialog({ - buttons: pandora.user.ui.item ? [$addButton, $doneButton] : [$doneButton], + buttons: [$doneButton], closeButton: true, content: $content, height: dialogHeight, @@ -324,31 +34,12 @@ pandora.ui.documentsDialog = function() { removeOnClose: true, title: Ox._('Manage Documents'), width: dialogWidth - }), - - $status = $('
') - .css({ - position: 'absolute', - top: '4px', - left: '128px', - right: '384px', - bottom: '4px', - paddingTop: '2px', - fontSize: '9px', - textAlign: 'center' - }) - .appendTo(that.find('.OxButtonsbar')); - - that.superClose = that.close; - that.close = function() { - Ox.Request.clearCache('findDocuments'); - that.superClose(); - }; + }); function addDocuments() { pandora.api.addDocument({ item: pandora.user.ui.item, - ids: $list.options('selected') + ids: pandora.user.ui.documentsSelection[''] }, function() { Ox.Request.clearCache(); if (pandora.user.ui.itemView == 'documents') { @@ -360,207 +51,11 @@ pandora.ui.documentsDialog = function() { }); } - function deleteDocuments() { - pandora.ui.deleteDocumentDialog($list.options('selected'), function() { - Ox.Request.clearCache(pandora.user.ui.item ? void 0 : 'findDocuments'); - $list.reloadList(); - }).open(); - } - - function getLabelWidth() { - return $content.size(1) - (selected ? 48 : 8); - } - - function getPreviewSize() { - var ratio = $list.value(selected, 'ratio'), - height = ratio < 1 ? 256 : 256 / ratio, - width = ratio >= 1 ? 256 : 256 * ratio, - left = Math.floor((itemWidth - 16 - Ox.UI.SCROLLBAR_SIZE - width) / 2); - return { - height: height, - // fixme: CSS gets applied twice, to image and enclosing element - margin: [8, 8, 8, 8 + left].map(function(px) { - return px / 2 + 'px'; - }).join(' '), - width: width - }; - } - - function renderForm() { - var file = $list.value(selected), - editable = file.user == pandora.user.username - || pandora.site.capabilities.canEditMedia[pandora.user.level]; - return Ox.Form({ - items: [ - Ox.Input({ - disabled: true, - id: 'username', - label: Ox._('Username'), - labelWidth: 80, - value: file.user, - width: itemWidth - 16 - Ox.UI.SCROLLBAR_SIZE - }), - Ox.Input({ - disabled: !editable, - id: 'name', - label: Ox._('Filename'), - labelWidth: 80, - value: file.name, - width: itemWidth - 16 - Ox.UI.SCROLLBAR_SIZE - }), - Ox.Input({ - disabled: true, - id: 'extension', - label: Ox._('Extension'), - labelWidth: 80, - value: file.extension, - width: itemWidth - 16 - Ox.UI.SCROLLBAR_SIZE - }), - Ox.Input({ - disabled: true, - id: 'size', - label: Ox._('Size'), - labelWidth: 80, - value: Ox.formatValue(file.size, 'B'), - width: itemWidth - 16 - Ox.UI.SCROLLBAR_SIZE - }), - Ox.Input({ - disabled: true, - id: 'matches', - label: Ox._('Matches'), - labelWidth: 80, - value: file.matches, - width: itemWidth - 16 - Ox.UI.SCROLLBAR_SIZE - }), - Ox.Input({ - disabled: !editable, - height: 256, - id: 'description', - placeholder: Ox._('Description'), - type: 'textarea', - value: file.description, - width: itemWidth - 16 - Ox.UI.SCROLLBAR_SIZE - }) - ], - width: 240 - }) - .css({margin: '12px 8px 8px 8px'}) - .bindEvent({ - change: function(event) { - var data = Ox.extend({id: file.id}, event.id, event.data.value); - pandora.api.editDocument(data, function(result) { - $list.value(result.data.id, event.id, result.data[event.id]); - if (event.id == 'name') { - $list.value(file.id, 'id', result.data.id); - } - Ox.Request.clearCache('findDocuments'); - $list.reloadList(); - }); - } - }); - } - - function renderPreview() { - var size = getPreviewSize(), - src = '/documents/' + selected + '/256p.jpg'; - return Ox.ImageElement({ - height: size.height, - src: src, - width: size.width - }) - .css({ - margin: size.margin, - borderRadius: '8px' - }) - .on({ - click: function() { - var info = $list.value(selected), - url = '/documents/' + selected + '/' + info.name + '.' + info.extension; - window.open(url, '_blank'); - } - }); - } - - function selectFile() { - var file = $list.value(selected), - editable = file.user == pandora.user.username - || pandora.site.capabilities.canEditMedia[pandora.user.level]; - $embedButton[selected ? 'show' : 'hide'](); - $closeButton[selected ? 'show' : 'hide'](); - setLabel(); - $item.empty(); - if (selected) { - $preview = renderPreview().appendTo($item); - $form = renderForm().appendTo($item); - $deleteButton.options({disabled: !editable}).show(); - } else { - $deleteButton.hide(); - } - } - - function setLabel() { - $itemLabel.options({ - title: selected - ? selected.split(':').slice(1).join(':') - : Ox._('No document selected'), - width: getLabelWidth() - }); - } - - function setWidth() { - var size; - $itemLabel.options({width: getLabelWidth()}); - if (selected) { - size = getPreviewSize(), - $preview.options({ - height: size.height, - width: size.width - }).css({ - margin: size.margin - }); - $form.options('items').forEach(function($item) { - $item.options({width: itemWidth - 16 - Ox.UI.SCROLLBAR_SIZE}); - }); - } - $status.css({right: itemWidth + 128 + 'px'}); - } - - function updateList() { - var user = $userCheckbox.value(), - key = $findSelect.value(), - value = $findInput.value(), - query = { - conditions: value - ? [].concat( - key != 'name' ? [{key: 'user', value: value, operator: '='}] : [], - key != 'user' ? [{key: 'name', value: value, operator: '='}] : [] - ) - : [], - operator: '|' - }; - $list.options({query: user ? { - conditions: [ - {key: 'user', value: pandora.user.username, operator: '='}, - query - ], - operator: '&' - } : query}); - } - - function uploadDocuments(data) { - pandora.ui.uploadDocumentDialog(data.files, function(files) { - if (files) { - Ox.Request.clearCache('findDocuments'); - $list.bindEventOnce({ - load: function() { - $list.options({selected: [files.ids]}); - // selectFile(file.id); - } - }); - $list.reloadList(); - } - }).open(); - } + that.superClose = that.close; + that.close = function() { + Ox.Request.clearCache('findDocuments'); + that.superClose(); + }; return that; diff --git a/static/js/documentsPanel.js b/static/js/documentsPanel.js index d1fe572fb..a03c0586e 100644 --- a/static/js/documentsPanel.js +++ b/static/js/documentsPanel.js @@ -6,7 +6,7 @@ pandora.ui.documentsPanel = function(options) { var ui = pandora.user.ui, hasItemView = false, - isItemView = true, + isItemView = options.isItemView, columns = [ { @@ -105,18 +105,23 @@ pandora.ui.documentsPanel = function(options) { $listBar = Ox.Bar({size: 24}), - $addButton = Ox.Button({ - title: isItemView ? 'add' : 'upload', - tooltip: Ox._(isItemView ? 'Add Documents...' : 'Upload Documents...'), + $addButton = (isItemView ? Ox.Button({ + title: 'add', + tooltip: Ox._('Add Documents...'), + type: 'image' + }) : Ox.FileButton({ + image: 'upload', + tooltip: Ox._('Upload Documents...'), type: 'image' }) + ) .css({float: 'left', margin: '4px 2px 4px 4px'}) .bindEvent({ - click: function() { + click: function(data) { if (isItemView) { editDocuments(); } else { - + uploadDocuments(data); } } }) @@ -266,10 +271,17 @@ pandora.ui.documentsPanel = function(options) { .css({float: 'left', margin: '4px'}) .bindEvent({ click: function(data) { - if (data.id == 'open') { + if (data.id == 'addtoitem') { + addToItem(); + } else if (data.id == 'addtolist') { + addToList(); + } else if (data.id == 'open') { openDocuments(); } else if (data.id == 'edit') { editDocuments(); + } else if (data.id == 'replace') { + console.log('replace', data); + replaceDocument(data.files); } else if (data.id == 'remove') { removeDocuments(); } else if (data.id == 'delete') { @@ -339,11 +351,14 @@ pandora.ui.documentsPanel = function(options) { .bindEvent({ resize: function(data) { ui.documentSize = data.size; + //fixme: resize preview panel }, resizeend: function(data) { // set to 0 so that UI.set registers a change of the value ui.documentSize = 0; pandora.UI.set({documentSize: data.size}); + //fixme: resize preview panel instead + selectDocuments(); }, toggle: function(data) { pandora.UI.set({showDocument: !data.collapsed}); @@ -390,6 +405,36 @@ pandora.ui.documentsPanel = function(options) { pandora.$ui.documentsDialog = pandora.ui.documentsDialog().open(); } + function addToItem() { + pandora.api.addDocument({ + item: ui.item, + ids: ui.documentsSelection[''] + }, function() { + Ox.Request.clearCache(); + if (ui.itemView == 'documents') { + //fixme just upload list here + //self.$documentsList.reloadList(); + pandora.$ui.contentPanel.replaceElement(1, + pandora.$ui.item = pandora.ui.item()); + } + }); + } + + function addToList() { + pandora.api.addDocument({ + list: ui._list, + ids: ui.documentsSelection[''] + }, function() { + Ox.Request.clearCache(); + if (ui.item && ui.itemView == 'documents') { + //fixme just upload list here + //self.$documentsList.reloadList(); + pandora.$ui.contentPanel.replaceElement(1, + pandora.$ui.item = pandora.ui.item()); + } + }); + } + function closeDocuments() { if (pandora.$ui.documentDialog) { pandora.$ui.documentDialog.close(); @@ -457,6 +502,10 @@ pandora.ui.documentsPanel = function(options) { } } + function replaceDocument(file) { + var id = $list.options('selected')[0]; + } + function removeDocuments() { pandora.api.removeDocument({ item: ui.item, diff --git a/static/js/documentsView.js b/static/js/documentsView.js index 1e267b977..11c547a65 100644 --- a/static/js/documentsView.js +++ b/static/js/documentsView.js @@ -4,7 +4,9 @@ pandora.ui.documentsView = function(options, self) { - var that = pandora.ui.documentsPanel(); + var that = pandora.ui.documentsPanel({ + isItemView: true + }); return that; var self = self || {},