From 99e793fbbe2e811a54f3d2b13fcf35582c0a23e6 Mon Sep 17 00:00:00 2001 From: Basil Date: Tue, 26 May 2020 07:52:37 +0200 Subject: [PATCH] PHPDoc for Openapi Request Body (#501) * new request body parser with uses * added uses * add uses for timestamp controller * add changelog * add extra pattern for change password --- CHANGELOG.md | 1 + src/Module.php | 12 ++++++ src/apis/CommonController.php | 8 ++++ src/apis/TimestampController.php | 2 +- src/apis/UserController.php | 1 + src/controllers/UptimeController.php | 2 +- src/ngrest/base/Api.php | 5 +++ src/openapi/UrlRuleRouteParser.php | 45 ++++++++++++++++++++++ src/openapi/phpdoc/PhpDocParser.php | 22 ++++++++++- src/openapi/phpdoc/PhpDocType.php | 7 ++-- src/openapi/phpdoc/PhpDocUses.php | 42 ++++++++++++++++++++ src/openapi/specs/ActiveRecordToSchema.php | 7 ++-- src/openapi/specs/BaseSpecs.php | 6 ++- src/resources/dist/main.js | 2 +- src/resources/js/controllers.js | 2 +- 15 files changed, 148 insertions(+), 16 deletions(-) create mode 100644 src/openapi/phpdoc/PhpDocUses.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 76aaa11602..169fead939 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ In order to read more about upgrading and BC breaks have a look at the [UPGRADE ## 3.3.0 ++ [#501](https://github.com/luyadev/luya-module-admin/pull/501) Implement PhpDoc `@uses` for handling OpenApi request body informations when verb type is `POST`. + [#500](https://github.com/luyadev/luya-module-admin/pull/500) Trigger an event (eventUserAccessTokenLogin) when an access token is requesting for a login. + [#499](https://github.com/luyadev/luya-module-admin/pull/499) Added missing RU translations. + [#489](https://github.com/luyadev/luya-module-admin/issues/489) Hide default LUYA NgRest CRUD actions for OpenApi generator. Improve overall performance to generate OpenApi. diff --git a/src/Module.php b/src/Module.php index 81a71addbd..acfad42f09 100644 --- a/src/Module.php +++ b/src/Module.php @@ -272,7 +272,19 @@ final class Module extends \luya\admin\base\Module implements CoreModuleInterfac 'api-admin-queuelogerror' => 'luya\admin\apis\QueueLogErrorController', 'api-admin-ngrestlog' => 'luya\admin\apis\NgrestLogController', 'api-admin-storageimage' => 'luya\admin\apis\StorageImageController', + ]; + public $apiRules = [ + 'api-admin-timestamp' => [ + 'patterns' => [ + 'POST' => 'index', + ] + ], + 'api-admin-user' => [ + 'extraPatterns' => [ + 'POST change-password' => 'change-password', + ] + ] ]; /** diff --git a/src/apis/CommonController.php b/src/apis/CommonController.php index b69b7d6d69..9bf6ad2849 100644 --- a/src/apis/CommonController.php +++ b/src/apis/CommonController.php @@ -83,6 +83,7 @@ public function actionSchedulerLog($model, $pk) * Add a task to the scheduler. * * @return array + * @uses Scheduler * @since 2.0.0 */ public function actionSchedulerAdd() @@ -159,6 +160,8 @@ public function actionTagRelationToggle($tagId, $pkId, $tableName) /** * Set the lastest ngrest filter selection in the User Settings. * + * @uses string apiEndpoint + * @uses string filterName * @return boolean */ public function actionNgrestFilter() @@ -172,6 +175,9 @@ public function actionNgrestFilter() /** * Set the lastest ngrest curd list order direction in the User Settings. * + * @uses string apiEndpoint + * @uses string sort + * @uses string field * @return boolean */ public function actionNgrestOrder() @@ -261,6 +267,7 @@ public function actionDataModules() /** * Save the last selected filemanager folder in the user settings. * + * @uses string folderId * @return boolean */ public function actionSaveFilemanagerFolderState() @@ -287,6 +294,7 @@ public function actionGetFilemanagerFolderState() /** * Store the open and closed folders from the filemanager tree in the user settings. * + * @uses array data * @return boolean */ public function actionFilemanagerFoldertreeHistory() diff --git a/src/apis/TimestampController.php b/src/apis/TimestampController.php index 49941af3d2..87b892f046 100644 --- a/src/apis/TimestampController.php +++ b/src/apis/TimestampController.php @@ -6,7 +6,6 @@ use luya\admin\models\UserOnline; use luya\admin\base\RestController; use luya\traits\CacheableTrait; -use luya\admin\models\Config; use luya\admin\models\UserAuthNotification; /** @@ -22,6 +21,7 @@ class TimestampController extends RestController /** * The timestamp action provider informations about currenct only users and if the ui needs to be refreshed. * + * @uses integer $lastKeyStroke * @return array */ public function actionIndex() diff --git a/src/apis/UserController.php b/src/apis/UserController.php index 8e933d3cb2..4ebb443f45 100644 --- a/src/apis/UserController.php +++ b/src/apis/UserController.php @@ -173,6 +173,7 @@ public function actionRemoveDevice() * * A request including body params `newpass`, `oldpass`, `newpassrepeat`. * + * @uses UserChangePassword * @return \luya\admin\models\UserChangePassword */ public function actionChangePassword() diff --git a/src/controllers/UptimeController.php b/src/controllers/UptimeController.php index 07772169a5..dd6ed94b07 100644 --- a/src/controllers/UptimeController.php +++ b/src/controllers/UptimeController.php @@ -6,7 +6,7 @@ use luya\rest\Controller; /** - * Uptime Tests Controller. + * Uptime Tests * * This controler is used for uptime status robots. * diff --git a/src/ngrest/base/Api.php b/src/ngrest/base/Api.php index 973ae6691a..0ee1a99915 100644 --- a/src/ngrest/base/Api.php +++ b/src/ngrest/base/Api.php @@ -556,6 +556,7 @@ public function actionServices() /** * Toggle Notifications * + * @uses integer mute Whether should be muted or not * @return UserAuthNotification The user auth notification model. If model does not exists a new model will be created. * @since 2.0.0 */ @@ -584,6 +585,7 @@ public function actionToggleNotification() * * Search querys with Pagination will be handled by this action. * + * @uses string $query The search term as post request. * @param string $query The query to lookup the database, if query is empty a post request with `query` can be used instead. * @return \yii\data\ActiveDataProvider */ @@ -761,6 +763,9 @@ public function actionActiveWindowRender() /** * Export Data * + * @uses integer header Whether header should be exported or not + * @uses string type The type csv oder xlsx + * @uses array attributes A list of attributes to export * @return array An array with the key `url` which contains the download path to the file * @throws ErrorException */ diff --git a/src/openapi/UrlRuleRouteParser.php b/src/openapi/UrlRuleRouteParser.php index 3bc02daaa8..0d38228b72 100644 --- a/src/openapi/UrlRuleRouteParser.php +++ b/src/openapi/UrlRuleRouteParser.php @@ -9,6 +9,8 @@ use cebe\openapi\spec\RequestBody; use cebe\openapi\spec\Responses; use cebe\openapi\spec\Schema; +use luya\admin\openapi\phpdoc\PhpDocUses; +use luya\admin\openapi\specs\ActiveRecordToSchema; use luya\admin\openapi\specs\ControllerActionSpecs; use luya\admin\openapi\specs\ControllerSpecs; use Yii; @@ -175,6 +177,49 @@ protected function getOperation(UrlRule $urlRule, $verbName) ]) ] ]); + } elseif (strtoupper($verbName) == 'POST') { + + // if its a post request endpoint and @uses is defined use this + // information as request body. + $useProperties = []; + + /** @var PhpDocUses $use */ + foreach ($actionSpecs->getPhpDocParser()->getUses() as $use) { + + if ($use->getType()->getIsClass()) { + $schema = $actionSpecs->createActiveRecordSchema($use->getType()->getClassName()); + if ($schema) { + $requestBody = new RequestBody([ + 'content' => [ + 'application/json' => new MediaType([ + 'schema' => [ + 'type' => 'object', + 'properties' => $schema->getProperties() + ] + ]) + ] + ]); + } + } else { + $useProperties[$use->getDescription()] = new Schema([ + 'type' => $use->getType()->getNoramlizeName(), + 'title' => $use->getDescription(), + ]); + } + } + + if (!empty($useProperties)) { + $requestBody = new RequestBody([ + 'content' => [ + 'application/json' => new MediaType([ + 'schema' => [ + 'type' => 'object', + 'properties' => $useProperties, + ] + ]) + ] + ]); + } } return new Operation(array_filter([ diff --git a/src/openapi/phpdoc/PhpDocParser.php b/src/openapi/phpdoc/PhpDocParser.php index 1fceb10f87..fbcdf64619 100644 --- a/src/openapi/phpdoc/PhpDocParser.php +++ b/src/openapi/phpdoc/PhpDocParser.php @@ -41,7 +41,8 @@ protected function parseDocBlockToArrays(PhpDocReflection $reflection) 'link' => [], 'since' => [], 'var' => [], - 'property' => [], // @property $firstname + 'property' => [], // @property $firstname , + 'uses' => [], // @uses ]; foreach (explode(PHP_EOL, $reflection->getDocComment()) as $row) { @@ -121,6 +122,23 @@ public function getParams() return $params; } + /** + * Get uses + * + * @return PhpDocUses[] + * @since 3.3.0 + */ + public function getUses() + { + $uses = []; + + foreach ($this->rows['uses'] as $use) { + $uses[] = new PhpDocUses($this, $use); + } + + return $uses; + } + /** * * @@ -178,7 +196,7 @@ public function normalizeTypes($type) } /** - * Undocumented function + * Return * * @return PhpDocReturn */ diff --git a/src/openapi/phpdoc/PhpDocType.php b/src/openapi/phpdoc/PhpDocType.php index be81aa15f9..30d97d4a21 100644 --- a/src/openapi/phpdoc/PhpDocType.php +++ b/src/openapi/phpdoc/PhpDocType.php @@ -98,13 +98,13 @@ public function getClassName() $className = str_replace("[]", '', $this->rawName); if (($class = $this->testValidClassName($className))) { $this->_className = $class; - return $this->name; + return $class; } } if (($class = $this->testValidClassName($this->rawName))) { $this->_className = $class; - return $this->name; + return $class; } if (($class = $this->testValidClassName($this->name))) { @@ -128,8 +128,7 @@ protected function testValidClassName($className) return $absoluteClassName; } - // get the - + // Find alias defintion `XYZ as ABC` $ensureClassName = $this->phpDocParser->ensureClassName($className); if ($ensureClassName && class_exists($ensureClassName)) { return $ensureClassName; diff --git a/src/openapi/phpdoc/PhpDocUses.php b/src/openapi/phpdoc/PhpDocUses.php new file mode 100644 index 0000000000..7be650fb71 --- /dev/null +++ b/src/openapi/phpdoc/PhpDocUses.php @@ -0,0 +1,42 @@ + + */ +class PhpDocUses +{ + protected $phpDocParser; + + protected $definition; + + public function __construct(PhpDocParser $phpDocParser, array $definition) + { + $this->phpDocParser = $phpDocParser; + $this->definition = $definition; + } + + /** + * Description. + * + * @return string + */ + public function getDescription() + { + return isset($this->definition[2]) ? ltrim($this->definition[2], '$') : ''; + } + + /** + * PhpDocType + * + * @return PhpDocType + */ + public function getType() + { + return new PhpDocType($this->phpDocParser, isset($this->definition[1]) ? $this->definition[1] : null); + } +} \ No newline at end of file diff --git a/src/openapi/specs/ActiveRecordToSchema.php b/src/openapi/specs/ActiveRecordToSchema.php index c80dd91f32..4cff672df7 100644 --- a/src/openapi/specs/ActiveRecordToSchema.php +++ b/src/openapi/specs/ActiveRecordToSchema.php @@ -3,10 +3,9 @@ namespace luya\admin\openapi\specs; use cebe\openapi\spec\Schema; -use luya\admin\models\ApiUser; use luya\admin\openapi\phpdoc\PhpDocParser; use ReflectionClass; -use yii\db\BaseActiveRecord; +use yii\base\Model; /** * Generate Schema Specs from Active Record. @@ -17,7 +16,7 @@ class ActiveRecordToSchema { /** - * @var BaseActiveRecord + * @var Model */ protected $activeRecord; @@ -36,7 +35,7 @@ class ActiveRecordToSchema */ protected $senderActiveRecordClassName; - public function __construct(BaseSpecs $baseSpecs, BaseActiveRecord $activeRecord, $senderActiveRecordClassName = null) + public function __construct(BaseSpecs $baseSpecs, Model $activeRecord, $senderActiveRecordClassName = null) { $this->activeRecord = $activeRecord; $this->baseSpecs = $baseSpecs; diff --git a/src/openapi/specs/BaseSpecs.php b/src/openapi/specs/BaseSpecs.php index 4a4a8a5924..278b41d87d 100644 --- a/src/openapi/specs/BaseSpecs.php +++ b/src/openapi/specs/BaseSpecs.php @@ -14,6 +14,7 @@ use ReflectionMethod; use Yii; use yii\base\Action as BaseAction; +use yii\base\Model; use yii\data\ActiveDataProvider; use yii\db\ActiveRecord; use yii\rest\Action; @@ -56,10 +57,11 @@ abstract public function getActionObject(); abstract public function getControllerObject(); private $_phpDocParser; + /** * @return PhpDocParser */ - protected function getPhpDocParser() + public function getPhpDocParser() { if ($this->_phpDocParser === null) { $this->_phpDocParser = new PhpDocParser($this->getReflection()); @@ -288,7 +290,7 @@ public function createActiveRecordSchema($activeRecordClassName, $senderActiveRe Yii::warning("Create object createActiveRecordSchema {$activeRecordClassName}", __METHOD__); $object = Yii::createObject($activeRecordClassName); - if ($object instanceof ActiveRecord) { + if ($object instanceof Model) { return new ActiveRecordToSchema($this, $object, $senderActiveRecordClassName); } } catch(\Exception $e) { diff --git a/src/resources/dist/main.js b/src/resources/dist/main.js index 1e7054e610..2d2849e261 100644 --- a/src/resources/dist/main.js +++ b/src/resources/dist/main.js @@ -1 +1 @@ -function guid(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}function i18nParam(e,t){var n=i18n[e];return angular.forEach(t,function(e,t){n=n.replace("%"+t+"%",e)}),n}function typeCastValue(e){return angular.isNumber(e)?parseInt(e):e}angular.module("dnd",[]).factory("dndFactory",function(){return{data:{content:null,pos:null,element:null},getElement:function(){return this.data.element},setElement:function(e){this.data.element=e},setContent:function(e){this.data.content=e},getContent:function(){return this.data.content},setPos:function(e){this.data.pos=e},getPos:function(){return this.data.pos}}}).directive("dnd",["dndFactory","AdminClassService",function(r,e){return{restrict:"A",transclude:!1,replace:!1,template:!1,templateURL:!1,scope:{dndModel:"=",dndCss:"=",dndOndrop:"&",dndIsvalid:"&"},link:function(i,a,e){var o=!0,l=e.hasOwnProperty("dndDisableDragMiddle");e.hasOwnProperty("dndDragDisabled")||a.attr("draggable","true"),i.addClass=function(e){a.addClass(e)},i.removeClass=function(e,t){a.removeClass(e)},a.on("dragstart",function(e){if((e=e.originalEvent||e).stopPropagation(),"false"==a.attr("draggable"))return!0;o=!0,r.setContent(i.dndModel),r.setElement(a[0]),i.addClass(i.dndCss.onDrag);try{e.dataTransfer.setData("text","1")}catch(e){try{e.dataTransfer.setData("application/json","1")}catch(e){e.dataTransfer.setData("Text","1")}}}),a.on("dragend",function(e){e=e.originalEvent||e,i.removeClass(i.dndCss.onDrag),e.stopPropagation()}),a.on("dragover",function(e){e=e.originalEvent||e;try{e.dataTransfer.dropEffect="move"}catch(e){}if(e.preventDefault(),e.stopPropagation(),!i.dndIsvalid({hover:i.dndModel,dragged:r.getContent()}))return o=!1;var t=a[0].getBoundingClientRect(),n=100/t.height*(e.clientY-t.top);return l?n<=50?(i.addClass(i.dndCss.onHoverTop),i.removeClass(i.dndCss.onHoverMiddle),i.removeClass(i.dndCss.onHoverBottom),r.setPos("top")):(i.removeClass(i.dndCss.onHoverTop),i.removeClass(i.dndCss.onHoverMiddle),i.addClass(i.dndCss.onHoverBottom),r.setPos("bottom")):n<=25?(i.addClass(i.dndCss.onHoverTop),i.removeClass(i.dndCss.onHoverMiddle),i.removeClass(i.dndCss.onHoverBottom),r.setPos("top")):65<=n?(i.removeClass(i.dndCss.onHoverTop),i.removeClass(i.dndCss.onHoverMiddle),i.addClass(i.dndCss.onHoverBottom),r.setPos("bottom")):(i.removeClass(i.dndCss.onHoverTop),i.addClass(i.dndCss.onHoverMiddle),i.removeClass(i.dndCss.onHoverBottom),r.setPos("middle")),i.addClass(i.dndCss.onHover),!1}),a.on("dragenter",function(e){e=e.originalEvent||e,i.addClass(i.dndCss.onHover),e.preventDefault()}),a.on("dragleave",function(e){i.removeClass(i.dndCss.onHover,!0),i.removeClass(i.dndCss.onHoverTop,!0),i.removeClass(i.dndCss.onHoverMiddle,!0),i.removeClass(i.dndCss.onHoverBottom,!0)}),e.hasOwnProperty("dndDropDisabled")||a.on("drop",function(e){return(e=e.originalEvent||e).preventDefault(),e.stopPropagation(),i.removeClass(i.dndCss.onHover,!0),i.removeClass(i.dndCss.onHoverTop,!0),i.removeClass(i.dndCss.onHoverMiddle,!0),i.removeClass(i.dndCss.onHoverBottom,!0),!!o&&(i.$apply(function(){i.dndOndrop({dragged:r.getContent(),dropped:i.dndModel,position:r.getPos(),element:r.getElement()})}),!0)})}}}]);var zaa=angular.module("zaa",["ui.router","dnd","angular-loading-bar","ngFileUpload","ngWig","flow","angular.filter","720kb.datepicker","directive.ngColorwheel","uiCropper"]);zaa.config(["$httpProvider","$stateProvider","$controllerProvider","$urlMatcherFactoryProvider",function(e,t,n,i){e.interceptors.push("authInterceptor"),zaa.bootstrap=n,i.strictMode(!1),t.state("default",{url:"/default/:moduleId",templateUrl:function(e){return"admin/template/default"}}).state("default.route",{url:"/:moduleRouteId/:controllerId/:actionId",templateUrl:function(e){return e.moduleRouteId+"/"+e.controllerId+"/"+e.actionId},parent:"default",resolve:{adminServiceResolver:adminServiceResolver}}).state("custom",{url:"/template/:templateId",templateUrl:function(e){return e.templateId},resolve:{adminServiceResolver:adminServiceResolver,resolverProvider:["resolver",function(e){return e.then}]}}).state("home",{url:"",templateUrl:"admin/default/dashboard",controller:["$scope",function(e){e.$parent.currentItem={icon:"home",alias:i18n.menu_dashboard}}]}).state("default.route.detail",{url:"/:id",parent:"default.route",template:"",controller:["$scope","$stateParams",function(e,t){e.crud=e.$parent,e.init=function(){e.crud.config.inline||e.crud.data.updateId!=t.id&&e.crud.toggleUpdate(t.id)},e.init()}]})}]),zaa.provider("resolver",[function(){var a=[];this.addCallback=function(e){a.push(e)},this.$get=["$injector","$q","$state",function(i,e,t){return e(function(e,t){for(var n in a)i.invoke(a[n])})}]}]),zaa.factory("LuyaLoading",["$timeout",function(t){var n=!1,i=null,a=null;return{start:function(e){i=null==e?i18n.js_zaa_server_proccess:e,t.cancel(a),a=t(function(){n=!0},2e3)},stop:function(){t.cancel(a),n=!1},getStateMessage:function(){return i},getState:function(){return n}}}]),zaa.factory("AdminClassService",function(){var n=[];return n.vars={},n.getClassSpace=function(e){if(n.vars.hasOwnProperty(e))return n.vars[e]},n.hasClassSpace=function(e){return!!n.vars.hasOwnProperty(e)},n.setClassSpace=function(e,t){n.vars[e]=t},n.clearSpace=function(e){n.vars.hasOwnProperty(e)&&(n.vars[e]=null)},n.removeSpace=function(e){n.hasClassSpace(e)&&delete n.vars[e]},n.stack=0,n.modalStackPush=function(){n.stack+=1},n.modalStackRemove=function(){n.stack<=1?n.stack=0:n.stack-=1},n.modalStackRemoveAll=function(){n.stack=0},n.modalStackIsEmpty=function(){return 0==n.stack},n}),zaa.factory("CacheReloadService",["$http","$window",function(e,t){var n=[];return n.reload=function(){e.get("admin/api-admin-common/cache").then(function(e){t.location.reload()})},n}]),zaa.factory("authInterceptor",["$rootScope","$q","AdminToastService","AdminDebugBar",function(i,a,t,o){return{request:function(e){if(e.hasOwnProperty("ignoreLoadingBar")||(e.debugId=o.pushRequest(e)),e.hasOwnProperty("authToken"))var t=e.authToken;else t=i.luyacfg.authToken;e.headers=e.headers||{},e.headers.Authorization="Bearer "+t;var n=document.head.querySelector("[name=csrf-token]");return null!==n&&(e.headers["X-CSRF-Token"]=n.content),e||a.when(e)},response:function(e){return e.hasOwnProperty("ignoreLoadingBar")||o.pushResponse(e),e||a.when(e)},responseError:function(e){if(401==e.status||403==e.status||405==e.status)e.config.hasOwnProperty("authToken")||(window.location="admin/default/logout?autologout=1");else if(422!=e.status){e.data.hasOwnProperty("message")?t.error(e.data.message,1e4):t.error("Response Error: "+e.status+" "+e.statusText,1e4)}return a.reject(e)}}}]),adminServiceResolver=["ServiceFoldersData","ServiceFiltersData","ServiceLanguagesData","ServicePropertiesData","AdminLangService","ServiceFoldersDirecotryId",function(e,t,n,i,a,o){t.load(),e.load(),n.load(),i.load(),a.load(),o.load()}],zaa.factory("ServiceAdminTags",["$http","$q","$rootScope",function(i,e,a){var o={data:null,load:function(n){return e(function(t,e){null!==o.data&&!0!==n?t(o.data):i.get("admin/api-admin-common/tags").then(function(e){o.data=e.data,a.$broadcast("service:AdminTags",o.data),t(o.data)})})}};return o}]),zaa.factory("ServiceFoldersData",["$http","$q","$rootScope",function(i,e,a){var o=[];return o.data=null,o.load=function(n){return e(function(t,e){null!==o.data&&!0!==n?t(o.data):i.get("admin/api-admin-storage/data-folders").then(function(e){o.data=e.data,a.$broadcast("service:FoldersData",o.data),t(o.data)})})},o}]),zaa.factory("ServiceFoldersDirecotryId",["$http","$q","$rootScope",function(i,e,a){var o=[];return o.folderId=!1,o.load=function(n){return e(function(t,e){!1!==o.folderId&&!0!==n?t(o.folderId):i.get("admin/api-admin-common/get-filemanager-folder-state").then(function(e){o.folderId=e.data,a.$broadcast("service:FoldersDirectoryId",o.folderId),t(o.folderId)})})},o}]),zaa.factory("ServiceImagesData",["$http","$q","$rootScope","$log",function(a,e,t,n){var o=[];return o.data={},o.getImage=function(t,i){return e(function(n,e){return 0==t?e(t):o.data.hasOwnProperty(t)&&!0!==i?n(o.data[t]):void a.get("admin/api-admin-storage/image-info?id="+t).then(function(e){var t=e.data;return o.data[t.id]=t,n(t)})})},o.loadImages=function(n){return e(function(t,e){if(0==n.length)return t();a.post("admin/api-admin-storage/images-info?expand=source,tinyCropImage",{ids:n}).then(function(e){return angular.forEach(e.data,function(e){o.data[e.id]=e}),t()})})},o}]),zaa.factory("ServiceFilesData",["$http","$q","$rootScope","$log",function(a,e,t,n){var o=[];return o.data={},o._promises={},o.getFile=function(e,t){if(o._promises.hasOwnProperty(e))return o._promises[e];var n=o.newPromise(e,t);return o._promises[e]=n},o.newPromise=function(i,t){return e(function(n,e){return 0==i?e(i):o.data.hasOwnProperty(i)&&!0!==t?n(o.data[i]):void a.get("admin/api-admin-storage/file-info?id="+i).then(function(e){var t=e.data;return o.data[t.id]=t,delete o._promises[i],n(t)})})},o}]),zaa.factory("ServiceFiltersData",["$http","$q","$rootScope",function(i,e,a){var o=[];return o.data=null,o.load=function(n){return e(function(t,e){null!==o.data&&!0!==n?t(o.data):i.get("admin/api-admin-storage/data-filters").then(function(e){o.data=e.data,a.$broadcast("service:FiltersData",o.data),t(o.data)})})},o}]),zaa.factory("ServiceLanguagesData",["$http","$q","$rootScope",function(i,e,a){var o=[];return o.data=[],o.load=function(n){return e(function(t,e){0t.name.toLowerCase()?1:-1}),i}}),zaa.filter("findthumbnail",function(){return function(e,n,i){var a=!1;return angular.forEach(e,function(e,t){a||e.fileId==n&&e.filterId==i&&(a=e)}),a}}),zaa.filter("findidfilter",function(){return function(e,n){var i=!1;return angular.forEach(e,function(e,t){e.id==n&&(i=e)}),i}}),zaa.filter("filemanagerfilesfilter",function(){return function(e,t,n){var i=[];return angular.forEach(e,function(e){n?e.folderId==t&&1==e.isImage&&i.push(e):e.folderId==t&&i.push(e)}),i}}),zaa.filter("trustAsUnsafe",["$sce",function(n){return function(e,t){return n.trustAsHtml(e)}}]),zaa.filter("srcbox",function(){return function(e,t){if(!e)return e;if(!t)return e;var a=(""+t).toLowerCase(),o={};return angular.forEach(e,function(n,i){angular.forEach(n,function(e,t){-1!==(""+e).toLowerCase().indexOf(a)&&(o[i]=n)})}),o}}),zaa.filter("trustAsResourceUrl",["$sce",function(n){return function(e,t){return t?n.trustAsResourceUrl(e):null}}]),zaa.filter("truncateMiddle",function(){return function(e,t,n){if(t=t||30,n=n||"...",e.length<=t)return e;var i=(t-n.length)/2;return e.substring(0,i)+n+e.substring(e.length-i,e.length)}}),zaa.directive("echarts",[function(){return{scope:{id:"@",theme:"@",data:"="},restrict:"E",template:'
',replace:!0,controller:["$scope",function(e){e.theme&&(e.theme="macarons")}],link:function(e){var t=echarts.init(document.getElementById(e.id),e.theme);e.$watch("data",function(e){e&&null!=e&&t.setOption(angular.fromJson(e))}),angular.element(window).bind("resize",function(){t.resize()})}}}]),zaa.directive("compileHtml",["$compile","$parse",function(a,o){return{restrict:"A",link:function(e,t,n){var i=o(n.ngBindHtml);e.$watch(function(){return(i(e)||"").toString()},function(){a(t,null,-9999)(e)})}}}]),zaa.directive("selectOnClick",function(){return function(e,t,n){t.bind("click",function(){this.select()})}}),zaa.directive("zaaEsc",["$document",function(i){return function(t,e,n){i.on("keyup",function(e){27==e.keyCode&&t.$apply(function(){t.$eval(n.zaaEsc)})})}}]),zaa.directive("linkObjectToString",function(){return{restrict:"E",relace:!0,scope:{link:"="},template:function(){return'{{link.value}}{{link.value}}{{link.value}}'}}}),zaa.directive("tooltip",["$document","$http",function(r,s){return{restrict:"A",scope:{tooltipText:"@",tooltipExpression:"=",tooltipPosition:"@",tooltipOffsetTop:"@",tooltipOffsetLeft:"@",tooltipImageUrl:"@",tooltipPreviewUrl:"@",tooltipDisabled:"="},link:function(i,a,e){function o(){var e={};e="function"==typeof l[i.tooltipPosition]?l[i.tooltipPosition]():l.right();var t=parseInt(i.tooltipOffsetTop);t&&(e.top=e.top+t);var n=parseInt(i.tooltipOffsetLeft);n&&(e.left=e.left+n),i.pop.css(e)}var l={top:function(){var e=a[0].getBoundingClientRect();return{top:e.top-i.pop.outerHeight(),left:e.left+e.width/2-i.pop.outerWidth()/2}},bottom:function(){var e=a[0].getBoundingClientRect();return{top:e.top+e.height,left:e.left+e.width/2-i.pop.outerWidth()/2}},right:function(){var e=a[0].getBoundingClientRect();return{top:e.top+e.height/2-i.pop.outerHeight()/2,left:e.left+e.width}},left:function(){var e=a[0].getBoundingClientRect();return{top:e.top+e.height/2-i.pop.outerHeight()/2,left:e.left-i.pop.outerWidth()}}};a.on("mouseenter",function(){if(!i.pop&&(void 0===i.tooltipDisabled||!1===i.tooltipDisabled)){i.tooltipExpression&&(i.tooltipText=i.tooltipExpression);var e='",t=$(e);if(i.tooltipImageUrl){var n=new Image;n.onload=function(){o()},n.src=i.tooltipImageUrl,t.find(".tooltip-inner").append(n)}i.tooltipPreviewUrl&&s.get(i.tooltipPreviewUrl).then(function(e){t.find(".tooltip-inner").append('
'+e.data+"
")}),i.pop=t,r.find("body").append(i.pop),i.pop.hide()}!i.pop||void 0!==i.tooltipDisabled&&!1!==i.tooltipDisabled||(o(),a.parents().on("scroll",o),i.pop.show())}),a.on("mouseleave",function(){a.parents().off("scroll",o),i.pop&&i.pop.hide()}),i.$on("$destroy",function(){i.pop&&i.pop.remove()})}}}]),zaa.directive("convertToNumber",function(){return{require:"ngModel",link:function(e,t,n,i){i.$parsers.push(function(e){return null!=e?parseInt(e,10):null}),i.$formatters.push(function(e){return null!=e?""+e:null})}}}),zaa.directive("autoGrow",function(){return function(e,t,n){function i(){null==a&&(a=angular.element("
").css({position:"absolute",top:-1e4,left:-1e4,resize:"none"}),angular.element(document.body).append(a)),a.css({fontSize:t.css("font-size"),fontFamily:t.css("font-family"),lineHeight:t.css("line-height"),width:t.width(),paddingTop:t.css("padding-top"),paddingBottom:t.css("padding-bottom")});var e=t.val().replace(//g,">").replace(/&/g,"&").replace(/\n$/,"
 ").replace(/\n/g,"
").replace(/\s{2,}/g,function(e){return function(e,t){for(var n=0,i="";n
keyboard_arrow_down{{icon}}{{title}}
'}}}]),zaa.directive("crudLoader",["$http","$sce",function(t,i){return{restrict:"E",replace:!0,transclude:!1,scope:{api:"@",alias:"@",modelSelection:"@",modelSetter:"="},controller:["$scope",function(n){n.input={showWindow:!0},n.content=null,n.toggleWindow=function(){if(n.input.showWindow){if(-1'}}}]),zaa.directive("crudRelationLoader",["$http","$sce",function(n,i){return{restrict:"E",replace:!0,transclude:!1,scope:{api:"@api",arrayIndex:"@arrayIndex",modelClass:"@modelClass",id:"@id"},controller:["$scope",function(t){if(t.content=null,-1'}}}]),zaa.directive("zaaInjector",["$compile",function(i){return{restrict:"E",replace:!0,transclude:!1,scope:{dir:"=",model:"=",options:"=",label:"@label",grid:"@grid",fieldid:"@fieldid",placeholder:"@placeholder",initvalue:"@initvalue",autocomplete:"@autocomplete"},link:function(e,t){var n=i(angular.element("<"+e.dir+' options="options" initvalue="{{initvalue}}" fieldid="{{fieldid}}" placeholder="{{placeholder}}" autocomplete="{{autocomplete}}" model="model" label="{{label}}" i18n="{{grid}}" />'))(e);t.replaceWith(n)}}}]),zaa.directive("zaaSortRelationArray",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$filter",function(a,e){a.searchString,a.sourceData=[],a.dropdownOpen=!1,a.$watch(function(){return a.model},function(e,t){null==e&&(a.model=[])}),a.$watch(function(){return a.options},function(e,t){null!=e&&(a.sourceData=e.sourceData)}),a.getSourceOptions=function(){return a.sourceData},a.getModelItems=function(){return a.model},a.addToModel=function(n){var i=!1;angular.forEach(a.model,function(e,t){e.value==n.value&&(i=!0)}),i||a.model.push({value:n.value,label:n.label})},a.removeFromModel=function(e){a.model.splice(e,1)},a.moveUp=function(e){e=parseInt(e);var t=a.model[e];a.model[e]=a.model[e-1],a.model[e-1]=t},a.moveDown=function(e){e=parseInt(e);var t=a.model[e];a.model[e]=a.model[e+1],a.model[e+1]=t},a.elementInModel=function(n){var i=!1;return angular.forEach(a.model,function(e,t){e.value==n.value&&(i=!0)}),!i}}],template:function(){return'
play_arrowplay_arrow
{{item.label}}
delete
  • add_circle{{ option.label }}
arrow_drop_uparrow_drop_down
'}}}),zaa.directive("zaaTagArray",function(){return{restrict:"E",scope:{model:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$http",function(n,e){n.tags=[],e.get("admin/api-admin-common/tags").then(function(e){angular.forEach(e.data,function(e){e.id=parseInt(e.id),n.tags.push(e)})}),null==n.model?n.model=[]:angular.forEach(n.model,function(e,t){n.model[t]=parseInt(e)}),n.isInSelection=function(e){return e=parseInt(e),-1!=n.model.indexOf(e)},n.toggleSelection=function(e){var t=n.model.indexOf(e);-1
{{tag.name}}
'}}}),zaa.directive("zaaLink",["$filter",function(t){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope",function(n){n.unset=function(){n.model=!1,n.data.model=null},n.data={modalState:1,model:null},n.$watch("model",function(e,t){e&&(n.data.model=e)},!0),n.$watch("data.model",function(e,t){e&&(n.model=e)},!0),n.isEmpty=function(e){return!e||t("isEmpty")(e)}}],template:function(){return'
{{label}}
"}}}]),zaa.directive("zaaLinkOptions",function(){return{restrict:"EA",scope:{data:"="},templateUrl:"linkoptions.html",controller:["$scope",function(n){n.$watch(function(){return n.data},function(e,t){angular.isArray(e)&&(n.data={})})}]}}),zaa.directive("zaaSlug",function(){return{restrict:"E",scope:{model:"=",options:"=",listener:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$filter",function(n,i){n.$watch("listener",function(e,t){void 0!==e&&(n.model=i("slugify")(e))}),n.$watch("model",function(e,t){e!=t&&(n.model=i("slugify")(e))})}],template:function(){return'
'}}}),zaa.directive("zaaColor",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope",function(n){function i(){if(void 0===n.model||!n.model)return"#000";var e=n.model;if("string"==typeof n.model&&(e=e.substr(1)),3===e.length){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,n,i){return t+t+n+n+i+i})}return 6!==e.length?"#000":128<=(299*parseInt(e.substr(0,2),16)+587*parseInt(e.substr(2,2),16)+114*parseInt(e.substr(4,2),16))/1e3?"#000":"#fff"}n.textColor=i(),n.$watch(function(){return n.model},function(e,t){n.textColor=i()})}],template:function(){return'
'}}}),zaa.directive("zaaWysiwyg",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},template:function(){return'
'}}}),zaa.directive("zaaNumber",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",placeholder:"@placeholder",initvalue:"@initvalue"},link:function(n){n.$watch(function(){return n.model},function(e,t){null==e&&(n.model=parseInt(n.initvalue)),angular.isNumber(n.model)?n.isValid=!0:n.isValid=!1})},template:function(){return'
'}}}),zaa.directive("zaaDecimal",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",placeholder:"@placeholder"},controller:["$scope",function(e){null===e.options?e.steps=.01:e.steps=e.options.steps}],link:function(n){n.$watch(function(){return n.model},function(e,t){angular.isNumber(n.model)?n.isValid=!0:n.isValid=!1})},template:function(){return'
'}}}),zaa.directive("zaaText",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",placeholder:"@placeholder",autocomplete:"@autocomplete"},template:function(){return'
'}}}),zaa.directive("zaaReadonly",function(){return{restrict:"E",scope:{model:"=",label:"@label",i18n:"@i18n"},template:function(){return'
{{model}}
'}}}),zaa.directive("zaaAsyncValue",function(){return{restrict:"E",scope:{model:"=",api:"@",fields:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$timeout","$http",function(e,t,n){e.resetValue=function(){e.model=0,e.value=null}}],template:function(){return'
'}}}),zaa.directive("asyncValue",function(){return{restrict:"E",scope:{model:"=",api:"@",fields:"="},controller:["$scope","$timeout","$http",function(n,e,i){e(function(){n.$watch("model",function(e,t){e&&(n.value="",i.get(n.api+"/"+e+"?fields="+n.fields.join()).then(function(e){n.value,angular.forEach(e.data,function(e){e&&(n.value=n.value+e+" ")})}))})})}],template:function(){return''}}}),zaa.directive("zaaTextarea",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",placeholder:"@placeholder"},template:function(){return'
'}}}),zaa.directive("zaaPassword",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",autocomplete:"@autocomplete"},template:function(){return'
'}}}),zaa.directive("zaaRadio",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",initvalue:"@initvalue"},controller:["$scope","$timeout",function(t,e){t.setModelValue=function(e){t.model=e},t.init=function(){null!=t.model&&null!=t.model||(t.model=typeCastValue(t.initvalue))},e(function(){t.init()})}],template:function(){return'
'}}}),zaa.directive("zaaSelect",function(){return{restrict:"E",scope:{model:"=",options:"=",optionsvalue:"@optionsvalue",optionslabel:"@optionslabel",label:"@label",i18n:"@i18n",id:"@fieldid",initvalue:"@initvalue"},controller:["$scope","$timeout","$rootScope",function(e,t,n){null==e.optionsvalue&&(e.optionsvalue="value"),null==e.optionslabel&&(e.optionslabel="label")}],template:function(){return'
'}}}),zaa.directive("luyaSelect",function(){return{restrict:"E",scope:{model:"=ngModel",options:"=",optionsvalue:"@optionsvalue",optionslabel:"@optionslabel",id:"@fieldid",initvalue:"@initvalue",ngChange:"&"},controller:["$scope","$timeout","$rootScope",function(i,t,e){i.isOpen=0,null!=i.optionsvalue&&""!=i.optionsvalue||(i.optionsvalue="value"),null!=i.optionslabel&&""!=i.optionslabel||(i.optionslabel="label"),angular.isNumber(i.model)&&(i.model=typeCastValue(i.model)),i.$on("closeAllSelects",function(){i.isOpen&&i.closeSelect()}),t(function(){i.$watch(function(){return i.model},function(e,t){null!=e&&null!=e&&""!=e||(angular.isNumber(i.initvalue)&&(i.initvalue=typeCastValue(i.initvalue)),i.valueExistsInOptions(e)||(i.model=i.initvalue))})}),i.valueExistsInOptions=function(t){var n=!1;return angular.forEach(i.options,function(e){t==e[i.optionsvalue]&&(n=!0)}),n},i.toggleIsOpen=function(){i.isOpen||e.$broadcast("closeAllSelects"),i.isOpen=!i.isOpen},i.closeSelect=function(){i.isOpen=0},i.setModelValue=function(e){i.model=angular.isObject(e)?e[i.optionsvalue]:e,t(i.ngChange,0),i.closeSelect()},i.getSelectedLabel=function(){var t=i18n.ngrest_select_no_selection;return angular.forEach(i.options,function(e){i.model==e[i.optionsvalue]&&(t=e[i.optionslabel])}),t},i.hasSelectedValue=function(){var e=i.model;return!(!i.valueExistsInOptions(e)||e==i.initvalue)}}],template:function(){return'
{{getSelectedLabel()}}clearkeyboard_arrow_down
{{opt[optionslabel]}}
'}}}),zaa.directive("zaaCheckbox",function(){return{restrict:"E",scope:{model:"=",options:"=",i18n:"@i18n",id:"@fieldid",label:"@label",initvalue:"@initvalue"},controller:["$scope","$timeout",function(e,t){null===e.options||void 0===e.options?(e.valueTrue=1,e.valueFalse=0):(e.valueTrue=e.options["true-value"],e.valueFalse=e.options["false-value"]),e.init=function(){null!=e.model&&null!=e.model||(e.model=typeCastValue(e.initvalue))},t(function(){e.init()}),e.clicker=function(){e.model==e.valueTrue?e.model=e.valueFalse:e.model=e.valueTrue}}],template:function(){return'
'}}}),zaa.directive("zaaCheckboxArray",function(){return{restrict:"E",scope:{model:"=",options:"=",i18n:"@i18n",id:"@fieldid",label:"@label",preselect:"@preselect"},controller:["$scope","$filter",function(n,i){null==n.model&&(n.model=[]),n.preselectOptionValuesToModel=function(e){angular.forEach(e,function(e){n.model.push({value:e.value})})},n.searchString="",n.$watch("options",function(e,t){null!=e&&e.hasOwnProperty("items")&&(n.optionitems=i("orderBy")(e.items,"label"),n.preselect&&n.preselectOptionValuesToModel(e.items))}),n.filtering=function(){n.optionitems=i("filter")(n.options.items,n.searchString)},n.toggleSelection=function(e){for(var t in null==n.model&&(n.model=[]),n.model)if(n.model[t].value==e.value)return void n.model.splice(t,1);n.model.push({value:e.value})},n.isChecked=function(e){for(var t in n.model)if(n.model[t].value==e.value)return!0;return!1}}],link:function(e){e.random=Math.random().toString(36).substring(7)},template:function(){return'
search
{{optionitems.length}} '+i18n.js_dir_till+' {{options.items.length}}
'}}}),zaa.directive("zaaDatetime",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",id:"@fieldid",i18n:"@i18n",resetable:"@resetable"},controller:["$scope","$filter",function(i,a){i.isNumeric=function(e){return!isNaN(e)},i.$watch(function(){return i.model},function(e,t){if(null!=e&&null!=e){var n=new Date(1e3*e);i.pickerPreselect=n,i.date=a("date")(n,"dd.MM.yyyy"),i.hour=a("date")(n,"HH"),i.min=a("date")(n,"mm")}else i.date=null,i.model=null}),i.refactor=function(e){if(i.isNumeric(i.hour)&&""!=i.hour||(i.hour="0"),i.isNumeric(i.min)&&""!=i.min||(i.min="0"),"Invalid Date"==e||""==e||"NaN"==e)i.date=null,i.model=null;else{var t=e.split(".");if(3==t.length&&4==t[2].length){23
date_rangeclose
access_time
:
'}}}),zaa.directive("zaaDate",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",id:"@fieldid",i18n:"@i18n",resetable:"@resetable"},controller:["$scope","$filter",function(i,a){i.$watch(function(){return i.model},function(e,t){if(null!=e&&null!=e){var n=new Date(1e3*e);i.pickerPreselect=n,i.date=a("date")(n,"dd.MM.yyyy")}else i.date=null,i.model=null}),i.refactor=function(e){if("Invalid Date"==e||""==e)i.date=null,i.model=null;else{var t=e.split(".");if(3==t.length&&4==t[2].length){var n=t[1]+"/"+t[0]+"/"+t[2];i.model=Date.parse(n)/1e3,i.datePickerToggler=!1}}},i.$watch(function(){return i.date},function(e,t){e!=t&&null!=e&&null!=e&&i.refactor(e)}),i.autoRefactor=function(){i.refactor(i.date)},i.datePickerToggler=!1,i.toggleDatePicker=function(){i.datePickerToggler=!i.datePickerToggler},i.openDatePicker=function(){i.datePickerToggler=!0},i.closeDatePicker=function(){i.datePickerToggler=!1},i.reset=function(){i.model=null},i.getIsResetable=function(){return!i.resetable||parseInt(i.resetable)}}],template:function(){return'
date_rangeclose
'}}}),zaa.directive("zaaTable",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope",function(i){null==i.model&&(i.model=[{0:""}]),i.addColumn=function(){var e=0;for(var t in i.model[0])e++;for(var n in i.model)i.model[n][e]=""},i.addRow=function(){var e=i.model[0],t={};for(var n in e)t[n]="";i.model.push(t)},i.removeColumn=function(e){for(var t in i.model){var n=i.model[t];n instanceof Array?n.splice(e,1):delete n[e]}},i.moveLeft=function(e){for(var t in e=parseInt(e),i.model){var n=i.model[t][e];i.model[t][e]=i.model[t][e-1],i.model[t][e-1]=n}},i.moveRight=function(e){for(var t in e=parseInt(e),i.model){var n=i.model[t][e];i.model[t][e]=i.model[t][e+1],i.model[t][e+1]=n}},i.moveUp=function(e){e=parseInt(e);var t=i.model[e];i.model[e]=i.model[e-1],i.model[e-1]=t},i.moveDown=function(e){e=parseInt(e);var t=i.model[e];i.model[e]=i.model[e+1],i.model[e+1]=t},i.removeRow=function(e){i.model.splice(e,1)},i.showRightButton=function(e){return parseInt(e)
'}}}),zaa.directive("zaaFileUpload",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},template:function(){return'
'}}}),zaa.directive("zaaImageUpload",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},template:function(){return'
'}}}),zaa.directive("zaaImageArrayUpload",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},link:function(e,n,t){e.$watch("model",function(e,t){1<=e.length?$(n).removeClass("is-empty").addClass("is-not-empty"):$(n).removeClass("is-not-empty").addClass("is-empty")},!0)},controller:["$scope",function(n){null==n.model&&(n.model=[]),n.add=function(){null!=n.model&&""!=n.model&&null!=n.model||(n.model=[]),n.model.push({imageId:0,caption:""})},n.remove=function(e){n.model.splice(e,1)},n.moveUp=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e-1],n.model[e-1]=t},n.moveDown=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e+1],n.model[e+1]=t},n.showDownButton=function(e){return parseInt(e)

'+i18n.js_dir_no_selection+'

'}}}),zaa.directive("zaaFileArrayUpload",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$element","$timeout",function(n,e,t){null==n.model&&(n.model=[]),n.add=function(){null!=n.model&&""!=n.model&&null!=n.model||(n.model=[]),n.model.push({fileId:0,caption:""})},n.remove=function(e){n.model.splice(e,1)},n.moveUp=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e-1],n.model[e-1]=t},n.moveDown=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e+1],n.model[e+1]=t},n.showDownButton=function(e){return parseInt(e)

'+i18n.js_dir_no_selection+'

'}}}),zaa.directive("zaaMultipleInputs",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$timeout",function(n,e){n.init=function(){null==n.model||null==n.model?n.model=[]:angular.forEach(n.model,function(e,t){0==Object.keys(e).length&&(n.model[t]={})})},n.add=function(){null!=n.model&&""!=n.model&&null!=n.model||(n.model=[]),n.model.push({})},n.remove=function(e){n.model.splice(e,1)},n.moveUp=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e-1],n.model[e-1]=t},n.moveDown=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e+1],n.model[e+1]=t},n.showDownButton=function(e){return parseInt(e)

'+i18n.js_dir_no_selection+'

'}}}),zaa.directive("zaaJsonObject",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope",function(t){t.$watch("model",function(e){angular.isArray(e)&&(t.model={}),null==e&&(t.model={})}),t.add=function(e){t.model[e]=""},t.remove=function(e){delete t.model[e]}}],template:function(){return'
{{key}}
'}}}),zaa.directive("zaaListArray",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$element","$timeout",function(n,t,e){n.init=function(){null!=n.model&&null!=n.model||(n.model=[])},n.add=function(){null!=n.model&&""!=n.model&&null!=n.model||(n.model=[]),n.model.push({value:""}),n.setFocus()},n.remove=function(e){n.model.splice(e,1)},n.refactor=function(e,t){e!==n.model.length-1&&""==t.value&&n.remove(e)},n.setFocus=function(){e(function(){var e=t.children(".list").children(".list__item:last-of-type").children(".list__left").children("input");1==e.length&&e[0].focus()},50)},n.moveUp=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e-1],n.model[e-1]=t},n.moveDown=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e+1],n.model[e+1]=t},n.showDownButton=function(e){return parseInt(e)

'+i18n.js_dir_no_selection+'

'}}}),zaa.directive("storageFileDisplay",function(){return{restrict:"E",scope:{fileId:"@fileId"},controller:["$scope","$filter","ServiceFilesData",function(n,e,i){n.fileId=0,n.fileinfo=null,n.$watch("fileId",function(e,t){0!=e&&null!=e&&null!=e&&i.getFile(e).then(function(e){n.fileinfo=e},function(){n.fileinfo=null})})}],template:function(){return'{{ fileinfo.name_original }}'}}}),zaa.directive("storageImageCrudList",function(){return{restrict:"E",scope:{imageId:"@imageId"},controller:["$scope","ServiceImagesData",function(n,t){n.imageSrc=null,n.$watch("imageId",function(e,t){e!=t&&(n.imageSrc=null)}),n.$on("requestImageSourceReady",function(){0!=n.imageId&&t.getImage(n.imageId).then(function(e){e.tinyCropImage?n.imageSrc=e.tinyCropImage.source:t.getImage(n.imageId,!0).then(function(e){e.tinyCropImage&&(n.imageSrc=e.tinyCropImage.source)})})})}],template:function(){return'
{{imageSrc}}
'}}}),zaa.directive("storageImageThumbnailDisplay",function(){return{restrict:"E",scope:{imageId:"@imageId"},controller:["$scope","$filter","ServiceImagesData","ServiceFilesData",function(n,e,i,t){n.$watch("imageId",function(e,t){e!=t&&(n.imageSrc=null)}),n.$watch(function(){return n.imageId},function(e,t){null==e&&null==e||i.getImage(e).then(function(e){n.imageSrc=e.tinyCropImage.source},function(){n.imageSrc=null})}),n.imageSrc=null}],template:function(){return'
{{imageSrc}}
'}}}),zaa.directive("storageFileUpload",function(){return{restrict:"E",scope:{ngModel:"="},controller:["$scope","$filter","ServiceFilesData",function(t,e,n){t.modal={state:1},t.modalContainer=!1,t.fileinfo=null,t.select=function(e){t.toggleModal(),t.ngModel=e},t.reset=function(){t.ngModel=0,t.fileinfo=null},t.toggleModal=function(){t.modalContainer=!t.modalContainer,t.modal.state=!t.modal.state},t.$watch(function(){return t.ngModel},function(e){if(null==e||null==e||!angular.isNumber(e))return null;n.getFile(e).then(function(e){t.fileinfo=e},function(){t.fileinfo=null})})}],templateUrl:"storageFileUpload"}}),zaa.directive("storageImageUpload",function(){return{restrict:"E",scope:{ngModel:"=",options:"="},controller:["$scope","$http","$filter","ServiceFiltersData","ServiceImagesData","AdminToastService","ServiceFilesData",function(n,i,a,e,o,l,t){n.filtersData=e.data,n.$on("service:FiltersData",function(e,t){n.filtersData=t}),n.noFilters=function(){if(n.options)return n.options.no_filter},n.thumbnailfilter=null,n.imageLoading=!1,n.fileId=0,n.filterId=0,n.imageinfo=null,n.imageNotFoundError=!1,n.thumb=!1,n.filterApply=function(){n.imageLoading=!0,t.getFile(n.fileId).then(function(e){var t=a("filter")(e.images,{filter_id:n.filterId});0==t.length?i.post("admin/api-admin-storage/image-filter",{fileId:n.fileId,filterId:n.filterId}).then(function(e){n.ngModel=e.data.id,l.success(i18n.js_dir_image_upload_ok),n.imageLoading=!1},function(e){l.error(i18n.js_dir_image_filter_error),n.imageLoading=!1}):(n.ngModel=t[0].id,n.imageLoading=!1)},function(){n.imageinfo=null,n.thumb=!1,n.ngModel=0})},n.changeFilter=function(){n.filterApply()},n.$watch(function(){return n.fileId},function(e,t){null!=e&&null!=e&&n.filterApply()}),n.$watch(function(){return n.ngModel},function(e,t){null!=e&&null!=e&&0!=e&&o.getImage(e).then(function(e){n.applyImageDetails(e),n.fileId=e.file_id,n.filterId=e.filter_id},function(){n.fileId=0,n.filterId=0,n.imageinfo=null,n.thumb=!1})}),n.applyImageDetails=function(e){n.imageinfo=e,n.thumb=e}}],templateUrl:"storageImageUpload"}}),zaa.directive("storageFileManager",function(){return{restrict:"E",transclude:!1,scope:{allowSelection:"@selection",onlyImages:"@onlyImages"},controller:["$scope","$http","$filter","$timeout","$rootScope","$q","HtmlStorage","cfpLoadingBar","Upload","ServiceFoldersData","ServiceFilesData","LuyaLoading","AdminToastService","ServiceFoldersDirecotryId","ServiceAdminTags",function(a,o,t,n,e,l,r,i,s,c,d,u,p,f,m){a.foldersData=c.data,a.$on("service:FoldersData",function(e,t){a.foldersData=t}),a.foldersDataReload=function(){return c.load(!0)},a.tags=[],m.load().then(function(e){a.tags=e}),a.filesData=[],a.totalFiles=0,a.pageCount=0,a.currentPageId=parseInt(r.getValue("filemanager.pageId",1)),a.$watch("currentPageId",function(e,t){void 0!==e&&e!=t&&a.getFilesForCurrentPage()},!0),a.$watch("currentFolderId",function(e,t){void 0!==e&&(a.generateFolderInheritance(e),a.getFilesForPageAndFolder(e,1))},!0),a.folderInheritance=[],a.generateFolderInheritance=function(e){a.folderInheritance=[],a.findFolderInheritance(e)},a.findFolderInheritance=function(e){if(a.foldersData&&a.foldersData.hasOwnProperty(e)){var t=a.foldersData[e];a.folderInheritance.push(t),t&&t.parentId&&a.findFolderInheritance(t.parentId)}},a.hasFolderActiveChild=function(t){var n=!1;return angular.forEach(a.folderInheritance,function(e){e.id==t&&(n=!0)}),n},a.getFilesForPageAndFolder=function(n,i){return l(function(t,e){o.get(a.createUrl(n,i,a.sortField,a.searchQuery)).then(function(e){return r.setValue("filemanager.sortField",a.sortField),r.setValue("filemanager.pageId",parseInt(i)),a.filesResponseToVars(e),t(!0)})})},a.createUrl=function(e,t,n,i){return"admin/api-admin-storage/data-files?folderId="+e+"&page="+t+"&expand=createThumbnail,createThumbnailMedium,isImage,sizeReadable&sort="+n+"&search="+i},a.filesResponseToVars=function(e){a.filesData=e.data,a.pageCount=e.headers("X-Pagination-Page-Count"),a.currentPageId=parseInt(e.headers("X-Pagination-Current-Page")),a.totalFiles=e.headers("X-Pagination-Total-Count")},a.filesMetaToPagination=function(e){a.pageCount=e.totalPages},a.getFilesForCurrentPage=function(){return a.getFilesForPageAndFolder(a.currentFolderId,a.currentPageId)},a.currentFolderId=f.folderId,a.foldersDirecotryIdReload=function(){return f.load(!0)},a.folderCountMessage=function(e){return i18nParam("js_filemanager_count_files_overlay",{count:e.filesCount})},a.errorMsg=null,a.replaceFile=function(e,t){(a.replaceFiled=e)&&(u.start(),s.upload({url:"admin/api-admin-storage/file-replace",data:{file:e,fileId:a.fileDetail.id,pageId:a.currentPageId}}).then(function(e){u.stop(),200==e.status&&(a.getFilesForCurrentPage().then(function(){p.success(i18n.js_dir_manager_file_replace_ok)}),a.openFileDetail(a.fileDetail,!0))},function(){u.stop()}))},a.$watch("uploadingfiles",function(e){if(null!=e){a.uploadResults=0,u.start(i18n.js_dir_upload_wait);for(var t=0;t\n
\n

'+i18n.crop_source_image+'

\n
\n \n
\n
    \n
  • crop_free
    '+i18n.crop_size_free+'
  • \n
  • crop_square
    '+i18n.crop_size_1to1+'
  • \n
  • crop_16_9
    '+i18n.crop_size_desktop+'
  • \n
  • crop_portrait
    '+i18n.crop_size_mobile+'
  • \n
\n
\n
\n

'+i18n.crop_preview+'

\n \n\n
    \n
  • looks_one
    '+i18n.crop_quality_high+'
  • \n
  • looks_two
    '+i18n.crop_quality_medium+'
  • \n
  • looks_3
    '+i18n.crop_quality_low+'
  • \n
\n\n
\n \n \n '+i18n.crop_btn_as_copy_hint+'\n
\n\n \n \n
\n \n "}}),zaa.directive("pagination",function(){return{restrict:"E",scope:{currentPage:"=",pageCount:"="},controller:["$scope","$timeout",function(t,e){t.pageNumberInputVal=t.currentPage,t.$watch("currentPage",function(e){t.pageNumberInputVal=e}),t.$watch("pageNumberInputVal",function(){t.inputWidth=25+10*(t.pageNumberInputVal.toString().length<=0?1:t.pageNumberInputVal.toString().length)});var n=null;t.pageNumberInputChange=function(){n&&e.cancel(n),n=e(function(){isNaN(t.pageNumberInputVal)?t.pageNumberInputVal=t.currentPage:parseInt(t.pageNumberInputVal)>parseInt(t.pageCount)||parseInt(t.pageNumberInputVal)<=0?t.pageNumberInputVal=t.currentPage:t.currentPage=t.pageNumberInputVal},500)},t.next=function(){t.currentPage\n \n \n
\n \n /\n {{pageCount}}\n
\n \n \n \n '}}),zaa.controller("DefaultDashboardObjectController",["$scope","$http","$sce",function(t,n,e){t.data,t.loadData=function(e){n.get(e).then(function(e){t.data=e.data})}}]),zaa.controller("CrudController",["cfpLoadingBar","$scope","$rootScope","$filter","$http","$sce","$state","$timeout","$injector","$q","AdminLangService","AdminToastService","CrudTabService","ServiceImagesData",function(t,r,e,n,s,i,a,o,l,c,d,u,p,f){r.toast=u,r.AdminLangService=d,r.tabService=p,r.clearData=function(){u.confirm(i18n.ngrest_delete_all_button_confirm_message,i18n.ngrest_delete_all_button_label,function(){var e=this;s.get(r.config.apiEndpoint+"/truncate").then(function(){e.close(),r.loadList()})})},r.crudSwitchType=0,r.switchToTab=function(e){angular.forEach(r.tabService.tabs,function(e){e.active=!1}),e.active=!0,r.switchTo(4)},r.addAndswitchToTab=function(e,t,n,i,a){r.tabService.addTab(e,t,n,i,a),r.switchTo(4)},r.closeTab=function(e,t){r.tabService.remove(t,r)},r.switchTo=function(e,t){r.config.relationCall?r.crudSwitchType=e:(t&&r.resetData(),0==e&&s.get(r.config.apiEndpoint+"/unlock",{ignoreLoadingBar:!0}),0!=e&&1!=e||r.config.inline||a.go("default.route"),4===(r.crudSwitchType=e)||r.config.inline||angular.forEach(r.tabService.tabs,function(e){e.active=!1}))},r.closeUpdate=function(){r.switchTo(0,!0)},r.closeCreate=function(){r.switchTo(0,!0)},r.activeWindowModal=!0,r.openActiveWindow=function(){r.activeWindowModal=!1},r.closeActiveWindow=function(){r.activeWindowModal=!0},r.changeGroupByField=function(){0==r.config.groupByField?r.config.groupBy=0:r.config.groupBy=1},r.isSettingsVisible=!1,r.toggleSettingsMenu=function(){r.isSettingsVisible=!r.isSettingsVisible},r.hiddeSettingsMenu=function(){r.isSettingsVisible=!1},r.isExportModalHidden=!0,r.exportdata={header:1,type:"xlsx"},r.toggleExportModal=function(){r.isExportModalHidden=!r.isExportModalHidden},r.exportResponse=!1,r.generateExport=function(){s.post(r.config.apiEndpoint+"/export?"+r.config.apiExportQueryString,r.exportdata).then(function(e){r.exportResponse=e.data})},r.downloadExport=function(){var e=r.exportResponse.url;return r.exportResponse=!1,window.open(e),!1},r.applySaveCallback=function(){r.config.saveCallback&&l.invoke(r.config.saveCallback,this)},r.isOrderBy=function(e){return e==r.config.orderBy},r.changeOrder=function(e,t){r.config.orderBy=t+e,s.post("admin/api-admin-common/ngrest-order",{apiEndpoint:r.config.apiEndpoint,sort:t,field:e},{ignoreLoadingBar:!0}),r.loadList()},r.callActiveButton=function(e,t,n){var i=angular.element(n.currentTarget);i.addClass("crud-buttons-button-loading"),s.get(r.config.apiEndpoint+"/active-button?hash="+e+"&id="+t.join()).then(function(e){i.removeClass("crud-buttons-button-loading"),i.addClass("crud-buttons-button-success"),o(function(){i.removeClass("crud-buttons-button-success")},5e3),angular.forEach(e.data.events,function(e){"loadList"==e&&r.loadList()}),u.success(e.data.message)},function(e){i.removeClass("crud-buttons-button-loading"),i.addClass("crud-buttons-button-danger"),o(function(){i.removeClass("crud-buttons-button-danger")},5e3),u.error(e.data.message)})},r.reloadActiveWindow=function(){r.getActiveWindow(r.data.aw.hash,r.data.aw.itemId)},r.getActiveWindow=function(t,n,e){s.post(r.config.activeWindowRenderUrl,{itemId:n,activeWindowHash:t,ngrestConfigHash:r.config.ngrestConfigHash}).then(function(e){r.openActiveWindow(),r.data.aw.itemId=n,r.data.aw.configCallbackUrl=r.config.activeWindowCallbackUrl,r.data.aw.configHash=r.config.ngrestConfigHash,r.data.aw.hash=t,r.data.aw.content=i.trustAsHtml(e.data.content),r.data.aw.title=e.data.title,r.$broadcast("awloaded",{id:t})})},r.getActiveWindowCallbackUrl=function(e){return r.data.aw.configCallbackUrl+"?activeWindowCallback="+e+"&ngrestConfigHash="+r.data.aw.configHash+"&activeWindowHash="+r.data.aw.hash},r.sendActiveWindowCallback=function(e,t){t=t||{};return s.post(r.getActiveWindowCallbackUrl(e),$.param(t),{headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}})},r.searchPromise=null,r.$watch("config.searchQuery",function(e,t){e!=t&&null!=e&&null!=e&&r.applySearchQuery(e)}),r.applySearchQuery=function(e){null!=e&&null!=e&&(o.cancel(r.searchPromise),0==e.length?r.loadList(1):(t.start(),r.searchPromise=o(function(){r.reloadCrudList(1)},700)))},r.generateSearchPromise=function(e,t){return s.post(r.generateUrlWithParams("search",t),{query:e}).then(function(e){r.parseResponseQueryToListArray(e)})},r.parentSelectInline=function(e){r.$parent.$parent.$parent.setModelValue(r.getRowPrimaryValue(e),e)},r.checkIfFieldExistsInPopulateCondition=function(e){var t=r.config.pools;if(t.hasOwnProperty(e))return t[e];if(r.config.relationCall){var n=r.$parent.$parent.config.relations[parseInt(r.config.relationCall.arrayIndex)].relationLink;if(null!==n&&n.hasOwnProperty(e))return parseInt(r.config.relationCall.id)}return!1},r.relationItems=[],r.deleteItem=function(e,t){u.confirm(i18n.js_ngrest_rm_page,i18n.ngrest_button_delete,["$toast",function(t){s.delete(r.config.apiEndpoint+"/"+e).then(function(e){r.loadList(),t.close(),u.success(i18n.js_ngrest_rm_confirm)},function(e){r.printErrors(e)})}])},r.toggleUpdate=function(n){r.resetData(),s.get(r.config.apiEndpoint+"/"+n+"?"+r.config.apiUpdateQueryString).then(function(e){var t=e.data;r.data.update=t,r.config.relationCall?r.crudSwitchType=2:r.switchTo(2),r.config.inline||a.go("default.route.detail",{id:n}),r.data.updateId=n},function(e){u.error(i18n.js_ngrest_error)})},r.highlightPkValue=null,r.highlightTimeout=5e3,r.isRowHighlighted=function(e){return r.getRowPrimaryValue(e)==r.highlightPkValue},r.submitUpdate=function(){s.put(r.config.apiEndpoint+"/"+r.data.updateId,angular.toJson(r.data.update,!0)).then(function(e){u.success(i18n.js_ngrest_rm_update),r.loadList(r.pager.currentPage).then(function(){r.applySaveCallback(),r.switchTo(0,!0),r.highlightPkValue=r.getRowPrimaryValue(e.data),o(function(){r.highlightPkValue=null},r.highlightTimeout)})},function(e){r.printErrors(e.data)})},r.submitCreate=function(){s.post(r.config.apiEndpoint,angular.toJson(r.data.create,!0)).then(function(e){u.success(i18n.js_ngrest_rm_success),r.loadList().then(function(){r.applySaveCallback(),r.switchTo(0,!0),r.resetData(),r.highlightPkValue=r.getRowPrimaryValue(e.data),o(function(){r.highlightPkValue=null},r.highlightTimeout)})},function(e){r.printErrors(e.data)})},r.printErrors=function(e){angular.forEach(e,function(e,t){u.error(e.message)})},r.resetData=function(){r.data.create=angular.copy({}),r.data.update=angular.copy({})},r.changeNgRestFilter=function(){s.post("admin/api-admin-common/ngrest-filter",{apiEndpoint:r.config.apiEndpoint,filterName:r.config.filter},{ignoreLoadingBar:!0}),r.loadList(1)},r.pager={currentPage:1,pageCount:1,perPage:0,totalItems:0},r.$watch("pager.currentPage",function(e,t){e===t||null==e||null==e||r.loadList(e)},!0),r.setPagination=function(e,t,n,i){r.totalRows=i,r.pager={currentPage:parseInt(e),pageCount:t,perPage:n,totalItems:i}},r.toggleStatus=function(t,n,i,e){var a=!e?1:0,o=t[r.config.pk],l={};l[n]=a,s.put(r.config.apiEndpoint+"/"+o+"?ngrestCallType=update&fields="+n,angular.toJson(l,!0)).then(function(e){t[n]=a,u.success(i18nParam("js_ngrest_toggler_success",{field:i}))},function(e){r.printErrors(e)})},r.sortableUp=function(e,t,n){var i=r.data.listArray[e-1];r.data.listArray[e-1]=t,r.data.listArray[e]=i,r.updateSortableIndexPositions(n)},r.sortableDown=function(e,t,n){var i=r.data.listArray[e+1];r.data.listArray[e+1]=t,r.data.listArray[e]=i,r.updateSortableIndexPositions(n)},r.updateSortableIndexPositions=function(a){angular.forEach(r.data.listArray,function(e,t){var n={};n[a]=t;var i=r.getRowPrimaryValue(e);s.put(r.config.apiEndpoint+"/"+i+"?ngrestCallType=update&fields="+a,angular.toJson(n,!0),{ignoreLoadingBar:!0})})},r.loadService=function(){r.initServiceAndConfig()},r.evalSettings=function(e){e.hasOwnProperty("order")&&(r.config.orderBy=e.order),e.hasOwnProperty("filterName")&&(r.config.filter=e.filterName)},r.getRowPrimaryValue=function(t){var e=r.config.pk;if(angular.isArray(e)){var n=[];return angular.forEach(e,function(e){n.push(t[e])}),n.join()}return t[r.config.pk]},r.tagsFilterIds=[],r.isTagFilterActive=function(e){return-1!=r.tagsFilterIds.indexOf(e)},r.toggleTagFilter=function(e){var t=r.tagsFilterIds.indexOf(e);-1==t?r.tagsFilterIds.push(e):r.tagsFilterIds.splice(t,1),r.loadList()},r.initServiceAndConfig=function(){var t=c.defer();return s.get(r.config.apiEndpoint+"/services?"+r.config.apiServicesQueryString).then(function(e){r.service=e.data.service,r.serviceResponse=e.data,r.evalSettings(e.data._settings),r.$parent.notifications&&r.$parent.notifications.hasOwnProperty(r.serviceResponse._authId)&&delete r.$parent.notifications[r.serviceResponse._authId],t.resolve()}),t.promise},r.toggleNotificationMute=function(){s.post(r.config.apiEndpoint+"/toggle-notification",{mute:!r.serviceResponse._notifcation_mute_state}).then(function(e){r.initServiceAndConfig()})},r.getFieldHelp=function(e){return!!(r.serviceResponse&&r.serviceResponse._hints&&r.serviceResponse._hints.hasOwnProperty(e))&&r.serviceResponse._hints[e]},r.loadList=function(e){return null==e&&r.pager?r.reloadCrudList(r.pager.currentPage):r.reloadCrudList(e)},r.totalRows=0,r.requestedImages=[],r.parseResponseQueryToListArray=function(n){r.setPagination(n.headers("X-Pagination-Current-Page"),n.headers("X-Pagination-Page-Count"),n.headers("X-Pagination-Per-Page"),n.headers("X-Pagination-Total-Count")),r.data.listArray=n.data,r.requestedImages=[],angular.forEach(r.service,function(e,t){e.hasOwnProperty("lazyload_images")&&angular.forEach(n.data,function(e){r.requestedImages.push(e[t])})}),o(function(){f.loadImages(r.requestedImages).then(function(){r.$broadcast("requestImageSourceReady"),r.requestedImages=[]})})},r.generateUrlWithParams=function(e,t){var n=r.config.apiEndpoint+"/"+e+"?"+r.config.apiListQueryString;r.config.orderBy&&(n=n+"&sort="+r.config.orderBy.replace("+","")),void 0!==t&&(n=n+"&page="+t);var i=r.config.searchQuery;i&&(n=n+"&query="+i);var a=r.tagsFilterIds.join(",");return a&&(n=n+"&tags="+a),n},r.reloadCrudList=function(e){var t=c.defer();if(0==parseInt(r.config.filter)||null===r.config.filter){if(r.config.relationCall){n=(n=r.generateUrlWithParams("relation-call",e))+"&arrayIndex="+r.config.relationCall.arrayIndex+"&id="+r.config.relationCall.id+"&modelClass="+r.config.relationCall.modelClass}else{if(r.config.searchQuery)return r.generateSearchPromise(r.config.searchQuery,e);var n=r.generateUrlWithParams("list",e)}s.get(n).then(function(e){t.resolve(e),r.parseResponseQueryToListArray(e)})}else{n=(n=r.generateUrlWithParams("filter",e))+"&filterName="+r.config.filter,s.get(n).then(function(e){r.parseResponseQueryToListArray(e),t.resolve(e)})}return t.promise},r.service=!1,r.$on("secondMenuClick",function(){r.isInitalized&&(r.loadList(),r.switchTo(0,!0))}),r.data={create:{},update:{},aw:{},list:{},updateId:0},r.isInitalized=!1,r.$watch("config",function(e,t){o(function(){r.initServiceAndConfig().then(function(){r.isInitalized=!0,r.loadList()})})})}]),zaa.controller("ActiveWindowTagController",["$scope","$http","AdminToastService",function(n,e,i){n.crud=n.$parent,n.tags=[],n.relation={},n.newTagName=null,n.loadTags=function(){e.get(n.crud.getActiveWindowCallbackUrl("LoadTags")).then(function(e){n.tags=e.data})},n.loadRelations=function(){e.get(n.crud.getActiveWindowCallbackUrl("LoadRelations")).then(function(e){n.relation={},e.data.forEach(function(e,t){n.relation[e.tag_id]=1})})},n.saveTag=function(){var t=n.newTagName;""!==t&&n.crud.sendActiveWindowCallback("SaveTag",{tagName:t}).then(function(e){e.data?(n.tags.push({id:e.data,name:t}),i.success(t+" wurde gespeichert.")):i.error(t+" "+i18n.js_tag_exists),n.newTagName=null})},n.saveRelation=function(t,e){n.crud.sendActiveWindowCallback("SaveRelation",{tagId:t.id,value:e}).then(function(e){n.relation[t.id]=e.data,i.success(i18n.js_tag_success)})},n.$watch(function(){return n.data.aw.itemId},function(e,t){n.loadRelations()}),n.loadTags()}]),zaa.controller("ActiveWindowGalleryController",["$scope","$http","$filter",function(o,e,t){o.crud=o.$parent,o.files=[],o.select=function(e){0==t("filter")(o.files,{fileId:e},!0).length&&o.crud.sendActiveWindowCallback("AddImageToIndex",{fileId:e}).then(function(e){var t=e.data;o.files.push(t)})},o.loadImages=function(){e.get(o.crud.getActiveWindowCallbackUrl("loadAllImages")).then(function(e){o.files=e.data})},o.changePosition=function(e,t,n){t=parseInt(t);var i=o.files[t];"up"==n?(o.files[t]=o.files[t-1],o.files[t-1]=i):"down"==n&&(o.files[t]=o.files[t+1],o.files[t+1]=i);var a=o.files[t];o.crud.sendActiveWindowCallback("ChangeSortIndex",{new:a,old:i})},o.moveUp=function(e,t){o.changePosition(e,t,"up")},o.moveDown=function(e,t){o.changePosition(e,t,"down")},o.remove=function(e,t){o.crud.sendActiveWindowCallback("RemoveFromIndex",{imageId:e.originalImageId}).then(function(e){o.files.splice(t,1)})},o.$watch(function(){return o.data.aw.itemId},function(e,t){o.loadImages()})}]),zaa.controller("ActiveWindowGroupAuth",["$scope","$http","CacheReloadService",function(n,e,t){n.crud=n.$parent,n.reload=function(){t.reload()},n.rights=[],n.auths=[],n.save=function(e){n.crud.sendActiveWindowCallback("saveRights",{data:e}).then(function(e){n.getRights(),n.reload()})},n.clearModule=function(e){angular.forEach(e,function(e){n.rights[e.id]={base:0,create:0,update:0,delete:0}})},n.toggleModule=function(e){angular.forEach(e,function(e){n.rights[e.id]={base:1,create:1,update:1,delete:1}})},n.toggleGroup=function(e){objectGroup=n.rights[e],1==objectGroup.base?(objectGroup.create=1,objectGroup.update=1,objectGroup.delete=1):0==objectGroup.base&&(objectGroup.create=0,objectGroup.update=0,objectGroup.delete=0)},n.toggleAll=function(){angular.forEach(n.auths,function(e){angular.forEach(e,function(e){n.rights[e.id]={base:1,create:1,update:1,delete:1}})})},n.untoggleAll=function(){angular.forEach(n.auths,function(e){angular.forEach(e,function(e){n.rights[e.id]={base:0,create:0,update:0,delete:0}})})},n.getRights=function(){e.get(n.crud.getActiveWindowCallbackUrl("getRights")).then(function(e){n.rights=e.data.rights,n.auths=e.data.auths})},n.$on("awloaded",function(e,t){n.getRights()}),n.$watch(function(){return n.data.aw.itemId},function(e,t){n.getRights()})}]),zaa.controller("DefaultController",["$scope","$http","$state","$stateParams","CrudTabService",function(a,t,n,i,o){a.moduleId=n.params.moduleId,a.loadDashboard=function(){return a.currentItem=null,a.getDashboard(a.moduleId),n.go("default",{moduleId:a.moduleId})},a.isOpenModulenav=!1,a.items=[],a.itemRoutes=[],a.currentItem=null,a.dashboard=[],a.itemAdd=function(e,t){for(var n in a.items.push({name:e,items:t}),t){var i=t[n];a.itemRoutes[i.route]={alias:i.alias,icon:i.icon}}},a.getDashboard=function(e){t.get("admin/api-admin-menu/dashboard",{params:{nodeId:e}}).then(function(e){a.dashboard=e.data})},a.init=function(){a.get(),a.getDashboard(a.moduleId)},a.resolveCurrentItem=function(){if(!a.currentItem&&("default.route"==n.current.name||"default.route.detail"==n.current.name)){var e=[i.moduleRouteId,i.controllerId,i.actionId].join("/");a.itemRoutes.indexOf(e)&&(a.currentItem=a.itemRoutes[e],a.currentItem.route=e)}},a.click=function(e){a.isOpenModulenav=!1;var t=(a.currentItem=e).route.split("/");o.clear(),a.$broadcast("secondMenuClick",{item:e}),n.go("default.route",{moduleRouteId:t[0],controllerId:t[1],actionId:t[2]})},a.get=function(){t.get("admin/api-admin-menu/items",{params:{nodeId:a.moduleId}}).then(function(e){var t=e.data;for(var n in t.groups){var i=t.groups[n];a.itemAdd(i.name,i.items)}a.resolveCurrentItem()})},a.hasSubUnreadNotificaton=function(e){return a.$parent.notifications&&a.$parent.notifications.hasOwnProperty(e.authId)?a.$parent.notifications[e.authId]:0},a.$on("topMenuClick",function(e){a.currentItem=null}),a.init()}]),zaa.controller("DashboardController",["$scope",function(e){e.logItemOpen=!1}]),zaa.filter("lockFilter",function(){return function(e,t,n){var i=!1;return angular.forEach(e,function(e){e.lock_table==t&&e.lock_pk==n&&(i=e)}),i}}),zaa.controller("LayoutMenuController",["$scope","$document","$http","$state","$timeout","$window","$filter","HtmlStorage","CacheReloadService","AdminDebugBar","LuyaLoading","AdminToastService","AdminClassService",function(a,e,n,o,i,t,l,r,s,c,d,u,p){a.AdminClassService=p,a.AdminDebugBar=c,a.LuyaLoading=d,a.toastQueue=u.queue,a.reload=function(){s.reload()},a.reload=function(e){0==e?t.location.reload():s.reload()},a.reloadButtonCall=function(e){n.get("admin/api-admin-common/reload-button-call?key="+e).then(function(e){u.success(e.data.message)})},a.isHover=r.getValue("sidebarToggleState",!1),a.toggleMainNavSize=function(){a.isHover=!a.isHover,r.setValue("sidebarToggleState",a.isHover)},a.profile={},a.settings={},a.packages=[],a.getProfileAndSettings=function(){n.get("admin/api-admin-user/session").then(function(e){a.profile=e.data.user,a.settings=e.data.settings,a.packages=e.data.packages})},a.browser=null,a.detectBrowser=function(){a.browser=[bowser.name.replace(" ","-").toLowerCase()+"-"+bowser.version,bowser.mac?"mac-os-"+(bowser.osversion?bowser.osversion:""):"windows-"+(bowser.osversion?bowser.osversion:"")].join(" ")},a.detectBrowser(),a.getProfileAndSettings(),a.debugDetail=null,a.debugDetailKey=null,a.loadDebugDetail=function(e,t){a.debugDetail=e,a.debugDetailKey=t},a.closeDebugDetail=function(){a.debugDetail=null,a.debugDetailKey=null},a.notify=null,a.forceReload=0,a.showOnlineContainer=!1,a.searchDetailClick=function(t,i){"custom"==t.type?a.click(t.menuItem).then(function(){if(t.stateProvider){var n={};angular.forEach(t.stateProvider.params,function(e,t){n[t]=i[e]}),o.go(t.stateProvider.state,n).then(function(){a.closeSearchInput()})}else a.closeSearchInput()}):a.click(t.menuItem.module).then(function(){var e=t.menuItem.route.split("/");o.go("default.route",{moduleRouteId:e[0],controllerId:e[1],actionId:e[2]}).then(function(){if(t.stateProvider){var n={};angular.forEach(t.stateProvider.params,function(e,t){n[t]=i[e]}),o.go(t.stateProvider.state,n).then(function(){a.closeSearchInput()})}else a.closeSearchInput()})})},a.visibleAdminReloadDialog=!1,a.lastKeyStroke=Date.now(),e.bind("keyup",function(e){a.lastKeyStroke=Date.now()}),a.notifications=[],function t(){n.post("admin/api-admin-timestamp/index",{lastKeyStroke:a.lastKeyStroke},{ignoreLoadingBar:!0}).then(function(e){a.forceReload=e.data.forceReload,a.notifications=e.data.notifications,a.forceReload&&!a.visibleAdminReloadDialog&&(a.visibleAdminReloadDialog=!0,u.confirm(i18n.js_admin_reload,i18n.layout_btn_reload,function(){a.reload(),a.visibleAdminReloadDialog=!1})),a.locked=e.data.locked,a.notify=e.data.useronline,a.idleStrokeDashoffset=e.data.idleStrokeDashoffset,a.idleTimeRelative=e.data.idleTimeRelative,i(t,2e4)})}(),a.isLocked=function(e,t){return l("lockFilter")(a.locked,e,t)},a.getLockedName=function(e,t){var n=a.isLocked(e,t);return n.firstname+" "+n.lastname},a.searchQuery=null,a.searchInputOpen=!1,a.escapeSearchInput=function(){a.searchInputOpen&&a.closeSearchInput()},a.toggleSearchInput=function(){a.searchInputOpen=!a.searchInputOpen},a.openSearchInput=function(){a.searchInputOpen=!0},a.closeSearchInput=function(){a.searchInputOpen=!1},a.searchResponse=null,a.hasUnreadNotificaton=function(e){var t=e.authIds,n=0;return angular.forEach(t,function(e){e&&a.notifications.hasOwnProperty(e)&&(n+=parseInt(a.notifications[e]))}),n},a.$watch(function(){return a.searchQuery},function(e,t){e!==t&&(2'}}}); \ No newline at end of file +function guid(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}function i18nParam(e,t){var n=i18n[e];return angular.forEach(t,function(e,t){n=n.replace("%"+t+"%",e)}),n}function typeCastValue(e){return angular.isNumber(e)?parseInt(e):e}angular.module("dnd",[]).factory("dndFactory",function(){return{data:{content:null,pos:null,element:null},getElement:function(){return this.data.element},setElement:function(e){this.data.element=e},setContent:function(e){this.data.content=e},getContent:function(){return this.data.content},setPos:function(e){this.data.pos=e},getPos:function(){return this.data.pos}}}).directive("dnd",["dndFactory","AdminClassService",function(r,e){return{restrict:"A",transclude:!1,replace:!1,template:!1,templateURL:!1,scope:{dndModel:"=",dndCss:"=",dndOndrop:"&",dndIsvalid:"&"},link:function(i,a,e){var o=!0,l=e.hasOwnProperty("dndDisableDragMiddle");e.hasOwnProperty("dndDragDisabled")||a.attr("draggable","true"),i.addClass=function(e){a.addClass(e)},i.removeClass=function(e,t){a.removeClass(e)},a.on("dragstart",function(e){if((e=e.originalEvent||e).stopPropagation(),"false"==a.attr("draggable"))return!0;o=!0,r.setContent(i.dndModel),r.setElement(a[0]),i.addClass(i.dndCss.onDrag);try{e.dataTransfer.setData("text","1")}catch(e){try{e.dataTransfer.setData("application/json","1")}catch(e){e.dataTransfer.setData("Text","1")}}}),a.on("dragend",function(e){e=e.originalEvent||e,i.removeClass(i.dndCss.onDrag),e.stopPropagation()}),a.on("dragover",function(e){e=e.originalEvent||e;try{e.dataTransfer.dropEffect="move"}catch(e){}if(e.preventDefault(),e.stopPropagation(),!i.dndIsvalid({hover:i.dndModel,dragged:r.getContent()}))return o=!1;var t=a[0].getBoundingClientRect(),n=100/t.height*(e.clientY-t.top);return l?n<=50?(i.addClass(i.dndCss.onHoverTop),i.removeClass(i.dndCss.onHoverMiddle),i.removeClass(i.dndCss.onHoverBottom),r.setPos("top")):(i.removeClass(i.dndCss.onHoverTop),i.removeClass(i.dndCss.onHoverMiddle),i.addClass(i.dndCss.onHoverBottom),r.setPos("bottom")):n<=25?(i.addClass(i.dndCss.onHoverTop),i.removeClass(i.dndCss.onHoverMiddle),i.removeClass(i.dndCss.onHoverBottom),r.setPos("top")):65<=n?(i.removeClass(i.dndCss.onHoverTop),i.removeClass(i.dndCss.onHoverMiddle),i.addClass(i.dndCss.onHoverBottom),r.setPos("bottom")):(i.removeClass(i.dndCss.onHoverTop),i.addClass(i.dndCss.onHoverMiddle),i.removeClass(i.dndCss.onHoverBottom),r.setPos("middle")),i.addClass(i.dndCss.onHover),!1}),a.on("dragenter",function(e){e=e.originalEvent||e,i.addClass(i.dndCss.onHover),e.preventDefault()}),a.on("dragleave",function(e){i.removeClass(i.dndCss.onHover,!0),i.removeClass(i.dndCss.onHoverTop,!0),i.removeClass(i.dndCss.onHoverMiddle,!0),i.removeClass(i.dndCss.onHoverBottom,!0)}),e.hasOwnProperty("dndDropDisabled")||a.on("drop",function(e){return(e=e.originalEvent||e).preventDefault(),e.stopPropagation(),i.removeClass(i.dndCss.onHover,!0),i.removeClass(i.dndCss.onHoverTop,!0),i.removeClass(i.dndCss.onHoverMiddle,!0),i.removeClass(i.dndCss.onHoverBottom,!0),!!o&&(i.$apply(function(){i.dndOndrop({dragged:r.getContent(),dropped:i.dndModel,position:r.getPos(),element:r.getElement()})}),!0)})}}}]);var zaa=angular.module("zaa",["ui.router","dnd","angular-loading-bar","ngFileUpload","ngWig","flow","angular.filter","720kb.datepicker","directive.ngColorwheel","uiCropper"]);zaa.config(["$httpProvider","$stateProvider","$controllerProvider","$urlMatcherFactoryProvider",function(e,t,n,i){e.interceptors.push("authInterceptor"),zaa.bootstrap=n,i.strictMode(!1),t.state("default",{url:"/default/:moduleId",templateUrl:function(e){return"admin/template/default"}}).state("default.route",{url:"/:moduleRouteId/:controllerId/:actionId",templateUrl:function(e){return e.moduleRouteId+"/"+e.controllerId+"/"+e.actionId},parent:"default",resolve:{adminServiceResolver:adminServiceResolver}}).state("custom",{url:"/template/:templateId",templateUrl:function(e){return e.templateId},resolve:{adminServiceResolver:adminServiceResolver,resolverProvider:["resolver",function(e){return e.then}]}}).state("home",{url:"",templateUrl:"admin/default/dashboard",controller:["$scope",function(e){e.$parent.currentItem={icon:"home",alias:i18n.menu_dashboard}}]}).state("default.route.detail",{url:"/:id",parent:"default.route",template:"",controller:["$scope","$stateParams",function(e,t){e.crud=e.$parent,e.init=function(){e.crud.config.inline||e.crud.data.updateId!=t.id&&e.crud.toggleUpdate(t.id)},e.init()}]})}]),zaa.provider("resolver",[function(){var a=[];this.addCallback=function(e){a.push(e)},this.$get=["$injector","$q","$state",function(i,e,t){return e(function(e,t){for(var n in a)i.invoke(a[n])})}]}]),zaa.factory("LuyaLoading",["$timeout",function(t){var n=!1,i=null,a=null;return{start:function(e){i=null==e?i18n.js_zaa_server_proccess:e,t.cancel(a),a=t(function(){n=!0},2e3)},stop:function(){t.cancel(a),n=!1},getStateMessage:function(){return i},getState:function(){return n}}}]),zaa.factory("AdminClassService",function(){var n=[];return n.vars={},n.getClassSpace=function(e){if(n.vars.hasOwnProperty(e))return n.vars[e]},n.hasClassSpace=function(e){return!!n.vars.hasOwnProperty(e)},n.setClassSpace=function(e,t){n.vars[e]=t},n.clearSpace=function(e){n.vars.hasOwnProperty(e)&&(n.vars[e]=null)},n.removeSpace=function(e){n.hasClassSpace(e)&&delete n.vars[e]},n.stack=0,n.modalStackPush=function(){n.stack+=1},n.modalStackRemove=function(){n.stack<=1?n.stack=0:n.stack-=1},n.modalStackRemoveAll=function(){n.stack=0},n.modalStackIsEmpty=function(){return 0==n.stack},n}),zaa.factory("CacheReloadService",["$http","$window",function(e,t){var n=[];return n.reload=function(){e.get("admin/api-admin-common/cache").then(function(e){t.location.reload()})},n}]),zaa.factory("authInterceptor",["$rootScope","$q","AdminToastService","AdminDebugBar",function(i,a,t,o){return{request:function(e){if(e.hasOwnProperty("ignoreLoadingBar")||(e.debugId=o.pushRequest(e)),e.hasOwnProperty("authToken"))var t=e.authToken;else t=i.luyacfg.authToken;e.headers=e.headers||{},e.headers.Authorization="Bearer "+t;var n=document.head.querySelector("[name=csrf-token]");return null!==n&&(e.headers["X-CSRF-Token"]=n.content),e||a.when(e)},response:function(e){return e.hasOwnProperty("ignoreLoadingBar")||o.pushResponse(e),e||a.when(e)},responseError:function(e){if(401==e.status||403==e.status||405==e.status)e.config.hasOwnProperty("authToken")||(window.location="admin/default/logout?autologout=1");else if(422!=e.status){e.data.hasOwnProperty("message")?t.error(e.data.message,1e4):t.error("Response Error: "+e.status+" "+e.statusText,1e4)}return a.reject(e)}}}]),adminServiceResolver=["ServiceFoldersData","ServiceFiltersData","ServiceLanguagesData","ServicePropertiesData","AdminLangService","ServiceFoldersDirecotryId",function(e,t,n,i,a,o){t.load(),e.load(),n.load(),i.load(),a.load(),o.load()}],zaa.factory("ServiceAdminTags",["$http","$q","$rootScope",function(i,e,a){var o={data:null,load:function(n){return e(function(t,e){null!==o.data&&!0!==n?t(o.data):i.get("admin/api-admin-common/tags").then(function(e){o.data=e.data,a.$broadcast("service:AdminTags",o.data),t(o.data)})})}};return o}]),zaa.factory("ServiceFoldersData",["$http","$q","$rootScope",function(i,e,a){var o=[];return o.data=null,o.load=function(n){return e(function(t,e){null!==o.data&&!0!==n?t(o.data):i.get("admin/api-admin-storage/data-folders").then(function(e){o.data=e.data,a.$broadcast("service:FoldersData",o.data),t(o.data)})})},o}]),zaa.factory("ServiceFoldersDirecotryId",["$http","$q","$rootScope",function(i,e,a){var o=[];return o.folderId=!1,o.load=function(n){return e(function(t,e){!1!==o.folderId&&!0!==n?t(o.folderId):i.get("admin/api-admin-common/get-filemanager-folder-state").then(function(e){o.folderId=e.data,a.$broadcast("service:FoldersDirectoryId",o.folderId),t(o.folderId)})})},o}]),zaa.factory("ServiceImagesData",["$http","$q","$rootScope","$log",function(a,e,t,n){var o=[];return o.data={},o.getImage=function(t,i){return e(function(n,e){return 0==t?e(t):o.data.hasOwnProperty(t)&&!0!==i?n(o.data[t]):void a.get("admin/api-admin-storage/image-info?id="+t).then(function(e){var t=e.data;return o.data[t.id]=t,n(t)})})},o.loadImages=function(n){return e(function(t,e){if(0==n.length)return t();a.post("admin/api-admin-storage/images-info?expand=source,tinyCropImage",{ids:n}).then(function(e){return angular.forEach(e.data,function(e){o.data[e.id]=e}),t()})})},o}]),zaa.factory("ServiceFilesData",["$http","$q","$rootScope","$log",function(a,e,t,n){var o=[];return o.data={},o._promises={},o.getFile=function(e,t){if(o._promises.hasOwnProperty(e))return o._promises[e];var n=o.newPromise(e,t);return o._promises[e]=n},o.newPromise=function(i,t){return e(function(n,e){return 0==i?e(i):o.data.hasOwnProperty(i)&&!0!==t?n(o.data[i]):void a.get("admin/api-admin-storage/file-info?id="+i).then(function(e){var t=e.data;return o.data[t.id]=t,delete o._promises[i],n(t)})})},o}]),zaa.factory("ServiceFiltersData",["$http","$q","$rootScope",function(i,e,a){var o=[];return o.data=null,o.load=function(n){return e(function(t,e){null!==o.data&&!0!==n?t(o.data):i.get("admin/api-admin-storage/data-filters").then(function(e){o.data=e.data,a.$broadcast("service:FiltersData",o.data),t(o.data)})})},o}]),zaa.factory("ServiceLanguagesData",["$http","$q","$rootScope",function(i,e,a){var o=[];return o.data=[],o.load=function(n){return e(function(t,e){0t.name.toLowerCase()?1:-1}),i}}),zaa.filter("findthumbnail",function(){return function(e,n,i){var a=!1;return angular.forEach(e,function(e,t){a||e.fileId==n&&e.filterId==i&&(a=e)}),a}}),zaa.filter("findidfilter",function(){return function(e,n){var i=!1;return angular.forEach(e,function(e,t){e.id==n&&(i=e)}),i}}),zaa.filter("filemanagerfilesfilter",function(){return function(e,t,n){var i=[];return angular.forEach(e,function(e){n?e.folderId==t&&1==e.isImage&&i.push(e):e.folderId==t&&i.push(e)}),i}}),zaa.filter("trustAsUnsafe",["$sce",function(n){return function(e,t){return n.trustAsHtml(e)}}]),zaa.filter("srcbox",function(){return function(e,t){if(!e)return e;if(!t)return e;var a=(""+t).toLowerCase(),o={};return angular.forEach(e,function(n,i){angular.forEach(n,function(e,t){-1!==(""+e).toLowerCase().indexOf(a)&&(o[i]=n)})}),o}}),zaa.filter("trustAsResourceUrl",["$sce",function(n){return function(e,t){return t?n.trustAsResourceUrl(e):null}}]),zaa.filter("truncateMiddle",function(){return function(e,t,n){if(t=t||30,n=n||"...",e.length<=t)return e;var i=(t-n.length)/2;return e.substring(0,i)+n+e.substring(e.length-i,e.length)}}),zaa.directive("echarts",[function(){return{scope:{id:"@",theme:"@",data:"="},restrict:"E",template:'
',replace:!0,controller:["$scope",function(e){e.theme&&(e.theme="macarons")}],link:function(e){var t=echarts.init(document.getElementById(e.id),e.theme);e.$watch("data",function(e){e&&null!=e&&t.setOption(angular.fromJson(e))}),angular.element(window).bind("resize",function(){t.resize()})}}}]),zaa.directive("compileHtml",["$compile","$parse",function(a,o){return{restrict:"A",link:function(e,t,n){var i=o(n.ngBindHtml);e.$watch(function(){return(i(e)||"").toString()},function(){a(t,null,-9999)(e)})}}}]),zaa.directive("selectOnClick",function(){return function(e,t,n){t.bind("click",function(){this.select()})}}),zaa.directive("zaaEsc",["$document",function(i){return function(t,e,n){i.on("keyup",function(e){27==e.keyCode&&t.$apply(function(){t.$eval(n.zaaEsc)})})}}]),zaa.directive("linkObjectToString",function(){return{restrict:"E",relace:!0,scope:{link:"="},template:function(){return'{{link.value}}{{link.value}}{{link.value}}'}}}),zaa.directive("tooltip",["$document","$http",function(r,s){return{restrict:"A",scope:{tooltipText:"@",tooltipExpression:"=",tooltipPosition:"@",tooltipOffsetTop:"@",tooltipOffsetLeft:"@",tooltipImageUrl:"@",tooltipPreviewUrl:"@",tooltipDisabled:"="},link:function(i,a,e){function o(){var e={};e="function"==typeof l[i.tooltipPosition]?l[i.tooltipPosition]():l.right();var t=parseInt(i.tooltipOffsetTop);t&&(e.top=e.top+t);var n=parseInt(i.tooltipOffsetLeft);n&&(e.left=e.left+n),i.pop.css(e)}var l={top:function(){var e=a[0].getBoundingClientRect();return{top:e.top-i.pop.outerHeight(),left:e.left+e.width/2-i.pop.outerWidth()/2}},bottom:function(){var e=a[0].getBoundingClientRect();return{top:e.top+e.height,left:e.left+e.width/2-i.pop.outerWidth()/2}},right:function(){var e=a[0].getBoundingClientRect();return{top:e.top+e.height/2-i.pop.outerHeight()/2,left:e.left+e.width}},left:function(){var e=a[0].getBoundingClientRect();return{top:e.top+e.height/2-i.pop.outerHeight()/2,left:e.left-i.pop.outerWidth()}}};a.on("mouseenter",function(){if(!i.pop&&(void 0===i.tooltipDisabled||!1===i.tooltipDisabled)){i.tooltipExpression&&(i.tooltipText=i.tooltipExpression);var e='",t=$(e);if(i.tooltipImageUrl){var n=new Image;n.onload=function(){o()},n.src=i.tooltipImageUrl,t.find(".tooltip-inner").append(n)}i.tooltipPreviewUrl&&s.get(i.tooltipPreviewUrl).then(function(e){t.find(".tooltip-inner").append('
'+e.data+"
")}),i.pop=t,r.find("body").append(i.pop),i.pop.hide()}!i.pop||void 0!==i.tooltipDisabled&&!1!==i.tooltipDisabled||(o(),a.parents().on("scroll",o),i.pop.show())}),a.on("mouseleave",function(){a.parents().off("scroll",o),i.pop&&i.pop.hide()}),i.$on("$destroy",function(){i.pop&&i.pop.remove()})}}}]),zaa.directive("convertToNumber",function(){return{require:"ngModel",link:function(e,t,n,i){i.$parsers.push(function(e){return null!=e?parseInt(e,10):null}),i.$formatters.push(function(e){return null!=e?""+e:null})}}}),zaa.directive("autoGrow",function(){return function(e,t,n){function i(){null==a&&(a=angular.element("
").css({position:"absolute",top:-1e4,left:-1e4,resize:"none"}),angular.element(document.body).append(a)),a.css({fontSize:t.css("font-size"),fontFamily:t.css("font-family"),lineHeight:t.css("line-height"),width:t.width(),paddingTop:t.css("padding-top"),paddingBottom:t.css("padding-bottom")});var e=t.val().replace(//g,">").replace(/&/g,"&").replace(/\n$/,"
 ").replace(/\n/g,"
").replace(/\s{2,}/g,function(e){return function(e,t){for(var n=0,i="";n
keyboard_arrow_down{{icon}}{{title}}
'}}}]),zaa.directive("crudLoader",["$http","$sce",function(t,i){return{restrict:"E",replace:!0,transclude:!1,scope:{api:"@",alias:"@",modelSelection:"@",modelSetter:"="},controller:["$scope",function(n){n.input={showWindow:!0},n.content=null,n.toggleWindow=function(){if(n.input.showWindow){if(-1'}}}]),zaa.directive("crudRelationLoader",["$http","$sce",function(n,i){return{restrict:"E",replace:!0,transclude:!1,scope:{api:"@api",arrayIndex:"@arrayIndex",modelClass:"@modelClass",id:"@id"},controller:["$scope",function(t){if(t.content=null,-1'}}}]),zaa.directive("zaaInjector",["$compile",function(i){return{restrict:"E",replace:!0,transclude:!1,scope:{dir:"=",model:"=",options:"=",label:"@label",grid:"@grid",fieldid:"@fieldid",placeholder:"@placeholder",initvalue:"@initvalue",autocomplete:"@autocomplete"},link:function(e,t){var n=i(angular.element("<"+e.dir+' options="options" initvalue="{{initvalue}}" fieldid="{{fieldid}}" placeholder="{{placeholder}}" autocomplete="{{autocomplete}}" model="model" label="{{label}}" i18n="{{grid}}" />'))(e);t.replaceWith(n)}}}]),zaa.directive("zaaSortRelationArray",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$filter",function(a,e){a.searchString,a.sourceData=[],a.dropdownOpen=!1,a.$watch(function(){return a.model},function(e,t){null==e&&(a.model=[])}),a.$watch(function(){return a.options},function(e,t){null!=e&&(a.sourceData=e.sourceData)}),a.getSourceOptions=function(){return a.sourceData},a.getModelItems=function(){return a.model},a.addToModel=function(n){var i=!1;angular.forEach(a.model,function(e,t){e.value==n.value&&(i=!0)}),i||a.model.push({value:n.value,label:n.label})},a.removeFromModel=function(e){a.model.splice(e,1)},a.moveUp=function(e){e=parseInt(e);var t=a.model[e];a.model[e]=a.model[e-1],a.model[e-1]=t},a.moveDown=function(e){e=parseInt(e);var t=a.model[e];a.model[e]=a.model[e+1],a.model[e+1]=t},a.elementInModel=function(n){var i=!1;return angular.forEach(a.model,function(e,t){e.value==n.value&&(i=!0)}),!i}}],template:function(){return'
play_arrowplay_arrow
{{item.label}}
delete
  • add_circle{{ option.label }}
arrow_drop_uparrow_drop_down
'}}}),zaa.directive("zaaTagArray",function(){return{restrict:"E",scope:{model:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$http",function(n,e){n.tags=[],e.get("admin/api-admin-common/tags").then(function(e){angular.forEach(e.data,function(e){e.id=parseInt(e.id),n.tags.push(e)})}),null==n.model?n.model=[]:angular.forEach(n.model,function(e,t){n.model[t]=parseInt(e)}),n.isInSelection=function(e){return e=parseInt(e),-1!=n.model.indexOf(e)},n.toggleSelection=function(e){var t=n.model.indexOf(e);-1
{{tag.name}}
'}}}),zaa.directive("zaaLink",["$filter",function(t){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope",function(n){n.unset=function(){n.model=!1,n.data.model=null},n.data={modalState:1,model:null},n.$watch("model",function(e,t){e&&(n.data.model=e)},!0),n.$watch("data.model",function(e,t){e&&(n.model=e)},!0),n.isEmpty=function(e){return!e||t("isEmpty")(e)}}],template:function(){return'
{{label}}
"}}}]),zaa.directive("zaaLinkOptions",function(){return{restrict:"EA",scope:{data:"="},templateUrl:"linkoptions.html",controller:["$scope",function(n){n.$watch(function(){return n.data},function(e,t){angular.isArray(e)&&(n.data={})})}]}}),zaa.directive("zaaSlug",function(){return{restrict:"E",scope:{model:"=",options:"=",listener:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$filter",function(n,i){n.$watch("listener",function(e,t){void 0!==e&&(n.model=i("slugify")(e))}),n.$watch("model",function(e,t){e!=t&&(n.model=i("slugify")(e))})}],template:function(){return'
'}}}),zaa.directive("zaaColor",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope",function(n){function i(){if(void 0===n.model||!n.model)return"#000";var e=n.model;if("string"==typeof n.model&&(e=e.substr(1)),3===e.length){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,n,i){return t+t+n+n+i+i})}return 6!==e.length?"#000":128<=(299*parseInt(e.substr(0,2),16)+587*parseInt(e.substr(2,2),16)+114*parseInt(e.substr(4,2),16))/1e3?"#000":"#fff"}n.textColor=i(),n.$watch(function(){return n.model},function(e,t){n.textColor=i()})}],template:function(){return'
'}}}),zaa.directive("zaaWysiwyg",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},template:function(){return'
'}}}),zaa.directive("zaaNumber",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",placeholder:"@placeholder",initvalue:"@initvalue"},link:function(n){n.$watch(function(){return n.model},function(e,t){null==e&&(n.model=parseInt(n.initvalue)),angular.isNumber(n.model)?n.isValid=!0:n.isValid=!1})},template:function(){return'
'}}}),zaa.directive("zaaDecimal",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",placeholder:"@placeholder"},controller:["$scope",function(e){null===e.options?e.steps=.01:e.steps=e.options.steps}],link:function(n){n.$watch(function(){return n.model},function(e,t){angular.isNumber(n.model)?n.isValid=!0:n.isValid=!1})},template:function(){return'
'}}}),zaa.directive("zaaText",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",placeholder:"@placeholder",autocomplete:"@autocomplete"},template:function(){return'
'}}}),zaa.directive("zaaReadonly",function(){return{restrict:"E",scope:{model:"=",label:"@label",i18n:"@i18n"},template:function(){return'
{{model}}
'}}}),zaa.directive("zaaAsyncValue",function(){return{restrict:"E",scope:{model:"=",api:"@",fields:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$timeout","$http",function(e,t,n){e.resetValue=function(){e.model=0,e.value=null}}],template:function(){return'
'}}}),zaa.directive("asyncValue",function(){return{restrict:"E",scope:{model:"=",api:"@",fields:"="},controller:["$scope","$timeout","$http",function(n,e,i){e(function(){n.$watch("model",function(e,t){e&&(n.value="",i.get(n.api+"/"+e+"?fields="+n.fields.join()).then(function(e){n.value,angular.forEach(e.data,function(e){e&&(n.value=n.value+e+" ")})}))})})}],template:function(){return''}}}),zaa.directive("zaaTextarea",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",placeholder:"@placeholder"},template:function(){return'
'}}}),zaa.directive("zaaPassword",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",autocomplete:"@autocomplete"},template:function(){return'
'}}}),zaa.directive("zaaRadio",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid",initvalue:"@initvalue"},controller:["$scope","$timeout",function(t,e){t.setModelValue=function(e){t.model=e},t.init=function(){null!=t.model&&null!=t.model||(t.model=typeCastValue(t.initvalue))},e(function(){t.init()})}],template:function(){return'
'}}}),zaa.directive("zaaSelect",function(){return{restrict:"E",scope:{model:"=",options:"=",optionsvalue:"@optionsvalue",optionslabel:"@optionslabel",label:"@label",i18n:"@i18n",id:"@fieldid",initvalue:"@initvalue"},controller:["$scope","$timeout","$rootScope",function(e,t,n){null==e.optionsvalue&&(e.optionsvalue="value"),null==e.optionslabel&&(e.optionslabel="label")}],template:function(){return'
'}}}),zaa.directive("luyaSelect",function(){return{restrict:"E",scope:{model:"=ngModel",options:"=",optionsvalue:"@optionsvalue",optionslabel:"@optionslabel",id:"@fieldid",initvalue:"@initvalue",ngChange:"&"},controller:["$scope","$timeout","$rootScope",function(i,t,e){i.isOpen=0,null!=i.optionsvalue&&""!=i.optionsvalue||(i.optionsvalue="value"),null!=i.optionslabel&&""!=i.optionslabel||(i.optionslabel="label"),angular.isNumber(i.model)&&(i.model=typeCastValue(i.model)),i.$on("closeAllSelects",function(){i.isOpen&&i.closeSelect()}),t(function(){i.$watch(function(){return i.model},function(e,t){null!=e&&null!=e&&""!=e||(angular.isNumber(i.initvalue)&&(i.initvalue=typeCastValue(i.initvalue)),i.valueExistsInOptions(e)||(i.model=i.initvalue))})}),i.valueExistsInOptions=function(t){var n=!1;return angular.forEach(i.options,function(e){t==e[i.optionsvalue]&&(n=!0)}),n},i.toggleIsOpen=function(){i.isOpen||e.$broadcast("closeAllSelects"),i.isOpen=!i.isOpen},i.closeSelect=function(){i.isOpen=0},i.setModelValue=function(e){i.model=angular.isObject(e)?e[i.optionsvalue]:e,t(i.ngChange,0),i.closeSelect()},i.getSelectedLabel=function(){var t=i18n.ngrest_select_no_selection;return angular.forEach(i.options,function(e){i.model==e[i.optionsvalue]&&(t=e[i.optionslabel])}),t},i.hasSelectedValue=function(){var e=i.model;return!(!i.valueExistsInOptions(e)||e==i.initvalue)}}],template:function(){return'
{{getSelectedLabel()}}clearkeyboard_arrow_down
{{opt[optionslabel]}}
'}}}),zaa.directive("zaaCheckbox",function(){return{restrict:"E",scope:{model:"=",options:"=",i18n:"@i18n",id:"@fieldid",label:"@label",initvalue:"@initvalue"},controller:["$scope","$timeout",function(e,t){null===e.options||void 0===e.options?(e.valueTrue=1,e.valueFalse=0):(e.valueTrue=e.options["true-value"],e.valueFalse=e.options["false-value"]),e.init=function(){null!=e.model&&null!=e.model||(e.model=typeCastValue(e.initvalue))},t(function(){e.init()}),e.clicker=function(){e.model==e.valueTrue?e.model=e.valueFalse:e.model=e.valueTrue}}],template:function(){return'
'}}}),zaa.directive("zaaCheckboxArray",function(){return{restrict:"E",scope:{model:"=",options:"=",i18n:"@i18n",id:"@fieldid",label:"@label",preselect:"@preselect"},controller:["$scope","$filter",function(n,i){null==n.model&&(n.model=[]),n.preselectOptionValuesToModel=function(e){angular.forEach(e,function(e){n.model.push({value:e.value})})},n.searchString="",n.$watch("options",function(e,t){null!=e&&e.hasOwnProperty("items")&&(n.optionitems=i("orderBy")(e.items,"label"),n.preselect&&n.preselectOptionValuesToModel(e.items))}),n.filtering=function(){n.optionitems=i("filter")(n.options.items,n.searchString)},n.toggleSelection=function(e){for(var t in null==n.model&&(n.model=[]),n.model)if(n.model[t].value==e.value)return void n.model.splice(t,1);n.model.push({value:e.value})},n.isChecked=function(e){for(var t in n.model)if(n.model[t].value==e.value)return!0;return!1}}],link:function(e){e.random=Math.random().toString(36).substring(7)},template:function(){return'
search
{{optionitems.length}} '+i18n.js_dir_till+' {{options.items.length}}
'}}}),zaa.directive("zaaDatetime",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",id:"@fieldid",i18n:"@i18n",resetable:"@resetable"},controller:["$scope","$filter",function(i,a){i.isNumeric=function(e){return!isNaN(e)},i.$watch(function(){return i.model},function(e,t){if(null!=e&&null!=e){var n=new Date(1e3*e);i.pickerPreselect=n,i.date=a("date")(n,"dd.MM.yyyy"),i.hour=a("date")(n,"HH"),i.min=a("date")(n,"mm")}else i.date=null,i.model=null}),i.refactor=function(e){if(i.isNumeric(i.hour)&&""!=i.hour||(i.hour="0"),i.isNumeric(i.min)&&""!=i.min||(i.min="0"),"Invalid Date"==e||""==e||"NaN"==e)i.date=null,i.model=null;else{var t=e.split(".");if(3==t.length&&4==t[2].length){23
date_rangeclose
access_time
:
'}}}),zaa.directive("zaaDate",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",id:"@fieldid",i18n:"@i18n",resetable:"@resetable"},controller:["$scope","$filter",function(i,a){i.$watch(function(){return i.model},function(e,t){if(null!=e&&null!=e){var n=new Date(1e3*e);i.pickerPreselect=n,i.date=a("date")(n,"dd.MM.yyyy")}else i.date=null,i.model=null}),i.refactor=function(e){if("Invalid Date"==e||""==e)i.date=null,i.model=null;else{var t=e.split(".");if(3==t.length&&4==t[2].length){var n=t[1]+"/"+t[0]+"/"+t[2];i.model=Date.parse(n)/1e3,i.datePickerToggler=!1}}},i.$watch(function(){return i.date},function(e,t){e!=t&&null!=e&&null!=e&&i.refactor(e)}),i.autoRefactor=function(){i.refactor(i.date)},i.datePickerToggler=!1,i.toggleDatePicker=function(){i.datePickerToggler=!i.datePickerToggler},i.openDatePicker=function(){i.datePickerToggler=!0},i.closeDatePicker=function(){i.datePickerToggler=!1},i.reset=function(){i.model=null},i.getIsResetable=function(){return!i.resetable||parseInt(i.resetable)}}],template:function(){return'
date_rangeclose
'}}}),zaa.directive("zaaTable",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope",function(i){null==i.model&&(i.model=[{0:""}]),i.addColumn=function(){var e=0;for(var t in i.model[0])e++;for(var n in i.model)i.model[n][e]=""},i.addRow=function(){var e=i.model[0],t={};for(var n in e)t[n]="";i.model.push(t)},i.removeColumn=function(e){for(var t in i.model){var n=i.model[t];n instanceof Array?n.splice(e,1):delete n[e]}},i.moveLeft=function(e){for(var t in e=parseInt(e),i.model){var n=i.model[t][e];i.model[t][e]=i.model[t][e-1],i.model[t][e-1]=n}},i.moveRight=function(e){for(var t in e=parseInt(e),i.model){var n=i.model[t][e];i.model[t][e]=i.model[t][e+1],i.model[t][e+1]=n}},i.moveUp=function(e){e=parseInt(e);var t=i.model[e];i.model[e]=i.model[e-1],i.model[e-1]=t},i.moveDown=function(e){e=parseInt(e);var t=i.model[e];i.model[e]=i.model[e+1],i.model[e+1]=t},i.removeRow=function(e){i.model.splice(e,1)},i.showRightButton=function(e){return parseInt(e)
'}}}),zaa.directive("zaaFileUpload",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},template:function(){return'
'}}}),zaa.directive("zaaImageUpload",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},template:function(){return'
'}}}),zaa.directive("zaaImageArrayUpload",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},link:function(e,n,t){e.$watch("model",function(e,t){1<=e.length?$(n).removeClass("is-empty").addClass("is-not-empty"):$(n).removeClass("is-not-empty").addClass("is-empty")},!0)},controller:["$scope",function(n){null==n.model&&(n.model=[]),n.add=function(){null!=n.model&&""!=n.model&&null!=n.model||(n.model=[]),n.model.push({imageId:0,caption:""})},n.remove=function(e){n.model.splice(e,1)},n.moveUp=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e-1],n.model[e-1]=t},n.moveDown=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e+1],n.model[e+1]=t},n.showDownButton=function(e){return parseInt(e)

'+i18n.js_dir_no_selection+'

'}}}),zaa.directive("zaaFileArrayUpload",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$element","$timeout",function(n,e,t){null==n.model&&(n.model=[]),n.add=function(){null!=n.model&&""!=n.model&&null!=n.model||(n.model=[]),n.model.push({fileId:0,caption:""})},n.remove=function(e){n.model.splice(e,1)},n.moveUp=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e-1],n.model[e-1]=t},n.moveDown=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e+1],n.model[e+1]=t},n.showDownButton=function(e){return parseInt(e)

'+i18n.js_dir_no_selection+'

'}}}),zaa.directive("zaaMultipleInputs",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$timeout",function(n,e){n.init=function(){null==n.model||null==n.model?n.model=[]:angular.forEach(n.model,function(e,t){0==Object.keys(e).length&&(n.model[t]={})})},n.add=function(){null!=n.model&&""!=n.model&&null!=n.model||(n.model=[]),n.model.push({})},n.remove=function(e){n.model.splice(e,1)},n.moveUp=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e-1],n.model[e-1]=t},n.moveDown=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e+1],n.model[e+1]=t},n.showDownButton=function(e){return parseInt(e)

'+i18n.js_dir_no_selection+'

'}}}),zaa.directive("zaaJsonObject",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope",function(t){t.$watch("model",function(e){angular.isArray(e)&&(t.model={}),null==e&&(t.model={})}),t.add=function(e){t.model[e]=""},t.remove=function(e){delete t.model[e]}}],template:function(){return'
{{key}}
'}}}),zaa.directive("zaaListArray",function(){return{restrict:"E",scope:{model:"=",options:"=",label:"@label",i18n:"@i18n",id:"@fieldid"},controller:["$scope","$element","$timeout",function(n,t,e){n.init=function(){null!=n.model&&null!=n.model||(n.model=[])},n.add=function(){null!=n.model&&""!=n.model&&null!=n.model||(n.model=[]),n.model.push({value:""}),n.setFocus()},n.remove=function(e){n.model.splice(e,1)},n.refactor=function(e,t){e!==n.model.length-1&&""==t.value&&n.remove(e)},n.setFocus=function(){e(function(){var e=t.children(".list").children(".list__item:last-of-type").children(".list__left").children("input");1==e.length&&e[0].focus()},50)},n.moveUp=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e-1],n.model[e-1]=t},n.moveDown=function(e){e=parseInt(e);var t=n.model[e];n.model[e]=n.model[e+1],n.model[e+1]=t},n.showDownButton=function(e){return parseInt(e)

'+i18n.js_dir_no_selection+'

'}}}),zaa.directive("storageFileDisplay",function(){return{restrict:"E",scope:{fileId:"@fileId"},controller:["$scope","$filter","ServiceFilesData",function(n,e,i){n.fileId=0,n.fileinfo=null,n.$watch("fileId",function(e,t){0!=e&&null!=e&&null!=e&&i.getFile(e).then(function(e){n.fileinfo=e},function(){n.fileinfo=null})})}],template:function(){return'{{ fileinfo.name_original }}'}}}),zaa.directive("storageImageCrudList",function(){return{restrict:"E",scope:{imageId:"@imageId"},controller:["$scope","ServiceImagesData",function(n,t){n.imageSrc=null,n.$watch("imageId",function(e,t){e!=t&&(n.imageSrc=null)}),n.$on("requestImageSourceReady",function(){0!=n.imageId&&t.getImage(n.imageId).then(function(e){e.tinyCropImage?n.imageSrc=e.tinyCropImage.source:t.getImage(n.imageId,!0).then(function(e){e.tinyCropImage&&(n.imageSrc=e.tinyCropImage.source)})})})}],template:function(){return'
{{imageSrc}}
'}}}),zaa.directive("storageImageThumbnailDisplay",function(){return{restrict:"E",scope:{imageId:"@imageId"},controller:["$scope","$filter","ServiceImagesData","ServiceFilesData",function(n,e,i,t){n.$watch("imageId",function(e,t){e!=t&&(n.imageSrc=null)}),n.$watch(function(){return n.imageId},function(e,t){null==e&&null==e||i.getImage(e).then(function(e){n.imageSrc=e.tinyCropImage.source},function(){n.imageSrc=null})}),n.imageSrc=null}],template:function(){return'
{{imageSrc}}
'}}}),zaa.directive("storageFileUpload",function(){return{restrict:"E",scope:{ngModel:"="},controller:["$scope","$filter","ServiceFilesData",function(t,e,n){t.modal={state:1},t.modalContainer=!1,t.fileinfo=null,t.select=function(e){t.toggleModal(),t.ngModel=e},t.reset=function(){t.ngModel=0,t.fileinfo=null},t.toggleModal=function(){t.modalContainer=!t.modalContainer,t.modal.state=!t.modal.state},t.$watch(function(){return t.ngModel},function(e){if(null==e||null==e||!angular.isNumber(e))return null;n.getFile(e).then(function(e){t.fileinfo=e},function(){t.fileinfo=null})})}],templateUrl:"storageFileUpload"}}),zaa.directive("storageImageUpload",function(){return{restrict:"E",scope:{ngModel:"=",options:"="},controller:["$scope","$http","$filter","ServiceFiltersData","ServiceImagesData","AdminToastService","ServiceFilesData",function(n,i,a,e,o,l,t){n.filtersData=e.data,n.$on("service:FiltersData",function(e,t){n.filtersData=t}),n.noFilters=function(){if(n.options)return n.options.no_filter},n.thumbnailfilter=null,n.imageLoading=!1,n.fileId=0,n.filterId=0,n.imageinfo=null,n.imageNotFoundError=!1,n.thumb=!1,n.filterApply=function(){n.imageLoading=!0,t.getFile(n.fileId).then(function(e){var t=a("filter")(e.images,{filter_id:n.filterId});0==t.length?i.post("admin/api-admin-storage/image-filter",{fileId:n.fileId,filterId:n.filterId}).then(function(e){n.ngModel=e.data.id,l.success(i18n.js_dir_image_upload_ok),n.imageLoading=!1},function(e){l.error(i18n.js_dir_image_filter_error),n.imageLoading=!1}):(n.ngModel=t[0].id,n.imageLoading=!1)},function(){n.imageinfo=null,n.thumb=!1,n.ngModel=0})},n.changeFilter=function(){n.filterApply()},n.$watch(function(){return n.fileId},function(e,t){null!=e&&null!=e&&n.filterApply()}),n.$watch(function(){return n.ngModel},function(e,t){null!=e&&null!=e&&0!=e&&o.getImage(e).then(function(e){n.applyImageDetails(e),n.fileId=e.file_id,n.filterId=e.filter_id},function(){n.fileId=0,n.filterId=0,n.imageinfo=null,n.thumb=!1})}),n.applyImageDetails=function(e){n.imageinfo=e,n.thumb=e}}],templateUrl:"storageImageUpload"}}),zaa.directive("storageFileManager",function(){return{restrict:"E",transclude:!1,scope:{allowSelection:"@selection",onlyImages:"@onlyImages"},controller:["$scope","$http","$filter","$timeout","$rootScope","$q","HtmlStorage","cfpLoadingBar","Upload","ServiceFoldersData","ServiceFilesData","LuyaLoading","AdminToastService","ServiceFoldersDirecotryId","ServiceAdminTags",function(a,o,t,n,e,l,r,i,s,c,d,u,p,f,m){a.foldersData=c.data,a.$on("service:FoldersData",function(e,t){a.foldersData=t}),a.foldersDataReload=function(){return c.load(!0)},a.tags=[],m.load().then(function(e){a.tags=e}),a.filesData=[],a.totalFiles=0,a.pageCount=0,a.currentPageId=parseInt(r.getValue("filemanager.pageId",1)),a.$watch("currentPageId",function(e,t){void 0!==e&&e!=t&&a.getFilesForCurrentPage()},!0),a.$watch("currentFolderId",function(e,t){void 0!==e&&(a.generateFolderInheritance(e),a.getFilesForPageAndFolder(e,1))},!0),a.folderInheritance=[],a.generateFolderInheritance=function(e){a.folderInheritance=[],a.findFolderInheritance(e)},a.findFolderInheritance=function(e){if(a.foldersData&&a.foldersData.hasOwnProperty(e)){var t=a.foldersData[e];a.folderInheritance.push(t),t&&t.parentId&&a.findFolderInheritance(t.parentId)}},a.hasFolderActiveChild=function(t){var n=!1;return angular.forEach(a.folderInheritance,function(e){e.id==t&&(n=!0)}),n},a.getFilesForPageAndFolder=function(n,i){return l(function(t,e){o.get(a.createUrl(n,i,a.sortField,a.searchQuery)).then(function(e){return r.setValue("filemanager.sortField",a.sortField),r.setValue("filemanager.pageId",parseInt(i)),a.filesResponseToVars(e),t(!0)})})},a.createUrl=function(e,t,n,i){return"admin/api-admin-storage/data-files?folderId="+e+"&page="+t+"&expand=createThumbnail,createThumbnailMedium,isImage,sizeReadable&sort="+n+"&search="+i},a.filesResponseToVars=function(e){a.filesData=e.data,a.pageCount=e.headers("X-Pagination-Page-Count"),a.currentPageId=parseInt(e.headers("X-Pagination-Current-Page")),a.totalFiles=e.headers("X-Pagination-Total-Count")},a.filesMetaToPagination=function(e){a.pageCount=e.totalPages},a.getFilesForCurrentPage=function(){return a.getFilesForPageAndFolder(a.currentFolderId,a.currentPageId)},a.currentFolderId=f.folderId,a.foldersDirecotryIdReload=function(){return f.load(!0)},a.folderCountMessage=function(e){return i18nParam("js_filemanager_count_files_overlay",{count:e.filesCount})},a.errorMsg=null,a.replaceFile=function(e,t){(a.replaceFiled=e)&&(u.start(),s.upload({url:"admin/api-admin-storage/file-replace",data:{file:e,fileId:a.fileDetail.id,pageId:a.currentPageId}}).then(function(e){u.stop(),200==e.status&&(a.getFilesForCurrentPage().then(function(){p.success(i18n.js_dir_manager_file_replace_ok)}),a.openFileDetail(a.fileDetail,!0))},function(){u.stop()}))},a.$watch("uploadingfiles",function(e){if(null!=e){a.uploadResults=0,u.start(i18n.js_dir_upload_wait);for(var t=0;t\n
\n

'+i18n.crop_source_image+'

\n
\n \n
\n
    \n
  • crop_free
    '+i18n.crop_size_free+'
  • \n
  • crop_square
    '+i18n.crop_size_1to1+'
  • \n
  • crop_16_9
    '+i18n.crop_size_desktop+'
  • \n
  • crop_portrait
    '+i18n.crop_size_mobile+'
  • \n
\n
\n
\n

'+i18n.crop_preview+'

\n \n\n
    \n
  • looks_one
    '+i18n.crop_quality_high+'
  • \n
  • looks_two
    '+i18n.crop_quality_medium+'
  • \n
  • looks_3
    '+i18n.crop_quality_low+'
  • \n
\n\n
\n \n \n '+i18n.crop_btn_as_copy_hint+'\n
\n\n \n \n
\n \n "}}),zaa.directive("pagination",function(){return{restrict:"E",scope:{currentPage:"=",pageCount:"="},controller:["$scope","$timeout",function(t,e){t.pageNumberInputVal=t.currentPage,t.$watch("currentPage",function(e){t.pageNumberInputVal=e}),t.$watch("pageNumberInputVal",function(){t.inputWidth=25+10*(t.pageNumberInputVal.toString().length<=0?1:t.pageNumberInputVal.toString().length)});var n=null;t.pageNumberInputChange=function(){n&&e.cancel(n),n=e(function(){isNaN(t.pageNumberInputVal)?t.pageNumberInputVal=t.currentPage:parseInt(t.pageNumberInputVal)>parseInt(t.pageCount)||parseInt(t.pageNumberInputVal)<=0?t.pageNumberInputVal=t.currentPage:t.currentPage=t.pageNumberInputVal},500)},t.next=function(){t.currentPage\n \n \n
\n \n /\n {{pageCount}}\n
\n \n \n \n '}}),zaa.controller("DefaultDashboardObjectController",["$scope","$http","$sce",function(t,n,e){t.data,t.loadData=function(e){n.get(e).then(function(e){t.data=e.data})}}]),zaa.controller("CrudController",["cfpLoadingBar","$scope","$rootScope","$filter","$http","$sce","$state","$timeout","$injector","$q","AdminLangService","AdminToastService","CrudTabService","ServiceImagesData",function(t,r,e,n,s,i,a,o,l,c,d,u,p,f){r.toast=u,r.AdminLangService=d,r.tabService=p,r.clearData=function(){u.confirm(i18n.ngrest_delete_all_button_confirm_message,i18n.ngrest_delete_all_button_label,function(){var e=this;s.get(r.config.apiEndpoint+"/truncate").then(function(){e.close(),r.loadList()})})},r.crudSwitchType=0,r.switchToTab=function(e){angular.forEach(r.tabService.tabs,function(e){e.active=!1}),e.active=!0,r.switchTo(4)},r.addAndswitchToTab=function(e,t,n,i,a){r.tabService.addTab(e,t,n,i,a),r.switchTo(4)},r.closeTab=function(e,t){r.tabService.remove(t,r)},r.switchTo=function(e,t){r.config.relationCall?r.crudSwitchType=e:(t&&r.resetData(),0==e&&s.get(r.config.apiEndpoint+"/unlock",{ignoreLoadingBar:!0}),0!=e&&1!=e||r.config.inline||a.go("default.route"),4===(r.crudSwitchType=e)||r.config.inline||angular.forEach(r.tabService.tabs,function(e){e.active=!1}))},r.closeUpdate=function(){r.switchTo(0,!0)},r.closeCreate=function(){r.switchTo(0,!0)},r.activeWindowModal=!0,r.openActiveWindow=function(){r.activeWindowModal=!1},r.closeActiveWindow=function(){r.activeWindowModal=!0},r.changeGroupByField=function(){0==r.config.groupByField?r.config.groupBy=0:r.config.groupBy=1},r.isSettingsVisible=!1,r.toggleSettingsMenu=function(){r.isSettingsVisible=!r.isSettingsVisible},r.hiddeSettingsMenu=function(){r.isSettingsVisible=!1},r.isExportModalHidden=!0,r.exportdata={header:1,type:"xlsx"},r.toggleExportModal=function(){r.isExportModalHidden=!r.isExportModalHidden},r.exportResponse=!1,r.generateExport=function(){s.post(r.config.apiEndpoint+"/export?"+r.config.apiExportQueryString,r.exportdata).then(function(e){r.exportResponse=e.data})},r.downloadExport=function(){var e=r.exportResponse.url;return r.exportResponse=!1,window.open(e),!1},r.applySaveCallback=function(){r.config.saveCallback&&l.invoke(r.config.saveCallback,this)},r.isOrderBy=function(e){return e==r.config.orderBy},r.changeOrder=function(e,t){r.config.orderBy=t+e,s.post("admin/api-admin-common/ngrest-order",{apiEndpoint:r.config.apiEndpoint,sort:t,field:e},{ignoreLoadingBar:!0}),r.loadList()},r.callActiveButton=function(e,t,n){var i=angular.element(n.currentTarget);i.addClass("crud-buttons-button-loading"),s.get(r.config.apiEndpoint+"/active-button?hash="+e+"&id="+t.join()).then(function(e){i.removeClass("crud-buttons-button-loading"),i.addClass("crud-buttons-button-success"),o(function(){i.removeClass("crud-buttons-button-success")},5e3),angular.forEach(e.data.events,function(e){"loadList"==e&&r.loadList()}),u.success(e.data.message)},function(e){i.removeClass("crud-buttons-button-loading"),i.addClass("crud-buttons-button-danger"),o(function(){i.removeClass("crud-buttons-button-danger")},5e3),u.error(e.data.message)})},r.reloadActiveWindow=function(){r.getActiveWindow(r.data.aw.hash,r.data.aw.itemId)},r.getActiveWindow=function(t,n,e){s.post(r.config.activeWindowRenderUrl,{itemId:n,activeWindowHash:t,ngrestConfigHash:r.config.ngrestConfigHash}).then(function(e){r.openActiveWindow(),r.data.aw.itemId=n,r.data.aw.configCallbackUrl=r.config.activeWindowCallbackUrl,r.data.aw.configHash=r.config.ngrestConfigHash,r.data.aw.hash=t,r.data.aw.content=i.trustAsHtml(e.data.content),r.data.aw.title=e.data.title,r.$broadcast("awloaded",{id:t})})},r.getActiveWindowCallbackUrl=function(e){return r.data.aw.configCallbackUrl+"?activeWindowCallback="+e+"&ngrestConfigHash="+r.data.aw.configHash+"&activeWindowHash="+r.data.aw.hash},r.sendActiveWindowCallback=function(e,t){t=t||{};return s.post(r.getActiveWindowCallbackUrl(e),$.param(t),{headers:{"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}})},r.searchPromise=null,r.$watch("config.searchQuery",function(e,t){e!=t&&null!=e&&null!=e&&r.applySearchQuery(e)}),r.applySearchQuery=function(e){null!=e&&null!=e&&(o.cancel(r.searchPromise),0==e.length?r.loadList(1):(t.start(),r.searchPromise=o(function(){r.reloadCrudList(1)},700)))},r.generateSearchPromise=function(e,t){return s.post(r.generateUrlWithParams("search",t),{query:e}).then(function(e){r.parseResponseQueryToListArray(e)})},r.parentSelectInline=function(e){r.$parent.$parent.$parent.setModelValue(r.getRowPrimaryValue(e),e)},r.checkIfFieldExistsInPopulateCondition=function(e){var t=r.config.pools;if(t.hasOwnProperty(e))return t[e];if(r.config.relationCall){var n=r.$parent.$parent.config.relations[parseInt(r.config.relationCall.arrayIndex)].relationLink;if(null!==n&&n.hasOwnProperty(e))return parseInt(r.config.relationCall.id)}return!1},r.relationItems=[],r.deleteItem=function(e,t){u.confirm(i18n.js_ngrest_rm_page,i18n.ngrest_button_delete,["$toast",function(t){s.delete(r.config.apiEndpoint+"/"+e).then(function(e){r.loadList(),t.close(),u.success(i18n.js_ngrest_rm_confirm)},function(e){r.printErrors(e)})}])},r.toggleUpdate=function(n){r.resetData(),s.get(r.config.apiEndpoint+"/"+n+"?"+r.config.apiUpdateQueryString).then(function(e){var t=e.data;r.data.update=t,r.config.relationCall?r.crudSwitchType=2:r.switchTo(2),r.config.inline||a.go("default.route.detail",{id:n}),r.data.updateId=n},function(e){u.error(i18n.js_ngrest_error)})},r.highlightPkValue=null,r.highlightTimeout=5e3,r.isRowHighlighted=function(e){return r.getRowPrimaryValue(e)==r.highlightPkValue},r.submitUpdate=function(){s.put(r.config.apiEndpoint+"/"+r.data.updateId,angular.toJson(r.data.update,!0)).then(function(e){u.success(i18n.js_ngrest_rm_update),r.loadList(r.pager.currentPage).then(function(){r.applySaveCallback(),r.switchTo(0,!0),r.highlightPkValue=r.getRowPrimaryValue(e.data),o(function(){r.highlightPkValue=null},r.highlightTimeout)})},function(e){r.printErrors(e.data)})},r.submitCreate=function(){s.post(r.config.apiEndpoint,angular.toJson(r.data.create,!0)).then(function(e){u.success(i18n.js_ngrest_rm_success),r.loadList().then(function(){r.applySaveCallback(),r.switchTo(0,!0),r.resetData(),r.highlightPkValue=r.getRowPrimaryValue(e.data),o(function(){r.highlightPkValue=null},r.highlightTimeout)})},function(e){r.printErrors(e.data)})},r.printErrors=function(e){angular.forEach(e,function(e,t){u.error(e.message)})},r.resetData=function(){r.data.create=angular.copy({}),r.data.update=angular.copy({})},r.changeNgRestFilter=function(){s.post("admin/api-admin-common/ngrest-filter",{apiEndpoint:r.config.apiEndpoint,filterName:r.config.filter},{ignoreLoadingBar:!0}),r.loadList(1)},r.pager={currentPage:1,pageCount:1,perPage:0,totalItems:0},r.$watch("pager.currentPage",function(e,t){e===t||null==e||null==e||r.loadList(e)},!0),r.setPagination=function(e,t,n,i){r.totalRows=i,r.pager={currentPage:parseInt(e),pageCount:t,perPage:n,totalItems:i}},r.toggleStatus=function(t,n,i,e){var a=!e?1:0,o=t[r.config.pk],l={};l[n]=a,s.put(r.config.apiEndpoint+"/"+o+"?ngrestCallType=update&fields="+n,angular.toJson(l,!0)).then(function(e){t[n]=a,u.success(i18nParam("js_ngrest_toggler_success",{field:i}))},function(e){r.printErrors(e)})},r.sortableUp=function(e,t,n){var i=r.data.listArray[e-1];r.data.listArray[e-1]=t,r.data.listArray[e]=i,r.updateSortableIndexPositions(n)},r.sortableDown=function(e,t,n){var i=r.data.listArray[e+1];r.data.listArray[e+1]=t,r.data.listArray[e]=i,r.updateSortableIndexPositions(n)},r.updateSortableIndexPositions=function(a){angular.forEach(r.data.listArray,function(e,t){var n={};n[a]=t;var i=r.getRowPrimaryValue(e);s.put(r.config.apiEndpoint+"/"+i+"?ngrestCallType=update&fields="+a,angular.toJson(n,!0),{ignoreLoadingBar:!0})})},r.loadService=function(){r.initServiceAndConfig()},r.evalSettings=function(e){e.hasOwnProperty("order")&&(r.config.orderBy=e.order),e.hasOwnProperty("filterName")&&(r.config.filter=e.filterName)},r.getRowPrimaryValue=function(t){var e=r.config.pk;if(angular.isArray(e)){var n=[];return angular.forEach(e,function(e){n.push(t[e])}),n.join()}return t[r.config.pk]},r.tagsFilterIds=[],r.isTagFilterActive=function(e){return-1!=r.tagsFilterIds.indexOf(e)},r.toggleTagFilter=function(e){var t=r.tagsFilterIds.indexOf(e);-1==t?r.tagsFilterIds.push(e):r.tagsFilterIds.splice(t,1),r.loadList()},r.initServiceAndConfig=function(){var t=c.defer();return s.get(r.config.apiEndpoint+"/services?"+r.config.apiServicesQueryString).then(function(e){r.service=e.data.service,r.serviceResponse=e.data,r.evalSettings(e.data._settings),r.$parent.notifications&&r.$parent.notifications.hasOwnProperty(r.serviceResponse._authId)&&delete r.$parent.notifications[r.serviceResponse._authId],t.resolve()}),t.promise},r.toggleNotificationMute=function(){s.post(r.config.apiEndpoint+"/toggle-notification",{mute:!r.serviceResponse._notifcation_mute_state}).then(function(e){r.initServiceAndConfig()})},r.getFieldHelp=function(e){return!!(r.serviceResponse&&r.serviceResponse._hints&&r.serviceResponse._hints.hasOwnProperty(e))&&r.serviceResponse._hints[e]},r.loadList=function(e){return null==e&&r.pager?r.reloadCrudList(r.pager.currentPage):r.reloadCrudList(e)},r.totalRows=0,r.requestedImages=[],r.parseResponseQueryToListArray=function(n){r.setPagination(n.headers("X-Pagination-Current-Page"),n.headers("X-Pagination-Page-Count"),n.headers("X-Pagination-Per-Page"),n.headers("X-Pagination-Total-Count")),r.data.listArray=n.data,r.requestedImages=[],angular.forEach(r.service,function(e,t){e.hasOwnProperty("lazyload_images")&&angular.forEach(n.data,function(e){r.requestedImages.push(e[t])})}),o(function(){f.loadImages(r.requestedImages).then(function(){r.$broadcast("requestImageSourceReady"),r.requestedImages=[]})})},r.generateUrlWithParams=function(e,t){var n=r.config.apiEndpoint+"/"+e+"?"+r.config.apiListQueryString;r.config.orderBy&&(n=n+"&sort="+r.config.orderBy.replace("+","")),void 0!==t&&(n=n+"&page="+t);var i=r.config.searchQuery;i&&(n=n+"&query="+i);var a=r.tagsFilterIds.join(",");return a&&(n=n+"&tags="+a),n},r.reloadCrudList=function(e){var t=c.defer();if(0==parseInt(r.config.filter)||null===r.config.filter){if(r.config.relationCall){n=(n=r.generateUrlWithParams("relation-call",e))+"&arrayIndex="+r.config.relationCall.arrayIndex+"&id="+r.config.relationCall.id+"&modelClass="+r.config.relationCall.modelClass}else{if(r.config.searchQuery)return r.generateSearchPromise(r.config.searchQuery,e);var n=r.generateUrlWithParams("list",e)}s.get(n).then(function(e){t.resolve(e),r.parseResponseQueryToListArray(e)})}else{n=(n=r.generateUrlWithParams("filter",e))+"&filterName="+r.config.filter,s.get(n).then(function(e){r.parseResponseQueryToListArray(e),t.resolve(e)})}return t.promise},r.service=!1,r.$on("secondMenuClick",function(){r.isInitalized&&(r.loadList(),r.switchTo(0,!0))}),r.data={create:{},update:{},aw:{},list:{},updateId:0},r.isInitalized=!1,r.$watch("config",function(e,t){o(function(){r.initServiceAndConfig().then(function(){r.isInitalized=!0,r.loadList()})})})}]),zaa.controller("ActiveWindowTagController",["$scope","$http","AdminToastService",function(n,e,i){n.crud=n.$parent,n.tags=[],n.relation={},n.newTagName=null,n.loadTags=function(){e.get(n.crud.getActiveWindowCallbackUrl("LoadTags")).then(function(e){n.tags=e.data})},n.loadRelations=function(){e.get(n.crud.getActiveWindowCallbackUrl("LoadRelations")).then(function(e){n.relation={},e.data.forEach(function(e,t){n.relation[e.tag_id]=1})})},n.saveTag=function(){var t=n.newTagName;""!==t&&n.crud.sendActiveWindowCallback("SaveTag",{tagName:t}).then(function(e){e.data?(n.tags.push({id:e.data,name:t}),i.success(t+" wurde gespeichert.")):i.error(t+" "+i18n.js_tag_exists),n.newTagName=null})},n.saveRelation=function(t,e){n.crud.sendActiveWindowCallback("SaveRelation",{tagId:t.id,value:e}).then(function(e){n.relation[t.id]=e.data,i.success(i18n.js_tag_success)})},n.$watch(function(){return n.data.aw.itemId},function(e,t){n.loadRelations()}),n.loadTags()}]),zaa.controller("ActiveWindowGalleryController",["$scope","$http","$filter",function(o,e,t){o.crud=o.$parent,o.files=[],o.select=function(e){0==t("filter")(o.files,{fileId:e},!0).length&&o.crud.sendActiveWindowCallback("AddImageToIndex",{fileId:e}).then(function(e){var t=e.data;o.files.push(t)})},o.loadImages=function(){e.get(o.crud.getActiveWindowCallbackUrl("loadAllImages")).then(function(e){o.files=e.data})},o.changePosition=function(e,t,n){t=parseInt(t);var i=o.files[t];"up"==n?(o.files[t]=o.files[t-1],o.files[t-1]=i):"down"==n&&(o.files[t]=o.files[t+1],o.files[t+1]=i);var a=o.files[t];o.crud.sendActiveWindowCallback("ChangeSortIndex",{new:a,old:i})},o.moveUp=function(e,t){o.changePosition(e,t,"up")},o.moveDown=function(e,t){o.changePosition(e,t,"down")},o.remove=function(e,t){o.crud.sendActiveWindowCallback("RemoveFromIndex",{imageId:e.originalImageId}).then(function(e){o.files.splice(t,1)})},o.$watch(function(){return o.data.aw.itemId},function(e,t){o.loadImages()})}]),zaa.controller("ActiveWindowGroupAuth",["$scope","$http","CacheReloadService",function(n,e,t){n.crud=n.$parent,n.reload=function(){t.reload()},n.rights=[],n.auths=[],n.save=function(e){n.crud.sendActiveWindowCallback("saveRights",{data:e}).then(function(e){n.getRights(),n.reload()})},n.clearModule=function(e){angular.forEach(e,function(e){n.rights[e.id]={base:0,create:0,update:0,delete:0}})},n.toggleModule=function(e){angular.forEach(e,function(e){n.rights[e.id]={base:1,create:1,update:1,delete:1}})},n.toggleGroup=function(e){objectGroup=n.rights[e],1==objectGroup.base?(objectGroup.create=1,objectGroup.update=1,objectGroup.delete=1):0==objectGroup.base&&(objectGroup.create=0,objectGroup.update=0,objectGroup.delete=0)},n.toggleAll=function(){angular.forEach(n.auths,function(e){angular.forEach(e,function(e){n.rights[e.id]={base:1,create:1,update:1,delete:1}})})},n.untoggleAll=function(){angular.forEach(n.auths,function(e){angular.forEach(e,function(e){n.rights[e.id]={base:0,create:0,update:0,delete:0}})})},n.getRights=function(){e.get(n.crud.getActiveWindowCallbackUrl("getRights")).then(function(e){n.rights=e.data.rights,n.auths=e.data.auths})},n.$on("awloaded",function(e,t){n.getRights()}),n.$watch(function(){return n.data.aw.itemId},function(e,t){n.getRights()})}]),zaa.controller("DefaultController",["$scope","$http","$state","$stateParams","CrudTabService",function(a,t,n,i,o){a.moduleId=n.params.moduleId,a.loadDashboard=function(){return a.currentItem=null,a.getDashboard(a.moduleId),n.go("default",{moduleId:a.moduleId})},a.isOpenModulenav=!1,a.items=[],a.itemRoutes=[],a.currentItem=null,a.dashboard=[],a.itemAdd=function(e,t){for(var n in a.items.push({name:e,items:t}),t){var i=t[n];a.itemRoutes[i.route]={alias:i.alias,icon:i.icon}}},a.getDashboard=function(e){t.get("admin/api-admin-menu/dashboard",{params:{nodeId:e}}).then(function(e){a.dashboard=e.data})},a.init=function(){a.get(),a.getDashboard(a.moduleId)},a.resolveCurrentItem=function(){if(!a.currentItem&&("default.route"==n.current.name||"default.route.detail"==n.current.name)){var e=[i.moduleRouteId,i.controllerId,i.actionId].join("/");a.itemRoutes.indexOf(e)&&(a.currentItem=a.itemRoutes[e],a.currentItem.route=e)}},a.click=function(e){a.isOpenModulenav=!1;var t=(a.currentItem=e).route.split("/");o.clear(),a.$broadcast("secondMenuClick",{item:e}),n.go("default.route",{moduleRouteId:t[0],controllerId:t[1],actionId:t[2]})},a.get=function(){t.get("admin/api-admin-menu/items",{params:{nodeId:a.moduleId}}).then(function(e){var t=e.data;for(var n in t.groups){var i=t.groups[n];a.itemAdd(i.name,i.items)}a.resolveCurrentItem()})},a.hasSubUnreadNotificaton=function(e){return a.$parent.notifications&&a.$parent.notifications.hasOwnProperty(e.authId)?a.$parent.notifications[e.authId]:0},a.$on("topMenuClick",function(e){a.currentItem=null}),a.init()}]),zaa.controller("DashboardController",["$scope",function(e){e.logItemOpen=!1}]),zaa.filter("lockFilter",function(){return function(e,t,n){var i=!1;return angular.forEach(e,function(e){e.lock_table==t&&e.lock_pk==n&&(i=e)}),i}}),zaa.controller("LayoutMenuController",["$scope","$document","$http","$state","$timeout","$window","$filter","HtmlStorage","CacheReloadService","AdminDebugBar","LuyaLoading","AdminToastService","AdminClassService",function(a,e,n,o,i,t,l,r,s,c,d,u,p){a.AdminClassService=p,a.AdminDebugBar=c,a.LuyaLoading=d,a.toastQueue=u.queue,a.reload=function(){s.reload()},a.reload=function(e){0==e?t.location.reload():s.reload()},a.reloadButtonCall=function(e){n.get("admin/api-admin-common/reload-button-call?key="+e).then(function(e){u.success(e.data.message)})},a.isHover=r.getValue("sidebarToggleState",!1),a.toggleMainNavSize=function(){a.isHover=!a.isHover,r.setValue("sidebarToggleState",a.isHover)},a.profile={},a.settings={},a.packages=[],a.getProfileAndSettings=function(){n.get("admin/api-admin-user/session").then(function(e){a.profile=e.data.user,a.settings=e.data.settings,a.packages=e.data.packages})},a.browser=null,a.detectBrowser=function(){a.browser=[bowser.name.replace(" ","-").toLowerCase()+"-"+bowser.version,bowser.mac?"mac-os-"+(bowser.osversion?bowser.osversion:""):"windows-"+(bowser.osversion?bowser.osversion:"")].join(" ")},a.detectBrowser(),a.getProfileAndSettings(),a.debugDetail=null,a.debugDetailKey=null,a.loadDebugDetail=function(e,t){a.debugDetail=e,a.debugDetailKey=t},a.closeDebugDetail=function(){a.debugDetail=null,a.debugDetailKey=null},a.notify=null,a.forceReload=0,a.showOnlineContainer=!1,a.searchDetailClick=function(t,i){"custom"==t.type?a.click(t.menuItem).then(function(){if(t.stateProvider){var n={};angular.forEach(t.stateProvider.params,function(e,t){n[t]=i[e]}),o.go(t.stateProvider.state,n).then(function(){a.closeSearchInput()})}else a.closeSearchInput()}):a.click(t.menuItem.module).then(function(){var e=t.menuItem.route.split("/");o.go("default.route",{moduleRouteId:e[0],controllerId:e[1],actionId:e[2]}).then(function(){if(t.stateProvider){var n={};angular.forEach(t.stateProvider.params,function(e,t){n[t]=i[e]}),o.go(t.stateProvider.state,n).then(function(){a.closeSearchInput()})}else a.closeSearchInput()})})},a.visibleAdminReloadDialog=!1,a.lastKeyStroke=Date.now(),e.bind("keyup",function(e){a.lastKeyStroke=Date.now()}),a.notifications=[],function t(){n.post("admin/api-admin-timestamp",{lastKeyStroke:a.lastKeyStroke},{ignoreLoadingBar:!0}).then(function(e){a.forceReload=e.data.forceReload,a.notifications=e.data.notifications,a.forceReload&&!a.visibleAdminReloadDialog&&(a.visibleAdminReloadDialog=!0,u.confirm(i18n.js_admin_reload,i18n.layout_btn_reload,function(){a.reload(),a.visibleAdminReloadDialog=!1})),a.locked=e.data.locked,a.notify=e.data.useronline,a.idleStrokeDashoffset=e.data.idleStrokeDashoffset,a.idleTimeRelative=e.data.idleTimeRelative,i(t,2e4)})}(),a.isLocked=function(e,t){return l("lockFilter")(a.locked,e,t)},a.getLockedName=function(e,t){var n=a.isLocked(e,t);return n.firstname+" "+n.lastname},a.searchQuery=null,a.searchInputOpen=!1,a.escapeSearchInput=function(){a.searchInputOpen&&a.closeSearchInput()},a.toggleSearchInput=function(){a.searchInputOpen=!a.searchInputOpen},a.openSearchInput=function(){a.searchInputOpen=!0},a.closeSearchInput=function(){a.searchInputOpen=!1},a.searchResponse=null,a.hasUnreadNotificaton=function(e){var t=e.authIds,n=0;return angular.forEach(t,function(e){e&&a.notifications.hasOwnProperty(e)&&(n+=parseInt(a.notifications[e]))}),n},a.$watch(function(){return a.searchQuery},function(e,t){e!==t&&(2'}}}); \ No newline at end of file diff --git a/src/resources/js/controllers.js b/src/resources/js/controllers.js index a2427b4754..90d7981e8c 100644 --- a/src/resources/js/controllers.js +++ b/src/resources/js/controllers.js @@ -1175,7 +1175,7 @@ $scope.notifications = []; (function tick(){ - $http.post('admin/api-admin-timestamp/index', {lastKeyStroke: $scope.lastKeyStroke}, {ignoreLoadingBar: true}).then(function(response) { + $http.post('admin/api-admin-timestamp', {lastKeyStroke: $scope.lastKeyStroke}, {ignoreLoadingBar: true}).then(function(response) { $scope.forceReload = response.data.forceReload; $scope.notifications = response.data.notifications; if ($scope.forceReload && !$scope.visibleAdminReloadDialog) {