3e84dce6c092b96925b1b2c0adc0e63ab5f73301
[motion.git] / public / assets / plugins / angular-elastic-builder / dist / angular-elastic-builder.min.js
1 !function(e){"use strict";e.module("angular-elastic-builder",["RecursionHelper"])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").directive("elasticBuilder",["elasticQueryService",function(e){return{scope:{data:"=elasticBuilder"},templateUrl:"angular-elastic-builder/BuilderDirective.html",link:function(n){var r=n.data;n.filters=[],n.removeChild=function(e){n.filters.splice(e,1)},n.addRule=function(){n.filters.push({})},n.addGroup=function(){n.filters.push({type:"group",subType:"and",rules:[]})},n.$watch("data.needsUpdate",function(t){t&&(n.filters=e.toFilters(r.query,n.data.fields),n.data.needsUpdate=!1)}),n.$watch("filters",function(t){t&&(r.query=e.toQuery(n.filters,n.data.fields))},!0)}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderChooser",["RecursionHelper","groupClassHelper",function(e,n){return{scope:{elasticFields:"=",item:"=elasticBuilderChooser",onRemove:"&"},templateUrl:"angular-elastic-builder/ChooserDirective.html",compile:function(r){return e.compile(r,function(e,r,t){var a=e.depth=+t.depth,l=e.item;e.getGroupClassName=function(){var e=a;return"group"===l.type&&e++,n(e)}})}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderGroup",["RecursionHelper","groupClassHelper",function(e,n){return{scope:{elasticFields:"=",group:"=elasticBuilderGroup",onRemove:"&"},templateUrl:"angular-elastic-builder/GroupDirective.html",compile:function(r){return e.compile(r,function(e,r,t){var a=e.depth=+t.depth,l=e.group;e.addRule=function(){l.rules.push({})},e.addGroup=function(){l.rules.push({type:"group",subType:"and",rules:[]})},e.removeChild=function(e){l.rules.splice(e,1)},e.getGroupClassName=function(){return n(a+1)}})}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderRule",[function(){return{scope:{elasticFields:"=",rule:"=elasticBuilderRule",onRemove:"&"},templateUrl:"angular-elastic-builder/RuleDirective.html",link:function(e){e.getType=function(){var n=e.elasticFields,r=e.rule.field;return n&&r?"boolean"===n[r].subType?"boolean":n[r].type:void 0}}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticType",[function(){return{scope:{type:"=elasticType",rule:"=",guide:"="},template:'<ng-include src="getTemplateUrl()" />',link:function(e){e.getTemplateUrl=function(){var n=e.type;if(n)return n=n.charAt(0).toUpperCase()+n.slice(1),"angular-elastic-builder/types/"+n+".html"},e.booleans=["False","True"],e.booleansOrder=["True","False"],e.inputNeeded=function(){var n=["equals","notEquals","gt","gte","lt","lte"];return~n.indexOf(e.rule.subType)}}}}])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").run(["$templateCache",function(e){e.put("angular-elastic-builder/BuilderDirective.html",'<!-- <div class="elastic-builder">\r\n  <div class="filter-panels">\r\n    <div class="list-group form-inline">\r\n      <div\r\n        data-ng-repeat="filter in filters"\r\n        data-elastic-builder-chooser="filter"\r\n        data-elastic-fields="data.fields"\r\n        data-on-remove="removeChild($index)"\r\n        data-depth="0"></div>\r\n      <div class="list-group-item actions">\r\n        <a class="btn btn-xs btn-primary" title="Add Rule" data-ng-click="addRule()">\r\n          <i class="fa fa-plus"></i>\r\n        </a>\r\n        <a class="btn btn-xs btn-primary" title="Add Group" data-ng-click="addGroup()">\r\n          <i class="fa fa-list"></i>\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div> -->\r\n\r\n<!-- <div class="elastic-builder">\r\n  <div class="filter-panels"> -->\r\n    <div class="list-group form-inline list-group-item-custom" ng-switch="data.type">\r\n      <div\r\n        data-ng-repeat="filter in filters"\r\n        data-elastic-builder-chooser="filter"\r\n        data-elastic-fields="data.fields"\r\n        data-on-remove="removeChild($index)"\r\n        data-depth="0">\r\n      </div>\r\n      <div class="list-group-item actions list-group-item-custom" ng-switch-when="condition">\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">\r\n                             <i class="icon-plus"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\r\n                             </a>\r\n      </div>\r\n      <div class="list-group-item actions list-group-item-custom" ng-switch-when="action">\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\r\n                                 <i class="icon-plus"></i> {{ \'APPLICATION_ADD_ACTION\' | translate }}\r\n                            </a>\r\n      </div>\r\n      <div class="list-group-item actions list-group-item-custom" ng-switch-default>\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\r\n                               <i class="icon-plus"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\r\n                         </a>\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">\r\n                              <i class="icon-plus"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\r\n                             </a>\r\n      </div>\r\n    </div>\r\n  <!-- </div>\r\n</div> -->\r\n'),e.put("angular-elastic-builder/ChooserDirective.html",'<!-- <div\r\n  class="list-group-item elastic-builder-chooser"\r\n  data-ng-class="getGroupClassName()">\r\n\r\n  <div data-ng-if="item.type === \'group\'"\r\n    data-elastic-builder-group="item"\r\n    data-depth="{{ depth }}"\r\n    data-elastic-fields="elasticFields"\r\n    data-on-remove="onRemove()"></div>\r\n\r\n  <div data-ng-if="item.type !== \'group\'"\r\n    data-elastic-builder-rule="item"\r\n    data-elastic-fields="elasticFields"\r\n    data-on-remove="onRemove()"></div>\r\n\r\n</div> -->\r\n\r\n\r\n<div class="list-group-item elastic-builder-chooser list-group-item-custom" data-ng-class="getGroupClassName()">\r\n  <div data-ng-if="item.type === \'group\'"\r\n    data-elastic-builder-group="item"\r\n    data-depth="{{ depth }}"\r\n    data-elastic-fields="elasticFields"\r\n    data-on-remove="onRemove()"></div>\r\n  <div data-ng-if="item.type !== \'group\'"\r\n    data-elastic-builder-rule="item"\r\n    data-elastic-fields="elasticFields"\r\n    data-on-remove="onRemove()"></div>\r\n</div>\r\n'),e.put("angular-elastic-builder/GroupDirective.html",'<!-- <div class="elastic-builder-group">\r\n  <h5>If\r\n    <select data-ng-model="group.subType" class="form-control">\r\n      <option value="and">all</option>\r\n      <option value="or">any</option>\r\n    </select>\r\n    of these conditions are met\r\n  </h5>\r\n  <div\r\n    data-ng-repeat="rule in group.rules"\r\n    data-elastic-builder-chooser="rule"\r\n    data-elastic-fields="elasticFields"\r\n    data-depth="{{ +depth + 1 }}"\r\n    data-on-remove="removeChild($index)"></div>\r\n\r\n  <div class="list-group-item actions" data-ng-class="getGroupClassName()">\r\n    <a class="btn btn-xs btn-primary" title="Add Sub-Rule" data-ng-click="addRule()">\r\n      <i class="fa fa-plus"></i>\r\n    </a>\r\n    <a class="btn btn-xs btn-primary" title="Add Sub-Group" data-ng-click="addGroup()">\r\n      <i class="fa fa-list"></i>\r\n    </a>\r\n  </div>\r\n\r\n  <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\r\n    <i class="fa fa-minus"></i>\r\n  </a>\r\n</div> -->\r\n\r\n\r\n<!-- BEGIN Portlet PORTLET-->\r\n<div class="portlet light">\r\n  <div class="portlet-title">\r\n    <div class="caption" data-ng-class="{\'font-blue-hoki\': data.type === \'condition\', \'font-red-flamingo\': data.type === \'action\'}">\r\n      <!-- <i class="icon-people font-green-sharp"></i> -->\r\n      <h5><span class="caption-subject">{{ \'APPLICATION_IF\' | translate }}</span>\r\n        <select data-ng-model="group.subType" class="form-control">\r\n          <option value="and"><strong>{{ \'APPLICATION_ALL\' | translate | lowercase }}</strong></option>\r\n          <option value="or"><strong>{{ \'APPLICATION_ANY\' | translate | lowercase }}</strong></option>\r\n        </select>\r\n        <span class="caption-subject">{{group.subType == \'and\' ? \'MESSAGE_CODITIONS_MET_ALL\' : \'MESSAGE_CODITIONS_MET_ANY\' | translate}}</span>\r\n      </h5>\r\n    </div>\r\n  </div>\r\n  <div class="portlet-body">\r\n    <div class="elastic-builder-group">\r\n      <div\r\n        data-ng-repeat="rule in group.rules"\r\n        data-elastic-builder-chooser="rule"\r\n        data-elastic-fields="elasticFields"\r\n        data-depth="{{ +depth + 1 }}"\r\n        data-on-remove="removeChild($index)"></div>\r\n\r\n      <div class="list-group-item actions list-group-item-custom" data-ng-class="getGroupClassName()">\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\r\n          <i class="icon-plus"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\r\n        </a>\r\n        <a class="btn red btn-sm remover" data-ng-click="onRemove()">\r\n          <i class="icon-trash"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<!-- END Portlet PORTLET-->\r\n'),e.put("angular-elastic-builder/RuleDirective.html",'<!-- <div class="elastic-builder-rule">\r\n  <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select>\r\n\r\n  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>\r\n\r\n  <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\r\n    <i class="fa fa-minus"></i>\r\n  </a>\r\n\r\n</div> -->\r\n<!-- <div class="elastic-builder-rule"> -->\r\n  <!-- <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select> -->\n  {{elasticFields[rule.field].action.label | translate}}\n  <select class="form-control" data-ng-model="rule.field" >\n  <option ng-repeat="option in elasticFields" value="{{option.value}}">{{ option.label | translate }}</option>\n  </select>\n  <!-- <ui-select class="form-control" data-ng-model="rule.field" theme="bootstrap">\r\n    <ui-select-match placeholder="{{\'APPLICATION_CONDITION\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\r\n    <ui-select-choices repeat="value.value as key for (key, value) in elasticFields | filter: $select.search">\r\n      {{$translate.instant(key.name)}}\r\n    </ui-select-choices>\r\n  </ui-select> -->\r\n\r\n  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>\r\n\r\n  <!-- <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\r\n    <i class="fa fa-minus"></i>\r\n  </a> -->\r\n\r\n  <a class="btn remover" data-ng-click="onRemove()">\r\n    <i class="icon-trash"></i>\r\n  </a>\r\n\r\n<!-- </div> -->\r\n'),e.put("angular-elastic-builder/types/Boolean.html",'<span class="boolean-rule">\r\n  Equals\r\n\r\n  <!-- This is a weird hack to make sure these are numbers -->\r\n  <select\r\n    data-ng-model="rule.value"\r\n    class="form-control"\r\n    data-ng-options="booleans.indexOf(choice) as choice for choice in booleansOrder">\r\n  </select>\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Date.html",'<span class="date-rule">\r\n  <select data-ng-model="rule.subType" class="form-control">\r\n\r\n    <optgroup label="Generic">\r\n      <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option>\r\n    </optgroup>\r\n  </select>\r\n\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Multi.html",'<!-- <span class="multi-rule">\r\n  <span data-ng-repeat="choice in guide.choices">\r\n    <label class="checkbox">\r\n      <input type="checkbox" data-ng-model="rule.values[choice]">\r\n      {{ choice }}\r\n    </label>\r\n  </span>\r\n</span> -->\r\n\r\n<span class="multi-rule">\r\n  {{guide.action.midterm | translate}}\r\n  <!-- Range Fields -->\r\n  <!-- <select data-ng-model="rule.values" class="form-control"> -->\r\n  <select data-ng-model="rule.value" class="form-control">\r\n    <!-- <optgroup label="Numeral"> -->\r\n      <option data-ng-repeat="(key, value) in guide.choices" value="{{value}}">{{key}}</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- <optgroup label="Generic">\r\n      <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option>\r\n    </optgroup> -->\r\n  </select>\r\n\r\n  <!-- <input data-ng-if="inputNeeded()"\r\n    class="form-control"\r\n    data-ng-model="rule.value"\r\n    type="number"\r\n    min="{{ guide.minimum }}"\r\n    max="{{ guide.maximum }}"> -->\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Multiterm.html",'<span class="elastic-multiterm">\r\n  <select data-ng-model="rule.subType" class="form-control">\r\n      <option value="equals">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\r\n      <option value="notEquals">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\r\n  </select>\r\n  <select data-ng-model="rule.value" class="form-control">\r\n      <option data-ng-repeat="(key, value) in guide.choices" value="{{value}}">{{value | capitalize}}</option>\r\n  </select>\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Number.html",'<span class="number-rule">\r\n  <select data-ng-model="rule.subType" class="form-control">\r\n    <!-- <optgroup label="Numeral"> -->\r\n      <option value="equals">=</option>\r\n      <option value="gt">&gt;</option>\r\n      <option value="gte">&ge;</option>\r\n      <option value="lt">&lt;</option>\r\n      <option value="lte">&le;</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- <optgroup label="Generic"> -->\r\n      <!-- <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option> -->\r\n    <!-- </optgroup> -->\r\n  </select>\r\n\r\n  <!-- Range Fields -->\r\n  <input data-ng-if="inputNeeded()"\r\n    class="form-control"\r\n    data-ng-model="rule.value"\r\n    type="number"\r\n    min="{{ guide.minimum }}"\r\n    max="{{ guide.maximum }}">\r\n\r\n    <!-- <span class="help-block">{{rule.help}}</span> -->\r\n\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Term.html",'<!-- <span class="elastic-term">\r\n  <select data-ng-model="rule.subType" class="form-control"> -->\r\n    <!-- Term Options -->\r\n    <!-- <optgroup label="Text">\r\n      <option value="equals">Equals</option>\r\n      <option value="notEquals">! Equals</option>\r\n    </optgroup> -->\r\n\r\n    <!-- Generic Options -->\r\n    <!-- <optgroup label="Generic">\r\n      <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option>\r\n    </optgroup>\r\n\r\n  </select>\r\n  <input\r\n    data-ng-if="inputNeeded()"\r\n    class="form-control"\r\n    data-ng-model="rule.value"\r\n    type="text">\r\n</span> -->\r\n\r\n\r\n<span class="elastic-term">\r\n  <select data-ng-model="rule.subType" class="form-control">\r\n    <!-- Term Options -->\r\n    <!-- <optgroup label="Text"> -->\r\n      <option value="equals">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\r\n      <option value="notEquals">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- Generic Options -->\r\n    <!-- <optgroup label="Generic">\r\n      <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option>\r\n    </optgroup> -->\r\n\r\n  </select>\r\n  <input\r\n    data-ng-if="inputNeeded()"\r\n    class="form-control input-medium"\r\n    data-ng-model="rule.value"\r\n    type="text">\r\n</span>\r\n')}])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").factory("groupClassHelper",function(){return function(e){var n=[""];return n[e%n.length]}})}(window.angular),function(e){"use strict";function n(e,n){var r=e.map(t.bind(e,n));return r}function r(e,n){var r=e.map(a.bind(e,n)).filter(function(e){return!!e});return r}function t(e,n,r){r!==!1&&(r=!0);var a=Object.keys(n)[0],i={or:"group",and:"group",range:"number"},s=i[a]||"item",o=l(s);switch(a){case"or":case"and":o.rules=n[a].map(t.bind(n,e)),o.subType=a;break;case"missing":case"exists":o.field=n[a].field,o.subType={exists:"exists",missing:"notExists"}[a],delete o.value;break;case"term":case"terms":o.field=Object.keys(n[a])[0];var u=e[Object.keys(n[a])[0]];if("multi"===u.type){var c=n[a][o.field];"string"==typeof c&&(c=[c]),o.value=n[a][o.field]}else o.subType=r?"equals":"notEquals",o.value=n[a][o.field],"number"==typeof o.value&&(o.subType="boolean");break;case"range":o.field=Object.keys(n[a])[0],o.subType=Object.keys(n[a][o.field])[0],o.value=n[a][o.field][o.subType];break;case"not":o=t(e,n[a].filter,!1);break;default:o.field=Object.keys(n[a])[0]}return o}function a(e,n){var r={};if("group"===n.type)return r[n.subType]=n.rules.map(a.bind(n,e)).filter(function(e){return!!e}),r;var t=n.field,l=e[t];if(t){switch(l.type){case"term":case"multiterm":if("boolean"===l.subType&&(n.subType="boolean"),!n.subType)return;switch(n.subType){case"equals":case"boolean":if(void 0===n.value)return;r.term={},r.term[t]=n.value;break;case"notEquals":if(void 0===n.value)return;r.not={filter:{term:{}}},r.not.filter.term[t]=n.value;break;case"exists":r.exists={field:t};break;case"notExists":r.missing={field:t};break;default:throw new Error("unexpected subtype "+n.subType)}break;case"number":r.range={},r.range[t]={},r.range[t][n.subType]=n.value;break;case"date":if("exists"===n.subType)r.exists={field:t};else{if("notExists"!==n.subType)throw new Error("unexpected subtype");r.missing={field:t}}break;case"multi":r.terms={},r.terms[t]=n.value;break;default:throw new Error("unexpected type")}return r}}function l(n){var r={group:{type:"group",subType:"",rules:[]},item:{field:"",subType:"",value:""},number:{field:"",subType:"",value:null}};return e.copy(r[n])}e.module("angular-elastic-builder").factory("elasticQueryService",[function(){return{toFilters:n,toQuery:r}}])}(window.angular);