Files
greenhouse-MyController/www/libs/angular-dashboard-framework/dist/angular-dashboard-framework.min.js

3 lines
18 KiB
JavaScript

!function(e,t){"use strict";angular.module("adf",["adf.provider","ui.bootstrap"]).value("adfTemplatePath","../src/templates/").value("rowTemplate",'<adf-dashboard-row row="row" adf-model="adfModel" options="options" edit-mode="editMode" ng-repeat="row in column.rows" />').value("columnTemplate",'<adf-dashboard-column column="column" adf-model="adfModel" options="options" edit-mode="editMode" ng-repeat="column in row.columns" />').value("adfVersion","0.11.0"),angular.module("adf").directive("adfDashboardColumn",["$log","$compile","$rootScope","adfTemplatePath","rowTemplate","dashboard",function(e,t,i,o,l,a){function d(e,t,o){var l=t.widgets;e.$apply(function(){l.splice(o.newIndex,0,l.splice(o.oldIndex,1)[0]),i.$broadcast("adfWidgetMovedInColumn")})}function n(e,t){for(var i=null,o=0;o<e.widgets.length;o++){var l=e.widgets[o];if(a.idEquals(l.wid,t)){i=l;break}}return i}function r(e,t){for(var i=null,o=0;o<e.rows.length;o++){for(var l=e.rows[o],d=0;d<l.columns.length;d++){var n=l.columns[d];if(a.idEquals(n.cid,t)){i=n;break}n.rows&&(i=r(n,t))}if(i)break}return i}function s(e){var t=e.getAttribute("adf-id");return t?t:"-1"}function c(t,o,l,a){var d=s(a.from),c=r(o,d);if(c){var u=s(a.item),g=n(c,u);g?t.$apply(function(){l.widgets||(l.widgets=[]),l.widgets.splice(a.newIndex,0,g),i.$broadcast("adfWidgetAddedToColumn")}):e.warn("could not find widget with id "+u)}else e.warn("could not find column with id "+d)}function u(e,t,o){e.$apply(function(){t.widgets.splice(o.oldIndex,1),i.$broadcast("adfWidgetRemovedFromColumn")})}function g(e,t,i,o){var l=t[0],a=Sortable.create(l,{group:"widgets",handle:".adf-move",ghostClass:"placeholder",animation:150,onAdd:function(t){c(e,i,o,t)},onRemove:function(t){u(e,o,t)},onUpdate:function(t){d(e,o,t)}});t.on("$destroy",function(){a.el&&a.destroy()})}return{restrict:"E",replace:!0,scope:{column:"=",editMode:"=",continuousEditMode:"=",adfModel:"=",options:"="},templateUrl:o+"dashboard-column.html",link:function(e,i){var o=e.column;o.cid||(o.cid=a.id()),angular.isDefined(o.rows)&&angular.isArray(o.rows)?t(l)(e,function(e){i.append(e)}):g(e,i,e.adfModel,o)}}}]),angular.module("adf").directive("adfDashboard",["$rootScope","$log","$timeout","$uibModal","dashboard","adfTemplatePath",function(e,t,i,o,l,a){function d(e){switch(angular.isDefined(e)?e.toLowerCase():null){case"true":case"yes":case"1":return!0;case"false":case"no":case"0":case null:return!1;default:return Boolean(e)}}function n(e,t){if(e.widgets&&e.widgets.length>0)for(var i=e.widgets.shift();i;)t.widgets.push(i),i=e.widgets.shift()}function r(e,t,i){return i=i||0,angular.isDefined(e.rows)&&angular.forEach(e.rows,function(e){angular.forEach(e.columns,function(e){e.widgets||(e.widgets=[]),angular.isDefined(t[i])&&(angular.isDefined(e.rows)||(n(t[i],e),i++)),i=r(e,t,i)})}),i}function s(e,t){return t=t||[],angular.isDefined(e.rows)&&angular.forEach(e.rows,function(e){angular.forEach(e.columns,function(e){t.push(e),s(e,t)})}),t}function c(e,t){var i=s(e),o=0;for(e.rows=angular.copy(t.rows);o<i.length;)o=r(e,i,o)}function u(e){var t={},i=l.widgets[e].config;return i&&(t=angular.copy(i)),t}function g(e){var i=null;if(!angular.isArray(e.rows))return t.error("model does not have any rows"),null;for(var o=0;o<e.rows.length;o++){var l=e.rows[o];if(angular.isArray(l.columns))for(var a=0;a<l.columns.length;a++){var d=l.columns[a];if(!d.rows){i=d;break}}if(i)break}return i}function f(i,o,l){if(i){var a=g(i);a?(a.widgets||(a.widgets=[]),a.widgets.unshift(o),e.$broadcast("adfWidgetAdded",l,i,o)):t.error("could not find first widget column")}else t.error("model is undefined")}function p(e){var t=l.widgets[e];return t&&t.edit&&t.edit.immediate}function m(e,t){i(function(){e.$broadcast("adfWidgetEnterEditMode",t)},200)}return{replace:!0,restrict:"EA",transclude:!1,scope:{structure:"@",name:"@",collapsible:"@",editable:"@",editMode:"@",continuousEditMode:"=",maximizable:"@",adfModel:"=",adfWidgetFilter:"="},controller:["$scope",function(i){var d={},n={},r=null,s={},g=i.name;i.$watch("adfModel",function(e,o){(null!==o||null===e&&null===o)&&(d=i.adfModel,r=i.adfWidgetFilter,d&&d.rows||(s=i.structure,n=l.structures[s],n?(d?d.rows=angular.copy(n).rows:d=angular.copy(n),d.structure=s):t.error("could not find structure "+s)),d?(d.title||(d.title="Dashboard"),d.titleTemplateUrl||(d.titleTemplateUrl=a+"dashboard-title.html"),i.model=d):t.error("could not find or create model"))},!0),i.editMode=!1,i.editClass="",i.toggleEditMode=function(){i.editMode=!i.editMode,i.editMode&&(i.continuousEditMode||(i.modelCopy=angular.copy(i.adfModel,{}),e.$broadcast("adfIsEditMode"))),i.editMode||e.$broadcast("adfDashboardChanged",g,d)},i.$on("adfToggleEditMode",function(){i.toggleEditMode()}),i.collapseAll=function(t){e.$broadcast("adfDashboardCollapseExpand",{collapseExpandStatus:t})},i.cancelEditMode=function(){i.editMode=!1,i.continuousEditMode||(i.modelCopy=angular.copy(i.modelCopy,i.adfModel)),e.$broadcast("adfDashboardEditsCancelled")},i.editDashboardDialog=function(){var e=i.$new();e.copy={title:d.title},e.structures=l.structures;var n=a+"dashboard-edit.html";d.editTemplateUrl&&(n=d.editTemplateUrl);var r=o.open({scope:e,templateUrl:n,backdrop:"static"});e.changeStructure=function(e,i){t.info("change structure to "+e),c(d,i)},e.closeDialog=function(){d.title=e.copy.title,r.close(),e.$destroy()}},i.addWidgetDialog=function(){var e,t=i.$new(),d=i.model;angular.isFunction(r)?(e={},angular.forEach(l.widgets,function(t,i){r(t,i,d)&&(e[i]=t)})):e=l.widgets,t.widgets=e;var n=a+"widget-add.html";d.addTemplateUrl&&(n=d.addTemplateUrl);var s={scope:t,templateUrl:n,backdrop:"static"},c=o.open(s);t.addWidget=function(e){var o={type:e,config:u(e)};f(d,o,g),c.close(),t.$destroy(),p(e)&&m(i,o)},t.closeDialog=function(){c.close(),t.$destroy()}},i.addNewWidgetToModel=f}],link:function(e,t,i){var o={name:i.name,editable:!0,enableConfirmDelete:d(i.enableconfirmdelete),maximizable:d(i.maximizable),collapsible:d(i.collapsible)};angular.isDefined(i.editable)&&(o.editable=d(i.editable)),e.options=o},templateUrl:a+"dashboard.html"}}]),angular.module("adf.provider",[]).provider("dashboard",function(){var e={},t="",i={},o='<div class="alert alert-danger">{}</div>',l=' <div class="progress progress-striped active">\n <div class="progress-bar" role="progressbar" style="width: 100%">\n <span class="sr-only">loading ...</span>\n </div>\n </div>',a=function(){return!0};this.widget=function(t,i){var o=angular.extend({reload:!1,frameless:!1},i);if(o.edit){var l={reload:!0,immediate:!1,apply:a};angular.extend(l,o.edit),o.edit=l}return e[t]=o,this},this.widgetsPath=function(e){return t=e,this},this.structure=function(e,t){return i[e]=t,this},this.messageTemplate=function(e){return o=e,this},this.loadingTemplate=function(e){return l=e,this},this.$get=function(){var a=0;return{widgets:e,widgetsPath:t,structures:i,messageTemplate:o,loadingTemplate:l,id:function(){return(new Date).getTime()+"-"+ ++a},idEquals:function(e,t){return e&&t&&e.toString()===t.toString()}}}}),angular.module("adf").directive("adfDashboardRow",["$compile","adfTemplatePath","columnTemplate",function(e,t,i){return{restrict:"E",replace:!0,scope:{row:"=",adfModel:"=",editMode:"=",continuousEditMode:"=",options:"="},templateUrl:t+"dashboard-row.html",link:function(t,o){angular.isDefined(t.row.columns)&&angular.isArray(t.row.columns)&&e(i)(t,function(e){o.append(e)})}}}]),angular.module("adf").directive("adfWidgetContent",["$log","$q","$sce","$http","$templateCache","$compile","$controller","$injector","dashboard",function(e,t,i,o,l,a,d,n,r){function s(e){var t=e;return e.indexOf("{widgetsPath}")>=0&&(t=e.replace("{widgetsPath}",r.widgetsPath).replace("//","/"),0===t.indexOf("/")&&(t=t.substring(1))),t}function c(e){var a=t.defer();if(e.template)a.resolve(e.template);else if(e.templateUrl){var d=l.get(e.templateUrl);if(d)a.resolve(d);else{var n=i.getTrustedResourceUrl(s(e.templateUrl));o.get(n).success(function(t){l.put(e.templateUrl,t),a.resolve(t)}).error(function(){a.reject("could not load template")})}}return a.promise}function u(i,o,l){var s=i.model,u=i.content;o.html(r.loadingTemplate);var g=i.$new();s.config||(s.config={}),g.config=s.config;var f={$scope:g,widget:s,config:s.config},p={};return p.$tpl=c(u),u.resolve&&angular.forEach(u.resolve,function(e,t){angular.isString(e)?p[t]=n.get(e):p[t]=n.invoke(e,e,f)}),t.all(p).then(function(e){angular.extend(e,f);var t=e.$tpl;if(o.html(t),u.controller){var i=d(u.controller,e);u.controllerAs&&(g[u.controllerAs]=i),o.children().data("$ngControllerController",i)}a(o.contents())(g)},function(t){var i="Could not resolve all promises";t&&(i+=": "+t),e.warn(i),o.html(r.messageTemplate.replace(/{}/g,i))}),l&&l.$destroy(),g}return{replace:!0,restrict:"EA",transclude:!1,scope:{model:"=",content:"="},link:function(e,t){var i=u(e,t,null);e.$on("widgetConfigChanged",function(){i=u(e,t,i)}),e.$on("widgetReload",function(){i=u(e,t,i)})}}}]),angular.module("adf").directive("adfWidget",["$injector","$q","$log","$uibModal","$rootScope","dashboard","adfTemplatePath",function(e,t,i,o,l,a,d){function n(e){var t=e.definition;if(t){var o=a.widgets[t.type];if(o){t.title||(t.title=o.title),t.titleTemplateUrl||(t.titleTemplateUrl=d+"widget-title.html",o.titleTemplateUrl&&(t.titleTemplateUrl=o.titleTemplateUrl)),t.titleTemplateUrl||(t.frameless=o.frameless),t.styleClass||(t.styleClass=o.styleClass),t.wid||(t.wid=a.id()),e.widget=angular.copy(o);var l=t.config;l?angular.isString(l)&&(l=angular.fromJson(l)):l={},e.config=l,e.widgetState||(e.widgetState={},e.widgetState.isCollapsed=o.collapsed===!0?o.collapsed:!1)}else i.warn("could not find widget "+t.type)}else i.debug("definition not specified, widget was probably removed")}function r(a,n){var r=a.definition;if(r){var s=function(){var e=a.col;if(e){var t=e.widgets.indexOf(r);t>=0&&e.widgets.splice(t,1)}n.remove(),l.$broadcast("adfWidgetRemovedFromColumn")};a.remove=function(){if(a.options.enableConfirmDelete){var e=a.$new(),t=d+"widget-delete.html";r.deleteTemplateUrl&&(t=r.deleteTemplateUrl);var i={scope:e,templateUrl:t,backdrop:"static"},l=o.open(i);e.closeDialog=function(){l.close(),e.$destroy()},e.deleteDialog=function(){s(),e.closeDialog()}}else s()},a.reload=function(){a.$broadcast("widgetReload")},a.edit=function(){function i(e){var i;if("boolean"==typeof e){var o=t.defer();e?o.resolve():o.reject(),i=o.promise}else i=t.when(e);return i}var l=a.$new();l.definition=angular.copy(r);var n=d+"widget-edit.html";r.editTemplateUrl&&(n=r.editTemplateUrl);var s={scope:l,templateUrl:n,backdrop:"static"},c=o.open(s);l.closeDialog=function(){c.close(),l.$destroy()},l.saveDialog=function(){l.validationError=null;var t=a.widget,o=t.edit.apply,d={widget:t,definition:l.definition,config:l.definition.config},n=e.invoke(o,o,d);i(n).then(function(){r.title=l.definition.title,angular.extend(r.config,l.definition.config),t.edit&&t.edit.reload&&a.$broadcast("widgetConfigChanged"),l.closeDialog()},function(e){e?l.validationError=e:l.validationError="Validation durring apply failed"})}}}else i.debug("widget not found")}return{replace:!0,restrict:"EA",transclude:!1,templateUrl:d+"widget.html",scope:{definition:"=",col:"=column",editMode:"=",options:"=",widgetState:"="},controller:["$scope",function(e){e.$on("adfDashboardCollapseExpand",function(t,i){e.widgetState.isCollapsed=i.collapseExpandStatus}),e.$on("adfWidgetEnterEditMode",function(t,i){a.idEquals(e.definition.wid,i.wid)&&e.edit()}),e.widgetClasses=function(t,i){var o=i.styleClass||"";return(!t.frameless||e.editMode)&&(o+=" panel panel-default"),o},e.openFullScreen=function(){var t=e.definition,i=e.$new(),l={scope:i,templateUrl:d+"widget-fullscreen.html",size:t.modalSize||"lg",backdrop:"static",windowClass:t.fullScreen?"dashboard-modal widget-fullscreen":"dashboard-modal"},a=o.open(l);i.closeDialog=function(){a.close(),i.$destroy()}}}],compile:function(){return{pre:n,post:r}}}}]),angular.module("adf").run(["$templateCache",function(e){e.put("../src/templates/dashboard-column.html",'<div adf-id={{column.cid}} class=column ng-class=column.styleClass ng-model=column.widgets> <adf-widget ng-repeat="definition in column.widgets" definition=definition column=column edit-mode=editMode options=options widget-state=widgetState> </adf-widget></div> '),e.put("../src/templates/dashboard-edit.html",'<div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>Edit Dashboard</h4> </div> <div class=modal-body> <form role=form> <div class=form-group> <label for=dashboardTitle>Title</label> <input type=text class=form-control id=dashboardTitle ng-model=copy.title required> </div> <div class=form-group> <label>Structure</label> <div class=radio ng-repeat="(key, structure) in structures"> <label> <input type=radio value={{key}} ng-model=model.structure ng-change="changeStructure(key, structure)"> {{key}} </label> </div> </div> </form> </div> <div class=modal-footer> <button type=button class="btn btn-primary" ng-click=closeDialog()>Close</button> </div> '),e.put("../src/templates/dashboard-row.html","<div class=row ng-class=row.styleClass> </div> "),e.put("../src/templates/dashboard-title.html",'<h1> {{model.title}} <span style="font-size: 16px" class=pull-right> <a href ng-if=editMode title="add new widget" ng-click=addWidgetDialog()> <i class="glyphicon glyphicon-plus-sign"></i> </a> <a href ng-if=editMode title="edit dashboard" ng-click=editDashboardDialog()> <i class="glyphicon glyphicon-cog"></i> </a> <a href ng-if=options.editable title="{{editMode ? \'save changes\' : \'enable edit mode\'}}" ng-click=toggleEditMode()> <i class=glyphicon x-ng-class="{\'glyphicon-edit\' : !editMode, \'glyphicon-save\' : editMode}"></i> </a> <a href ng-if=editMode title="undo changes" ng-click=cancelEditMode()> <i class="glyphicon glyphicon-repeat adf-flip"></i> </a> </span> </h1> '),e.put("../src/templates/dashboard.html",'<div class=dashboard-container> <div ng-include src=model.titleTemplateUrl></div> <div class=dashboard x-ng-class="{\'edit\' : editMode}"> <adf-dashboard-row row=row adf-model=model options=options ng-repeat="row in model.rows" edit-mode=editMode continuous-edit-mode=continuousEditMode> </adf-dashboard-row></div> </div> '),e.put("../src/templates/widget-add.html",'<div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>Add new widget</h4> </div> <div class=modal-body> <div style="display: inline-block;"> <dl class=dl-horizontal> <dt ng-repeat-start="(key, widget) in widgets"> <a href ng-click=addWidget(key)> {{widget.title}} </a> </dt> <dd ng-repeat-end ng-if=widget.description> {{widget.description}} </dd> </dl> </div> </div> <div class=modal-footer> <button type=button class="btn btn-primary" ng-click=closeDialog()>Close</button> </div>'),e.put("../src/templates/widget-delete.html",'<div class=modal-header> <h4 class=modal-title>Delete {{widget.title}}</h4> </div> <div class=modal-body> <form role=form> <div class=form-group> <label for=widgetTitle>Are you sure you want to delete this widget ?</label> </div> </form> </div> <div class=modal-footer> <button type=button class="btn btn-default" ng-click=closeDialog()>Close</button> <button type=button class="btn btn-primary" ng-click=deleteDialog()>Delete</button> </div> '),e.put("../src/templates/widget-edit.html",'<form name=widgetEditForm novalidate role=form ng-submit=saveDialog()> <div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>{{widget.title}}</h4> </div> <div class=modal-body> <div class="alert alert-danger" role=alert ng-show=validationError> <strong>Apply error:</strong> {{validationError}} </div> <div class=form-group> <label for=widgetTitle>Title</label> <input type=text class=form-control id=widgetTitle ng-model=definition.title placeholder="Enter title" required> </div> <div ng-if=widget.edit> <adf-widget-content model=definition content=widget.edit> </adf-widget-content></div> </div> <div class=modal-footer> <button type=button class="btn btn-default" ng-click=closeDialog()>Cancel</button> <input type=submit class="btn btn-primary" ng-disabled=widgetEditForm.$invalid value=Apply> </div> </form> '),e.put("../src/templates/widget-fullscreen.html",'<div class=modal-header> <div class="pull-right widget-icons"> <a href title="Reload Widget Content" ng-if=widget.reload ng-click=reload()> <i class="glyphicon glyphicon-refresh"></i> </a> <a href title=close ng-click=closeDialog()> <i class="glyphicon glyphicon-remove"></i> </a> </div> <h4 class=modal-title>{{definition.title}}</h4> </div> <div class=modal-body> <adf-widget-content model=definition content=widget> </adf-widget-content></div> <div class=modal-footer> <button type=button class="btn btn-primary" ng-click=closeDialog()>Close</button> </div> '),e.put("../src/templates/widget-title.html",'<h3 class=panel-title> {{definition.title}} <span class=pull-right> <a href title="reload widget content" ng-if=widget.reload ng-click=reload()> <i class="glyphicon glyphicon-refresh"></i> </a> <a href title="change widget location" class=adf-move ng-if=editMode> <i class="glyphicon glyphicon-move"></i> </a> <a href title="collapse widget" ng-show="options.collapsible && !widgetState.isCollapsed" ng-click="widgetState.isCollapsed = !widgetState.isCollapsed"> <i class="glyphicon glyphicon-minus"></i> </a> <a href title="expand widget" ng-show="options.collapsible && widgetState.isCollapsed" ng-click="widgetState.isCollapsed = !widgetState.isCollapsed"> <i class="glyphicon glyphicon-plus"></i> </a> <a href title="edit widget configuration" ng-click=edit() ng-if=editMode> <i class="glyphicon glyphicon-cog"></i> </a> <a href title="fullscreen widget" ng-click=openFullScreen() ng-show=options.maximizable> <i class="glyphicon glyphicon-fullscreen"></i> </a> <a href title="remove widget" ng-click=remove() ng-if=editMode> <i class="glyphicon glyphicon-remove"></i> </a> </span> </h3> '),e.put("../src/templates/widget.html",'<div adf-id={{definition.wid}} adf-widget-type={{definition.type}} ng-class="widgetClasses(widget, definition)" class=widget> <div class="panel-heading clearfix" ng-if="!widget.frameless || editMode"> <div ng-include src=definition.titleTemplateUrl></div> </div> <div ng-class="{\'panel-body\':!widget.frameless || editMode}" uib-collapse=widgetState.isCollapsed> <adf-widget-content model=definition content=widget> </adf-widget-content></div> </div> ')}])}(window);
//# sourceMappingURL=angular-dashboard-framework.min.js.map