UNPKG

sheercms

Version:

Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.

206 lines (173 loc) 6.45 kB
var LinkSelectorController = function ($scope, $q, $modalInstance, ContentService, GroupService, HelperService, title, statuses, value, groups, onLoadItems) { $scope.dialog = { title: title || "Link Selector", selectedItem: null, message: "", messageType: "", disableOk: true }; $scope.data = { allowedStatuses: statuses, items: [], groups: [], group: null, selectedItem: null, selectionLabel: "Selected Item:" }; $scope.linkProps = { text: "", newWindow: false, tooltip: "", cssClass: "" }; $scope.paging = { pageSize: 10, pageNum: 1, pageCount: 0, paginate: function(num) { loadItems($scope.data.group._id, num); } }; $scope.$watch(function(scope) { return scope.data.group; }, function() { if ($scope.data.group) loadItems($scope.data.group._id, 1); } ); $scope.ok = function () { if ($scope.data.selectedItem !== null) { var item = $scope.data.selectedItem; var props = $scope.linkProps; var obj = { contentId: item.contentId, name: item.name, url: item.url, text: props.text, tooltip: props.tooltip, cssClass: props.cssClass, target: props.newWindow === true ? "_blank" : "" }; $modalInstance.close(obj); } else { $modalInstance.close(null); } }; $scope.cancel = function () { $modalInstance.dismiss('cancel'); }; $scope.selectItem = function(item) { if (isEnabled(item)) { if ($scope.data.selectedItem === null || item.contentId !== $scope.data.selectedItem.contentId) { $scope.data.selectedItem = item; $scope.linkProps.text = item.name; } } }; $scope.unSelectItem = function() { $scope.data.selectedItem = null; }; function isEnabled(item) { if ($scope.data.allowedStatuses === null || $scope.data.allowedStatuses.indexOf(item.status) < 0) return false; else return true; } function loadGroups() { var d = $q.defer(); GroupService.list("content,media", null).then(function(result) { if (result && result.success === true) { //load groups hash var hash = HelperService.toBoolHash(groups); var hasGroups = (groups && groups.length > 0); //only add groups that the user has read access to $scope.data.groups = []; for(var i = 0; i < result.groups.length; i++) { var g = result.groups[i]; if (g.rights && g.rights.read == true) { if (hasGroups === true) { //see if this group is in the groups hash if (hash[g.name] === true) $scope.data.groups.push(g); } else $scope.data.groups.push(g); } } } else if (result) { setMessage(result.message, 'alert-danger', false); } else { setMessage('An unknown error occurred.', 'alert-danger', false); } d.resolve(); }); return d.promise; } function loadItems(groupId, pageNumber) { $scope.paging.pageNum = pageNumber; //load the items in this group ContentService.getItems(groupId, pageNumber, $scope.paging.pageSize, true).then(function(data) { setMessage(data.message, data.success == true ? "alert-success" : "alert-danger"); if (data.success && data.items) { for(var i = 0; i < data.items.length; i++) { var item = data.items[i]; item.statusCss = ContentService.getItemStatusCss(item.status); item.ui = {}; item.ui.enabled = true; if (!isEnabled(item)) { item.ui.enabled = false; item.ui.tooltip = "This item cannot be selected due to it's status"; } } if (onLoadItems && typeof onLoadItems === 'function') onLoadItems(data.items); $scope.data.items = data.items; //set the paging data $scope.paging.pageCount = Math.ceil(data.total / $scope.paging.pageSize); $scope.paging.pageNum = pageNumber; } else $scope.data.items = []; }); }; function clearMessage() { $scope.dialog.message = ""; $scope.dialog.messageType = ""; } function setMessage(msg, type) { $scope.dialog.message = msg; $scope.dialog.messageType = type; } function init() { if (value) { $scope.linkProps.text = value.text; $scope.linkProps.tooltip = value.tooltip; $scope.linkProps.cssClass = value.cssClass; $scope.linkProps.newWindow = value.target === "_blank"; if (value.contentId && value.contentId.length > 0) { //load the content item ContentService.getContent(value.contentId, false).then(function(result) { if (result && result.success && result.item) { $scope.data.selectedItem = result.item; } else if (result && result.success === false) { setMessage(result.message, "alert-danger"); } else { setMessage("Could not load the selected item: " + value.contentId); } }); } } loadGroups().then(function() { if ($scope.data.groups && $scope.data.groups.length > 0) { //load the items from the first group in the list $scope.data.group = $scope.data.groups[0]; } }); } init(); };