diff --git a/rename_annotations.js b/rename_annotations.js new file mode 100644 index 0000000..3cbd441 --- /dev/null +++ b/rename_annotations.js @@ -0,0 +1,185 @@ +pandora.ui.renameAnnotationDialog = function() { + + var dialogHeight = 100, + dialogWidth = 512 + 16, + formWidth = getFormWidth(), + + $button, + $content = Ox.Element(), + old, + value, + layer = pandora.site.layers[0].id, + $input = [ + Ox.Select({ + label: Ox._('Layer'), + labelWidth: 96, + width: 512, + items: pandora.site.layers, + }).css({ + margin: '8px' + }).bindEvent({ + change: function(data) { + layer = data.value; + } + }).appendTo($content), + Ox.Input({ + label: Ox._('From'), + labelWidth: 96, + width: 512 + }).css({ + margin: '8px' + }).bindEvent({ + change: function(data) { + $button.options({disabled: !data.value && !value}); + old = data.value; + } + }).appendTo($content), + Ox.Input({ + label: Ox._('To'), + labelWidth: 96, + width: 512 + }).css({ + margin: '8px' + }).bindEvent({ + change: function(data) { + $button.options({disabled: !data.value && !old}); + value = data.value; + } + }).appendTo($content) + ], + + that = Ox.Dialog({ + buttons: [ + Ox.Button({ + id: 'cancel', + title: Ox._('Cancel') + }) + .bindEvent({ + click: function() { + that.close(); + } + }), + $button = Ox.Button({ + disabled: true, + id: 'update', + title: Ox._('Rename Annotation') + }) + .bindEvent({ + click: function() { + that.options({content: Ox.LoadingScreen().start()}); + renameAnnotation(layer, old, value, function() { + Ox.Request.clearCache(); + that.close(); + }) + } + }) + ], + closeButton: true, + content: $content, + height: dialogHeight, + removeOnClose: true, + title: Ox._('Change Annotation'), + width: dialogWidth + }) + .bindEvent({ + resize: setSize + }); + + function getFormWidth() { + return dialogWidth - 32 - Ox.UI.SCROLLBAR_SIZE; + } + + function setSize(data) { + dialogHeight = data.height; + dialogWidth = data.width; + formWidth = getFormWidth(); + $input.forEach(function($element) { + $element.options({width: formWidth}); + }); + } + + function renameAnnotation(layer, old, value, callback) { + pandora.api.findAnnotations({ + 'query': { + 'conditions': [{ + 'key': 'value', + 'value': old, + 'operator': '==' + }, + { + 'key': 'layer', + 'value': layer, + 'operator': '==' + }], + 'operator': '&' + }, + 'keys': ['id', 'in', 'out', 'value', 'user', 'created'], + 'range': [0, 500000] + }, function(result) { + console.log('got annots', result.data.items); + Ox.serialForEach(result.data.items, function(annotation, index, array, next) { + pandora.api.editAnnotation({ + id: annotation.id, + value: value + }, function(result) { + next() + }) + }, function() { + callback() + }) + }) + } + + return that; +}; + +(function() { + var plugins = []; + + plugins.push(ExtrasMenu()); + + plugins.length && load(); + + function load() { + patchReload(); + plugins.forEach(function(plugin) { plugin.load() }); + } + + function patchReload() { + var reload = pandora.$ui.appPanel.reload; + pandora.$ui.appPanel.reload = function() { + reload(); + load(); + } + } + + function ExtrasMenu() { + var that = {}; + + var css = { + //margin: '2px', + }, + $item = Ox.MenuButton({ + items: [ + {id: 'rename', title: 'Rename Annotation...'}, + ], + style: 'rounded', + title: 'set', + tooltip: Ox._('Extras'), + type: 'image' + }).css(css).bindEvent({ + click: function(data) { + if (data.id == 'rename') { + pandora.ui.renameAnnotationDialog().open() + } + }, + }), + plugins = []; + + that.load = function() { + pandora.$ui.mainMenu.find('.OxExtras').prepend($item); + pandora.$ui.extraItem = $item; + }; + return that; + } +})();