UNPKG

zettapi_client

Version:

Client side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project

194 lines (145 loc) 4.94 kB
/*! angular-inform v0.0.18 (c) 2014 (null) McNull https://github.com/McNull/angular-inform License: MIT */ (function(angular) { var inform = angular.module('inform', []); inform.controller('InformCtrl', ["$scope", "inform", function($scope, inform) { $scope.messages = inform.messages(); $scope.remove = inform.remove; $scope.cancelTimeout = inform.cancelTimeout; $scope.setTimeout = inform.setTimeout; }]); inform.directive('inform', function () { return { restrict: 'AE', templateUrl: 'angular-inform/directive.ng.html', controller: 'InformCtrl' }; }); inform.provider('inform', function () { var provider = this; this._defaults = { type: 'default', ttl: 5000 }; this.defaults = function (options) { provider._defaults = angular.extend(provider._defaults, options || {}); return provider._defaults; }; this.$get = ['$timeout', '$sce', function ($timeout, $sce) { var _messages = []; function _indexOf(predicate) { var i = _messages.length; while (i--) { if (predicate(_messages[i])) { return i; } } return -1; } function cancelTimeout(msg) { if (msg.timeout) { $timeout.cancel(msg.timeout); delete msg.timeout; } } function setTimeout(msg) { cancelTimeout(msg); if (msg.ttl > 0) { msg.timeout = $timeout(function () { remove(msg); }, msg.ttl); } } function add(content, options) { var msg = angular.extend({}, provider._defaults, options); if(!angular.isString(content)) { content = '<pre><code>' + JSON.stringify(content, null, ' ') + '</code></pre>'; msg.html = true; } var idx = _indexOf(function (x) { return x.content.toString() === content && x.type == msg.type; }); if (idx >= 0) { msg = _messages[idx]; msg.count += 1; } else { msg.content = content; if(msg.html) { msg.content = $sce.trustAsHtml(content); } msg.tickCount = +new Date(); msg.count = 1; _messages.push(msg); } setTimeout(msg); return msg; } function remove(msg) { var idx = _indexOf(function (x) { return x === msg; }); if (idx >= 0) { _messages.splice(idx, 1); cancelTimeout(msg); } } function clear() { _messages.length = 0; } return { messages: function () { return _messages; }, add: add, remove: remove, clear: clear, cancelTimeout: cancelTimeout, setTimeout: setTimeout }; }]; }); angular.module('inform-exception', ['inform']) .config(["$provide", function($provide) { $provide.decorator('$exceptionHandler', ['$delegate', '$injector',function($delegate, $injector) { var inform; return function(exception, cause) { try { inform = inform || $injector.get('inform'); inform.add(exception.toString(), { type: 'danger', ttl: 0 }); } catch(ex) { console.log('$exceptionHandler', ex); } $delegate(exception, cause); }; }]); }]); angular.module('inform-http-exception', ['inform']) .factory('informHttpInterceptor', ["$q", "inform", function ($q, inform) { function interceptor(rejection) { try { var msg = 'Network error (' + rejection.status + '): ' + rejection.statusText; inform.add(msg, { type: 'danger', ttl: 0}); } catch(ex) { console.log('$httpProvider', ex); } return $q.reject(rejection); } return { requestError: interceptor, responseError: interceptor }; }]) .config(["$httpProvider", function ($httpProvider) { $httpProvider.interceptors.push('informHttpInterceptor'); }]); // Automatically generated. // This file is already embedded in your main javascript output, there's no need to include this file // manually in the index.html. This file is only here for your debugging pleasures. angular.module('inform').run(['$templateCache', function($templateCache){ $templateCache.put('angular-inform/directive.ng.html', '<div class=\"inform\"><div ng-repeat=\"msg in messages | orderBy:\'-tickCount\'\" class=\"inform-message-wrap\"><div class=\"inform-message alert alert-{{ msg.type }} alert-dismissible\" role=\"alert\" ng-mouseenter=\"cancelTimeout(msg)\" ng-mouseleave=\"setTimeout(msg)\"><button type=\"button\" class=\"close\" ng-click=\"remove(msg)\"><span>&times;</span></button> <span class=\"inform-message-content\"><span class=\"badge inform-badge\" ng-if=\"msg.count > 1\">{{ msg.count }}</span> <span ng-if=\"msg.html\" ng-bind-html=\"msg.content\"></span> <span ng-if=\"!msg.html\" ng-bind=\"msg.content\"></span></span></div></div></div>'); }]); })(angular); //# sourceMappingURL=angular-inform.js.map