/** * Service which provides helper methods for performing some simple UI operations. */ angular.module('quay').factory('UIService', [function() { var CheckStateController = function(items, opt_checked) { this.items = items; this.checked = opt_checked || []; this.listeners_ = []; }; CheckStateController.prototype.listen = function(callback) { this.listeners_.push(callback); }; CheckStateController.prototype.isChecked = function(item) { return $.inArray(item, this.checked) >= 0; }; CheckStateController.prototype.toggleItem = function(item) { if (this.isChecked(item)) { this.uncheckItem(item); } else { this.checkItem(item); } }; CheckStateController.prototype.toggleItems = function() { if (this.checked.length) { this.checked = []; } else { this.checked = this.items.slice(); } this.callListeners_(); }; CheckStateController.prototype.checkByFilter = function(filter) { this.checked = $.grep(this.items, filter); this.callListeners_(); }; CheckStateController.prototype.checkItem = function(item) { this.checked.push(item); this.callListeners_(); }; CheckStateController.prototype.uncheckItem = function(item) { this.checked = $.grep(this.checked, function(cItem) { return cItem != item; }); this.callListeners_(); }; CheckStateController.prototype.callListeners_ = function() { var checked = this.checked; this.listeners_.map(function(listener) { listener(checked); }); }; var uiService = {}; uiService.hidePopover = function(elem) { var popover = $(elem).data('bs.popover'); if (popover) { popover.hide(); } }; uiService.showPopover = function(elem, content, opt_placement) { var popover = $(elem).data('bs.popover'); if (!popover) { $(elem).popover({'content': '-', 'placement': opt_placement || 'left'}); } setTimeout(function() { var popover = $(elem).data('bs.popover'); popover.options.content = content; popover.show(); }, 500); }; uiService.showFormError = function(elem, result, opt_placement) { var message = result.data['message'] || result.data['error_description'] || ''; if (message) { uiService.showPopover(elem, message, opt_placement); } else { uiService.hidePopover(elem); } }; uiService.createCheckStateController = function(items, opt_checked) { return new CheckStateController(items, opt_checked); }; uiService.showPasswordDialog = function(message, callback, opt_canceledCallback) { var success = function() { var password = $('#passDialogBox').val(); $('#passDialogBox').val(''); callback(password); }; var canceled = function() { $('#passDialogBox').val(''); opt_canceledCallback && opt_canceledCallback(); }; var box = bootbox.dialog({ "message": message + '
' + '' + '
', "title": 'Please Verify', "buttons": { "verify": { "label": "Verify", "className": "btn-success", "callback": success }, "close": { "label": "Cancel", "className": "btn-default", "callback": canceled } } }); box.bind('shown.bs.modal', function(){ box.find("input").focus(); box.find("form").submit(function() { if (!$('#passDialogBox').val()) { return; } box.modal('hide'); success(); }); }); }; return uiService; }]);