138 lines
3.6 KiB
JavaScript
138 lines
3.6 KiB
JavaScript
/**
|
|
* 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 +
|
|
'<form style="margin-top: 10px" action="javascript:void(0)">' +
|
|
'<input id="passDialogBox" class="form-control" type="password" placeholder="Current Password">' +
|
|
'</form>',
|
|
"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;
|
|
}]);
|