| 'use strict'; |
| |
| define( |
| |
| [ |
| 'flight/lib/component', |
| './with_select' |
| ], |
| |
| function(defineComponent, withSelect) { |
| |
| return defineComponent(moveToSelector, withSelect); |
| |
| function moveToSelector() { |
| |
| this.defaultAttrs({ |
| selectionChangedEvent: 'uiMoveToSelectionChanged', |
| selectedMailItems: [], |
| selectedFolders: [], |
| //selectors |
| itemSelector: 'li.move-to-item', |
| selectedItemSelector: 'li.move-to-item.selected' |
| }); |
| |
| this.requestSelectorWidget = function(ev, data) { |
| this.trigger('uiAvailableFoldersRequested', { |
| folder: this.attr.selectedFolders[0] |
| }) |
| }; |
| |
| this.launchSelector = function(ev, data) { |
| var controlPosition = $(this.attr.moveActionSelector).offset(); |
| this.$node.html(data.markup).show().css({ |
| left: controlPosition.left, |
| top: controlPosition.top + $(this.attr.moveActionSelector).outerHeight(), |
| width: $(this.attr.moveActionSelector).outerWidth() |
| }); |
| window.setTimeout( |
| (function() { |
| this.on(document, 'click', this.hideSelector) |
| }).bind(this), 0); |
| }; |
| |
| this.hideSelector = function() { |
| this.off(document, 'click', this.hideSelector); |
| this.$node.hide(); |
| } |
| |
| this.updateMailItemSelections = function(ev, data) { |
| this.attr.selectedMailItems = data.selectedIds; |
| } |
| |
| this.updateFolderSelections = function(ev, data) { |
| this.attr.selectedFolders = data.selectedIds; |
| } |
| |
| this.requestMoveTo = function(ev, data) { |
| this.trigger('uiMoveItemsRequested', { |
| itemIds: this.attr.selectedMailItems, |
| fromFolder: this.attr.selectedFolders[0], |
| toFolder: data.selectedIds[0] |
| }); |
| this.$node.hide(); |
| }; |
| |
| this.after('initialize', function() { |
| //show selector widget |
| this.on(document, 'uiMoveMail', this.requestSelectorWidget); |
| this.on(document, 'dataMoveToItemsServed', this.launchSelector); |
| //listen for other selections |
| this.on(document, 'uiMailItemSelectionChanged', this.updateMailItemSelections); |
| this.on(document, 'uiFolderSelectionChanged', this.updateFolderSelections); |
| //move items |
| this.on('uiMoveToSelectionChanged', this.requestMoveTo); |
| |
| }); |
| } |
| } |
| ); |