UNPKG

gumga-query-filter-ng

Version:

Gumga Query Filter

1 lines 48.9 kB
!function(e){function t(a){if(n[a])return n[a].exports;var r=n[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t,n){"use strict";n(3),n(4),angular.module("gumga.queryfilter.factory",["gumga.queryfilter.factory.hql","gumga.queryfilter.factory.querymodel"])},function(e,t,n){"use strict";n(6),n(5),angular.module("gumga.queryfilter.filter",["gumga.queryfilter.filter.directive","gumga.queryfilter.filter.core"])},function(e,t,n){"use strict";function a(e,t,n,a,r){function i(i,l,o,u){function c(){var e='<gumga-filter-core uid="'+f.uid+'" ng-show="openFilter" use-gquery="'+o.useGquery+'" is-open="true" search="ctrl.proxySearch(param)" '+(o.saveQuery?'save-query="saveQuery(query, name)"':"")+'is-query="true">'+f.possibleAdvancedFields.reduce(function(e,t){return e+=t},"")+"</gumga-filter-core>";angular.element(l.find("#"+f.containerAdvanced)).replaceWith(n(e)(i))}function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{keyCode:13},n=arguments[2];if(13===t.keyCode&&"TYPEAHEAD"!=n){var a=Object.keys(f.mapFields).filter(function(e){return!!f.mapFields[e].checkbox}).reduce(function(e,t){return e+=t.concat(",")},"").slice(0,-1);if(0!==a.length)if(f.useGquery){var r=new GQuery;a=a.split(",");var i=[],l=[],u=Object.keys(f.mapFields).filter(function(e){return!!f.mapFields[e].checkbox});u.map(function(e){return f.mapFields[e]}).forEach(function(e){e.innerJoin&&e.innerJoin.forEach(function(e){-1==i.indexOf(e)&&i.push(e)}),e.leftJoin&&e.leftJoin.forEach(function(e){-1==l.indexOf(e)&&l.push(e)})}),a.forEach(function(t,n){var a=null;void 0!=e&&null!=e&&(a=new Criteria(t,v(t),void 0==e||null==e?"":e)),"number"==f.mapFields[t].type&&void 0!=e&&null!=e?a=new Criteria(t,v(t),void 0==e||null==e?0:Number(e)):"date"==f.mapFields[t].type&&e?a=new Criteria(t,v(t),void 0==e||null==e?new Date:new Date(e)):"string"==f.mapFields[t].type&&a&&(a.setFieldFunction("%s"),a.setValueFunction("%s"),f.mapFields[t].ignoreCase&&(a.setFieldFunction(d(a.getFieldFunction())),a.setValueFunction(d(a.getValueFunction()))),f.mapFields[t].translate&&(a.setFieldFunction(p(a.getFieldFunction())),a.setValueFunction(p(a.getValueFunction())))),r=0==n?new GQuery(a):r.or(a)}),i.forEach(function(e){r.join(new Join(e,JoinType.INNER))}),l.forEach(function(e){r.join(new Join(e,JoinType.LEFT))}),o.lastGquery&&(f.lastGquery=angular.copy(r)),f.search({param:r})}else f.search({field:a,param:e})}}function d(e){return e.replace(/%s/g,"lower(%s)")}function p(e){return e.replace(/%s/g,"translate(%s, "+h+","+m+")")}function v(e){return"string"==f.mapFields[e].type?ComparisonOperator.CONTAINS:ComparisonOperator.EQUAL}function g(t){return e.when(f.savedFilters({page:location.hash}))}function y(e,n,a,r){t(function(){return f.searchField="",i.$broadcast("filter-items",e)})}var f=this,b=function(e){return!!o[e]};f.mapFields={},f.possibleAdvancedFields=[];var h="'âàãáÁÂÀÃéêÉÊíÍóôõÓÔÕüúÜÚÇç'",m="'AAAAAAAAEEEEIIOOOOOOUUUUCC'";f.uid=function(){function e(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()}(),b("search")||console.error('É necessário passar uma função para o atributo "search". [search="foo(field, param)"]'),u(function(e){var t=!1,n=i.$parent;if([].slice.call(e).forEach(function(e){if(e&&"ADVANCED-SEARCH-FIELD"===e.nodeName&&f.possibleAdvancedFields.push(e.outerHTML),e&&"SEARCH-FIELD"===e.nodeName){var r=angular.element(e),l=r.attr("field")?r.attr("field"):"",o=r.attr("type")?r.attr("type"):"string",u=!!i.$eval(r.attr("select")),c=r.attr("label")?a(r.attr("label"))(n):l.charAt(0).toUpperCase().concat(l.slice(1)),s=r.attr("inner-join")?r.attr("inner-join").split(","):[],d=r.attr("left-join")?r.attr("left-join").split(","):[],p="false"!=r.attr("ignore-case"),v="false"!=r.attr("translate");l||console.error('É necessário um parâmetro field na tag search-field.[<search-field field="foo"></search-field>]'),u&&(t=!0),f.mapFields[l]={checkbox:u,label:c,field:l,type:o,innerJoin:s,leftJoin:d,ignoreCase:p,translate:v}}}),!t){for(var r in f.mapFields)break;r&&(f.mapFields[r].checkbox=!0)}}),f.$onInit=function(){f.compileFilter=c,f.doSearch=s,f.proxyFn=g,f.filterSelect=y,f.advancedSearch=b("advancedSearch")?f.advancedSearch:null,f.containerAdvanced=b("containerAdvanced")?f.containerAdvanced:"replaceFilter",f.savedFilters=b("savedFilters")?f.savedFilters:angular.noop,f.searchText=b("searchText")?o.searchText:" ",f.proxySearch=function(e){return f.advancedSearch({param:e})},f.hasQuerySaved=!!o.savedFilters,i.proxySave=function(e,t){return f.saveQuery({query:e,name:t})},f.advancedSearch&&f.compileFilter()};var $=function(e){switch(e){case"string":return"text";case"number":return"number";case"date":return"date";default:return"text"}};f.getInputType=function(){var e=Object.keys(f.mapFields).filter(function(e){return!!f.mapFields[e].checkbox});0==e.length&&(f.searchSimpleType="text");var t=f.mapFields[e[0]]&&f.mapFields[e[0]].type?f.mapFields[e[0]].type:"string";return f.searchSimpleType=$(t),f.searchSimpleType},i.$watch("openFilter",function(e){void 0!=e&&r.$broadcast("openOrCloseFilter"+f.uid,e)}),f.getActivesFields=function(){return Object.keys(f.mapFields).filter(function(e){return!!f.mapFields[e].checkbox})},f.isDisabled=function(e){var t=f.getActivesFields();if(f.mapFields[e]&&f.mapFields[e].type){return t.filter(function(t){return f.mapFields[t].type!=f.mapFields[e].type}).length>0}},f.checkFields=function(e,t){var n=f.getActivesFields();if(f.mapFields[t]&&f.mapFields[t].type&&$(f.mapFields[t].type)!=f.searchSimpleType&&delete f.searchField,f.mapFields[t]&&f.mapFields[t].type){n.filter(function(e){return f.mapFields[e].type!=f.mapFields[t].type}).length>0&&(f.mapFields[t].checkbox=!1)}e.stopPropagation()},f.useGumgaDate=function(){try{return!1}catch(e){return!1}}}return i.$inject=["$scope","$element","$attrs","$transclude"],{restrict:"E",scope:{search:"&",advancedSearch:"&?",containerAdvanced:"@?",savedFilters:"&?",saveQuery:"&?",useGquery:"=?",lastGquery:"=?"},bindToController:!0,transclude:!0,controllerAs:"ctrl",controller:i,template:'\n <style>\n gumga-query .gumga-date {\n left:0 !important;\n top:35px;\n }\n </style>\n <div class="input-group">\n <input type="text" placeholder="Busque seus filtros salvos" class="form-control" ng-model="ctrl.searchField" ng-keyup="ctrl.doSearch(ctrl.searchField, $event, \'TYPEAHEAD\')" uib-typeahead="item.description for item in ctrl.proxyFn($viewValue)" typeahead-on-select="ctrl.filterSelect($item, $model, $label, $event)" ng-show="ctrl.hasQuerySaved && openFilter"/>\n \n <input type="number" ng-if="ctrl.getInputType() == \'number\'" ng-disabled="ctrl.getActivesFields().length == 0 || openFilter" class="form-control" ng-model="ctrl.searchField" ng-keyup="ctrl.doSearch(ctrl.searchField, $event)" ng-show="!ctrl.hasQuerySaved || !openFilter" />\n <input type="text" ng-if="ctrl.getInputType() == \'text\'" ng-disabled="ctrl.getActivesFields().length == 0" class="form-control" ng-model="ctrl.searchField" ng-keyup="ctrl.doSearch(ctrl.searchField, $event)" ng-show="!ctrl.hasQuerySaved || !openFilter" />\n \n <input type="date" ng-if="ctrl.getInputType() == \'date\' && !ctrl.useGumgaDate()" ng-disabled="ctrl.getActivesFields().length == 0" class="form-control" ng-model="ctrl.searchField" ng-keyup="ctrl.doSearch(ctrl.searchField, $event)" ng-show="!ctrl.hasQuerySaved || !openFilter" />\n <gumga-date ng-if="ctrl.getInputType() == \'date\' && ctrl.useGumgaDate()" ng-model="ctrl.searchField" ng-disabled="ctrl.getActivesFields().length == 0" ng-keyup="ctrl.doSearch(ctrl.searchField, $event)" ng-show="!ctrl.hasQuerySaved || !openFilter"></gumga-date>\n \n <span class="input-group-btn" uib-dropdown uib-keyboard-nav auto-close="outsideClick">\n <button class="btn btn-default" type="button" uib-dropdown-toggle>\n <span class="glyphicon glyphicon-chevron-down"><span>\n </button>\n <ul uib-dropdown-menu role="menu" aria-labelledby="single-button" class="dropdown-menu-search">\n <li role="menuitem" ng-repeat="(key, $value) in ctrl.mapFields" style="{{ctrl.isDisabled($value.field) ? \'opacity: 0.3;\' : \'\'}}">\n <a class="no-padding-search-fields">\n <label ng-click="ctrl.checkFields($event, $value.field)">\n <input type="checkbox" ng-model="$value.checkbox" style="pointer-events: none;"/>\n {{::$value.label}}\n </label>\n </a>\n </li>\n </ul>\n <button class="btn btn-default" ng-click="openFilter = !openFilter" type="button">\n <span class="glyphicon glyphicon-filter"></span>\n </button>\n <button class="btn btn-primary" type="button" ng-click="ctrl.doSearch(ctrl.searchField)" ng-disabled="openFilter">\n <span> {{::ctrl.searchText}} </span>\n <span class="glyphicon glyphicon-search rotate-search-glyph"></span>\n </button>\n </span>\n </div>\n <div class="row replace-filter">\n <div class="col-md-12">\n <div id="replaceFilter"></div>\n </div>\n </div>'}}a.$inject=["$q","$timeout","$compile","$interpolate","$rootScope"],angular.module("gumga.queryfilter.query",[]).directive("gumgaQuery",a)},function(e,t,n){"use strict";function a(e){function t(e){return f[e]||null}function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.contains={key:"CONTAINS",hql:" contains ",label:" contém ",before:" like upper('%",after:"%')"},t.not_contains={key:"NOT_CONTAINS",hql:" not_contains ",label:" não contém ",before:" not like upper('%",after:"%')"},t.starts_with={keys:"STARTS_WITH",hql:" starts_with ",label:" começa com ",before:" like upper('",after:"%')"},t.ends_with={key:"ENDS_WITH",hql:" ends_with ",label:" termina com ",before:" like upper('%",after:"')"},t.eq={key:"EQUAL",hql:" eq ",label:" igual ",before:" = upper('",after:"')"},t.ne={key:"NOT_EQUAL",hql:" ne ",label:" diferente de ",before:" != upper('",after:"')"},t.ge={key:"GREATER_EQUAL",hql:" ge ",label:" maior igual ",before:" >= upper('",after:"')"},t.gt={key:"GREATER",hql:" gt ",label:" maior que ",before:" > ",after:""},t.le={key:"LOWER_EQUAL",hql:" le ",label:" menor igual ",before:" <= ",after:""},t.lt={key:"LOWER",hql:" lt ",label:" menor que ",before:" < upper('",after:"')"},t.in={key:"IN",hql:" in ",label:" em",before:" in (",after:")"},t.is={key:"IS",hql:" is ",label:" está ",before:" is ",after:""},t.date_eq={key:"EQUAL",hql:" eq ",label:" igual ",before:" >= ",after:""},t.date_ne={key:"NOT_EQUAL",hql:" ne ",label:" diferente de ",before:" <= ",after:""},t.date_lt={key:"LOWER_EQUAL",hql:" ld ",label:" anterior a ",before:" <= ",after:""},t.date_gt={key:"GREATER_EQUAL",hql:" gd ",label:" posterior a ",before:" >= ",after:""},e.map(function(e){return t[e]})}function a(e,t){var n=[],a=[];Object.keys(e).map(function(t){return e[t]}).forEach(function(e){e.query&&e.query.attribute&&e.query.attribute.innerJoin&&e.query.attribute.leftJoin&&(e.query.attribute.innerJoin.forEach(function(e){-1==n.indexOf(e)&&n.push(e)}),e.query.attribute.leftJoin.forEach(function(e){-1==a.indexOf(e)&&a.push(e)}))}),n.forEach(function(e){t=t.join(new Join(e,JoinType.INNER))}),a.forEach(function(e){t=t.join(new Join(e,JoinType.LEFT))})}function r(e){return e.replace(/%s/g,"lower(%s)")}function i(e){return e.replace(/%s/g,"translate(%s, "+b+","+h+")")}function l(e){var t=null,n=Object.keys(e).map(function(t){return e[t]}),a=0;if("date"==n[a].query.attribute.type){var r=new Date(Date.parse(n[a].query.value.replace(/(\d{2})(\d{2})(\d{4})/,"$2/$1/$3")));t=new GQuery(null,new Criteria(n[a].query.attribute.field,n[a].query.condition.key,r))}else t="string"==n[a].query.attribute.type?new GQuery(null,m(n[a].query)):"boolean"==n[a].query.attribute.type?new GQuery(null,new Criteria(n[a].query.attribute.field,n[a].query.condition.key,"true"===n[a].query.value)):"number"==n[a].query.attribute.type?new GQuery(null,new Criteria(n[a].query.attribute.field,n[a].query.condition.key,Number(n[a].query.value))):new GQuery(null,new Criteria(n[a].query.attribute.field,n[a].query.condition.key,n[a].query.value));for(a=2;a<n.length;a+=2){var i=n[a-1],l=n[a].query.value;"date"==n[a].query.attribute.type?l=new Date(Date.parse(l.replace(/(\d{2})(\d{2})(\d{4})/,"$2/$1/$3"))):"boolean"==n[a].query.attribute.type?l="true"==l:"number"==n[a].query.attribute.type&&(l=Number(l)),t=t[i.query.value.toLowerCase()](m(n[a].query,l))}return t}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments[2],r={};if(Object.keys(e).forEach(function(t){e[t].active&&(r[t]=e[t])}),t)return n.ctrl.lastGquery=l(r),a(r,n.ctrl.lastGquery),n.ctrl.lastGquery;var i=[],o=Object.keys(e).filter(function(t){return e[t].active&&e[t].query.value}).map(function(t){var n="obj.".concat(e[t].query.attribute?e[t].query.attribute.field:"*"),a=e[t].query.condition?e[t].query.condition.before:"*",r=e[t].query.value.replace?e[t].query.value.replace(/'/g,"''"):e[t].query.value,l=e[t].query.condition?e[t].query.condition.after:"*";if(e[t].query.attribute)switch(e[t].query.attribute.type){case"date":var o=r.split("");r=""+o[4]+o[5]+o[6]+o[7]+"-"+o[2]+o[3]+"-"+o[0]+o[1];var u="to_timestamp('"+r+" 00:00:00','yyyy/MM/dd HH24:mi:ss')",c="to_timestamp('"+r+" 23:59:59','yyyy/MM/dd HH24:mi:ss')";switch(e[t].query.condition.hql){case" eq ":r=u+" AND "+n+" <= "+c;break;case" ne ":r=u+" OR "+n+" >= "+c;break;case" ld ":r=c;break;case" gd ":r=u}r=r;break;case"enum":r="'"+e[t].query.value.join("','")+"'";break;case"number":case"float":case"money":a=a.replace(/'/g,""),l=l.replace(/'/g,"");break;case"string":case"cpf":case"cnpj":n="upper("+n+")"}return i.push({attribute:e[t].query.attribute,condition:e[t].query.condition,value:e[t].query.value.replace?e[t].query.value.replace(/'/g,"''"):e[t].query.value}),n.concat(a).concat(r).concat(l).replace(/obj.\*/g,"").replace(/\*/g,"")}).filter(function(e,t,n){var a=["OR","AND"];if(-1===a.indexOf(e))return!0;var r=n[t-1],i=n[t+1];return void 0!==r&&-1===a.indexOf(r)&&void 0!==i&&-1===a.indexOf(i)}).join(" ");return"ND"===o.slice(-2)||"OR"===o.slice(-2)?(i.pop(),{hql:o.slice(0,-3),source:JSON.stringify(i)}):o?{hql:o,source:JSON.stringify(i)}:{}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:" ";return f[e]?f[e].validator:angular.noop}var c=/[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}/,s=/[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2}/,d=/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/,p=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:\/?#]+|\[[a-f\d:]+\])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,v=/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/,g=/^[0-9]+$/,y=/^[0-9]+(\.[0-9]{1,2})?$/,f={},b="'âàãáÁÂÀÃéêÉÊíÍóôõÓÔÕüúÜÚÇç'",h="'AAAAAAAAEEEEIIOOOOOOUUUUCC'";f.string={validator:function(e){return"string"==typeof e||e instanceof String},defaultCondition:n(["contains"]),conditions:n(["eq","ne","contains","not_contains","starts_with","ends_with"]),template:'<div class="input-group">\n <input type="text" ng-keyup="goSearch($event)" ng-model="$value.query.value" class="form-control" required autofocus style=" width: 150px;height: 40px;" />\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value) && $value.query.value.length > 0" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value) || !$value.query.value" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.number={validator:function(e){return g.test(e)},defaultCondition:n(["eq"]),conditions:n(["eq","ne","gt","ge","lt","le"]),template:'<div class="input-group">\n <input type="text" ng-keyup="goSearch($event)" ng-model="$value.query.value" class="form-control" gumga-number required style=" width: 150px;height: 40px;" />\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value)" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value)" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.float={validator:function(e){return y.test(e)},defaultCondition:n(["eq"]),conditions:n(["eq","ne","gt","ge","lt","le"]),template:'<div class="input-group">\n <input type="text" ng-keyup="goSearch($event)" ng-model="$value.query.value" class="form-control" gumga-number required style=" width: 150px;height: 40px;"/>\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value)" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value)" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.money={validator:function(e){return y.test(e)},defaultCondition:n(["eq"]),conditions:n(["eq","ne","gt","ge","lt","le"]),template:'<div class="input-group">\n <input ng-keyup="goSearch($event)" type="text" ng-model="$value.query.value" gumga-mask="R$ " class="form-control" gumga-number required style=" width: 150px;height: 40px;" />\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value)" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value)" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.cpf={validator:function(e){return c.test($.toCpf(e))},defaultCondition:n(["eq"]),conditions:n(["eq","ne","contains","not_contains","starts_with","ends_with"]),template:'<div class="input-group">\n <input type="text" ng-keyup="goSearch($event)" ng-model="$value.query.value" gumga-mask="999.999.999.99" class="form-control" required style=" width: 150px;height: 40px;" />\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value) && $value.query.value.length > 0" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value) || !$value.query.value" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.cnpj={validator:function(e){return s.test(e)},defaultCondition:n(["eq"]),conditions:n(["eq","ne","contains","not_contains","starts_with","ends_with"]),template:'<div class="input-group">\n <input type="text" ng-keyup="goSearch($event)" ng-model="$value.query.value" gumga-mask="99.999.999/9999-99" class="form-control" required style=" width: 150px;height: 40px;" />\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value) && $value.query.value.length > 0" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value) || !$value.query.value" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.boolean={validator:function(e){return"true"==e||"false"==e},defaultCondition:n(["is"]),conditions:n(["is"]),template:' <div class="radio"><label><input type="radio" ng-model="$value.query.value" value="true"> {{$value.query.attribute.extraProperties.trueLabel}}</label></div><div class="radio"><label><input type="radio" ng-model="$value.query.value" value="false"> {{$value.query.attribute.extraProperties.falseLabel}} </label></div>'},f.date={validator:function(t){return d.test(e("date")(t,"dd/MM/yyyy"))},defaultCondition:n(["date_eq"]),conditions:n(["date_eq","date_ne","date_lt","date_gt"]),template:'<div class="input-group">\n <input type="text" ng-keyup="goSearch($event)" ng-model="$value.query.value" gumga-mask="99/99/9999" class="form-control" required style=" width: 150px;height: 40px;"/>\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value) && $value.query.value.length > 0" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value) || !$value.query.value" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.select={validator:function(e){return!!e},defaultCondition:n(["eq"]),conditions:n(["eq","ne"]),template:'<select ng-model="$value.query.value" ng-options="d.field as d.label for d in $value.query.attribute.extraProperties.data track by d.field" class="form-control" required /></select>'},f.enum={validator:function(e){return Array.isArray(e)},defaultCondition:n(["in"]),conditions:n(["in"]),template:'<div class="col-md-4" ng-class="{\'row\': $index % 3 == 0}" ng-repeat="d in $value.query.attribute.extraProperties.data"><label><input type="checkbox" ng-checked="$value.query.value.indexOf(d.field) > -1" ng-click="toggleEnum($event, $key, d.field)"></label> {{d.label}}</div>'},f.email={validator:function(e){return"string"==typeof e||e instanceof String},defaultCondition:n(["eq"]),conditions:n(["eq","ne","contains","not_contains","starts_with","ends_with"]),template:'<div class="input-group">\n <input type="text" ng-keyup="goSearch($event)" ng-model="$value.query.value" class="form-control" required style=" width: 150px;height: 40px;" />\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value) && $value.query.value.length > 0" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value) || !$value.query.value" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.url={validator:function(e){return p.test(e)},defaultCondition:n(["eq"]),conditions:n(["eq","ne","contains","not_contains","starts_with","ends_with"]),template:'<div class="input-group">\n <input type="url" ng-keyup="goSearch($event)" ng-model="$value.query.value" class="form-control" required style=" width: 150px;height: 40px;" />\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value) && $value.query.value.length > 0" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value) || !$value.query.value" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'},f.ip={validator:function(e){return v.test(e)},defaultCondition:n(["eq"]),conditions:n(["eq","ne","contains","not_contains","starts_with","ends_with"]),template:'<div class="input-group">\n <input type="text" ng-keyup="goSearch($event)" ng-model="$value.query.value" class="form-control" required style=" width: 150px;height: 40px;" />\n <div class="input-group-addon">\n <i ng-show="validator($value.query.value) && $value.query.value.length > 0" class="glyphicon glyphicon-ok" style="color:green"></i></span>\n <i ng-show="!validator($value.query.value) || !$value.query.value" class="glyphicon glyphicon-remove" style="color:red"></i>\n </div>\n <div class="input-group-addon">\n <button ng-click="callSearch($event, \'btn\')" class="btn btn-default">Buscar</button>\n </div>\n </div>'};var m=function(e,t){var n=new Criteria(e.attribute.field,e.condition.key,void 0==t?e.value:t);return"string"==e.attribute.type&&(n.setFieldFunction("%s"),n.setValueFunction("%s"),e.attribute.ignoreCase&&(n.setFieldFunction(r(n.getFieldFunction())),n.setValueFunction(r(n.getValueFunction()))),e.attribute.translate&&(n.setFieldFunction(i(n.getFieldFunction())),n.setValueFunction(i(n.getValueFunction())))),n},$={toCpf:function(e){return(e+"").replace(/\D/g,"").replace(/(\d{3})(\d)/,"$1.$2").replace(/(\d{3})(\d)/,"$1.$2").replace(/(\d{3})(\d{1,2})$/,"$1-$2")}};return{useType:t,hqlObjectCreator:n,createHql:o,validator:u}}a.$inject=["$filter"],angular.module("gumga.queryfilter.factory.hql",[]).factory("HQLFactory",a)},function(e,t,n){"use strict";function a(){function e(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"NOTHING",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:999;this.STATES=Object.freeze({NOTHING:1,ONLY_ATTRIBUTE:2,ATTRIBUTE_AND_CONDITION:4,EVERYTHING_NEEDED:8,UPDATING_ATTRIBUTE:16,UPDATING_CONDITION:32,UPDATING_VALUE:64}),this.query=e,this.active=t,this.activeStates=this.STATES[n],this.zIndex=a}return e.prototype.addState=function(e){return this.activeStates|=this.STATES[e],this},e.prototype.removeState=function(e){return this.activeStates&=~this.STATES[e],this},e.prototype.isNOTHING=function(){return 0!=(this.activeStates&this.STATES.NOTHING)},e.prototype.isONLY_ATTRIBUTE=function(){return 0!=(this.activeStates&this.STATES.ONLY_ATTRIBUTE)},e.prototype.isATTRIBUTE_AND_CONDITION=function(){return 0!=(this.activeStates&this.STATES.ATTRIBUTE_AND_CONDITION)},e.prototype.isEVERYTHING_NEEDED=function(){return 0!=(this.activeStates&this.STATES.EVERYTHING_NEEDED)},e.prototype.isUPDATING_ATTRIBUTE=function(){return 0!=(this.activeStates&this.STATES.UPDATING_ATTRIBUTE)},e.prototype.isUPDATING_CONDITION=function(){return 0!=(this.activeStates&this.STATES.UPDATING_CONDITION)},e.prototype.isUPDATING_VALUE=function(){return 0!=(this.activeStates&this.STATES.UPDATING_VALUE)},e.prototype.isBeingUpdated=function(){return this.isUPDATING_VALUE()},{create:function(){for(var t=arguments.length,n=Array(t),a=0;a<t;a++)n[a]=arguments[a];return new(Function.prototype.bind.apply(e,[null].concat(n)))}}}a.$inject=[],angular.module("gumga.queryfilter.factory.querymodel",[]).factory("QueryModelFactory",a)},function(e,t,n){"use strict";function a(e,t,n,a,r,i){return{restrict:"E",template:'\n <style>\n .gumga-filter .dropdown-menu > li > a {\n cursor: pointer;\n }\n .gumga-filter .panel-body .input-group-btn {\n border: 1px solid #ccc;\n border-left-width: 2px;\n border-right-width: 2px;\n border-radius: 4px;\n }\n .gumga-filter .panel-body .input-group-btn .btn {\n border-color: transparent;\n border-radius: 4px;\n border: 1px;\n }\n .gumga-filter .panel-body .btn,\n .gumga-filter .panel-body .input-group-btn .btn {\n padding: 3px 6px;\n }\n .gumga-filter-panel {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 12px;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0,0,0,.15);\n border-radius: 4px;\n box-shadow: 0 6px 12px rgba(0,0,0,.175);\n background-clip: padding-box;\n }\n .gumga-filter-panel .dropdown-menu li {\n z-index: 3000;\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 12px;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0,0,0,.15);\n border-radius: 4px;\n box-shadow: 0 6px 12px rgba(0,0,0,.175);\n background:-clip padding-box;\n }\n gumga-filter .panel.heading {\n padding: 5px 10px;\n }\n gumga-filter .form-inline.panel-body .input-group {\n margin-right: 5px;\n }\n gumga-filter .form-inline.panel-body .input-group-btn > button,\n gumga-filter .form-inline.panel-body .input-group-btn > btn-group > button[uib-dropdown-toggle] {\n z-index: 0;\n }\n gumga-filter .form-inline.panel-body .input-group-btn > btn-group > ul[uib-dropdown-menu],\n gumga-filter .form-inline.panel-body .input-group-btn > btn-group > ul[uib-dropdown-menu] > li {\n z-index: 3000;\n }\n gumga-filter .btn-group.dropdown .glyphicon {\n top: 3px;\n }\n gumga-query .row.replace-filter {\n margin-top: .5%;\n }\n </style>\n <div class="gumga-filter panel panel-default" >\n <header class="panel-heading" style="padding: 5px 10px;">\n <div class="row">\n <div class="col-md-8 col-xs-7">\n <h5>Pesquisa avançada <strong ng-if="filterSelectItem"> - {{filterSelectItem.description}}</strong></h5>\n </div>\n <div class="col-md-4 col-xs-5" ng-show="saveQuery">\n <div class="input-group" >\n <input type="text" ng-model="nameSearch" class="form-control" id="_save" ng-show="saveFilterOpen" ng-keyup="saveSearch(nameSearch, $event)" ng-blur="closeInput()">\n <div class="input-group-btn">\n <button class="btn btn-success" ng-show="saveFilterOpen" ng-click="saveSearch(nameSearcht)" ng-disabled="!nameSearch">\n <i class="glyphicon glyphicon-floppy-saved"></i>\n </button>\n <button class="btn btn-default pull-right" type="button" ng-hide="saveFilterOpen" ng-click="showInput()" ng-disabled="!isAnyQueryNotOk()">\n <i class="glyphicon glyphicon-floppy-disk"></i>\n </button>\n <button class="btn btn-default" ng-click="deleteFilter(filterSelectItem.id)" ng-if="filterSelectItem" style="float: right;margin-right: 15px;">\n <i class="glyphicon glyphicon-floppy-remove"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </header>\n <div class="form-inline panel-body">\n <div class="row">\n <div class="col-md-6">\n <h5><strong>Filtrar por:</strong></h5>\n </div>\n <div class="col-md-6">\n <button id="single-button" type="button" class="btn btn-default pull-right" ng-click="clearQuery()" ng-disabled="!isAnyQueryNotOk()" >\n <i class="glyphicon glyphicon-repeat"></i> Limpar filtros\n </button>\n </div>\n </div>\n <div class="input-group" ng-repeat="($key, $value) in controlMap" style="margin-right: 1%;margin-top: 7.5px;z-index: {{$value.zIndex}}" ng-show="$value.active" id="first" >\n <div class="input-group-btn">\n <div class="btn-group" uib-dropdown ng-show="!$value.query.label" is-open="$value.isUPDATING_ATTRIBUTE()" auto-close="disabled">\n <button type="button" style="z-index: 0" class="btn btn-default" uib-dropdown-toggle ng-click="toggleUpdatingAttribute(this)" ng-disabled="$value.isUPDATING_VALUE() || $value.isUPDATING_CONDITION() || (!isAnyQueryNotOk() && $value.isEVERYTHING_NEEDED()) ">\n <span> {{ $value.query.attribute.label || \'Atributo\' }} <i class="glyphicon glyphicon-chevron-down"></i></span>\n </button>\n <ul uib-dropdown-menu style="z-index: 3000" role="menu">\n <li style="z-index: 3000;" role="menuitem" ng-repeat="attribute in _attributes track by $index">\n <a ng-click="addAttribute(attribute, this.$parent, $key)">{{attribute.label}}</a>\n </li>\n </ul>\n </div>\n <div class="btn-group" uib-dropdown is-open="$value.isUPDATING_CONDITION()" ng-show="!$value.query.label" auto-close="disabled">\n <button type="button" class="btn btn-default" uib-dropdown-toggle ng-click="toggleUpdatingCondition(this)" ng-disabled="$value.isUPDATING_VALUE() || $value.isUPDATING_ATTRIBUTE() || (!isAnyQueryNotOk() && $value.isEVERYTHING_NEEDED()) || $value.isNOTHING()">\n <span>{{ $value.query.condition.label || \'Condição\' }} <i class="glyphicon glyphicon-chevron-down"></i></span>\n </button>\n <ul uib-dropdown-menu role="menu" >\n <li role="menuitem" ng-repeat="condition in conditions track by $index">\n <a ng-click="addCondition(condition, this.$parent, $key)">{{condition.label}}</a>\n </li>\n </ul>\n </div>\n <div class="btn-group" id="_btnValue{{$key}}" ng-show="!$value.query.label">\n <button type="button" class="btn btn-default" ng-click="toggleUpdatingValue(this, $key)" ng-disabled="validatonValue($value)" id="_valueLabel{{$key}}">\n <span id="_conditionLabel{{$key}}">{{ getTextQuery($value) }} </span>\n </button>\n <div class="gumga-filter-panel" id="_panelValue{{$key}}"></div>\n </div>\n <div class="btn-group" ng-show="$value.query.label">\n <button type="button" class="btn btn-default" ng-click="updateOperator(this)" ng-disabled="!isAnyQueryNotOk()">\n <span> {{$value.query.label}} </span>\n </button>\n </div>\n <button type="button" \n style="z-index: 0;border-left: 1px solid #ccc; " \n class="btn btn-default" \n ng-click="removeQuery(this, $event, $index)" \n ng-show="!$value.query.label">\n <span class="glyphicon glyphicon-remove"></span>\n </button>\n </div>\n </div>\n <button id="single-button" \n type="button" \n class="btn btn-default" \n ng-click="addQuery()" \n ng-disabled="!isAnyQueryNotOk()" \n style="margin-top: 7.5px;" >\n <span class="glyphicon glyphicon-plus"></span>\n </button>\n </div>\n </div>\n </div>\n </div>',transclude:!0,scope:{search:"&",saveQuery:"&",useGquery:"=?",uid:"@?"},link:function(l,o,u,c,s){function d(t,a,r){a.$value.query.attribute=t,a.conditions=e.useType(t.type).conditions,a.validator=e.useType(t.type).validator,a.$value.removeState("UPDATING_ATTRIBUTE").removeState("NOTHING").addState("ONLY_ATTRIBUTE"),n(function(){a.$value.addState("UPDATING_CONDITION"),a.$value.isEVERYTHING_NEEDED()&&(a.$value.removeState("EVERYTHING_NEEDED"),a.$value.query.value="")})}function p(e){13==e.keyCode&&w(e)}function v(e){}function g(e){e.$value.isUPDATING_ATTRIBUTE()?e.$value.removeState("UPDATING_ATTRIBUTE"):e.$value.addState("UPDATING_ATTRIBUTE")}function y(t,a,r){a.$value.query.condition=t,a.$value.removeState("UPDATING_CONDITION").removeState("ONLY_ATTRIBUTE"),n(function(){a.$value.isEVERYTHING_NEEDED()?l.search({param:e.createHql(l.controlMap,l.useGquery,l.$parent)}):(a.$value.removeState("ATTRIBUTE_AND_CONDITION").addState("UPDATING_VALUE"),f(r,a))})}function f(n,a){var r=U("_panelValue"+n);r.addClass("show"),"enum"==a.$value.query.attribute.type?r.attr("style","width: 500px"):"enum"!==a.$value.query.attribute.type&&r.attr("style")&&r.removeAttr("style"),t(r.html(e.useType(a.$value.query.attribute.type).template).contents())(a)}function b(e){e.$value.isUPDATING_CONDITION()?e.$value.removeState("UPDATING_CONDITION"):e.$value.addState("UPDATING_CONDITION")}function h(e,t){e.$value.isUPDATING_VALUE()?(e.$value.removeState("UPDATING_VALUE"),U("_panelValue"+t).addClass("show")):(e.$value.addState("UPDATING_VALUE"),U("_panelValue"+t).addClass("show"))}function m(){return 0===Object.keys(l.controlMap).filter(function(e){return(!l.controlMap[e].isEVERYTHING_NEEDED()||l.controlMap[e].isUPDATING_ATTRIBUTE()||l.controlMap[e].isUPDATING_CONDITION()||l.controlMap[e].isUPDATING_VALUE())&&l.controlMap[e].active}).filter(function(e){return parseInt(e)%2==0}).length}function $(){return Object.keys(l.controlMap)[Object.keys(l.controlMap).length-1]}function q(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=angular.element(o.find("#first")).scope();if(t)for(;t.$index!=e&&null!=t.$$nextSibling;)t=t.$$nextSibling;return t}function T(e){return e&&(e.isNOTHING()||e.isUPDATING_ATTRIBUTE()||e.isUPDATING_VALUE()||e.isUPDATING_CONDITION()||!(e.isEVERYTHING_NEEDED()||!e.isATTRIBUTE_AND_CONDITION())||!m()&&e.isEVERYTHING_NEEDED())}function A(e,t,n){e.stopPropagation();var a=U("_panelValue"+t).scope();Array.isArray(a.$value.query.value)||(a.$value.query.value=[]);var r=a.$value.query.value.indexOf(n);r>-1?a.$value.query.value.splice(r,1):a.$value.query.value.push(n)}function E(e){var t=void 0;switch(e.getAttribute("type")){case"boolean":t={trueLabel:e.getAttribute("true-label"),falseLabel:e.getAttribute("false-label")};break;case"select":t={data:D[e.getAttribute("data")]};break;case"enum":t={data:D[e.getAttribute("data")]}}return t}function N(){delete l.filterSelectItem,l.controlMap[parseInt($())+1]=r.create({value:"AND",label:"E"},void 0,"EVERYTHING_NEEDED",O--),l.controlMap[parseInt($())+1]=r.create({attribute:{},condition:{},value:""},void 0,"NOTHING",O--),n(function(){return q(parseInt($())).$value.addState("UPDATING_ATTRIBUTE")})}function S(){l.controlMap=[],G()}function I(){n(function(){l.saveFilterOpen=!1},200)}function k(){l.saveFilterOpen=!0,n(function(){return o.find("$_save").focus()})}function x(t,n){n&&13!=n.keyCode||(l.$parent.proxySave(e.createHql(l.controlMap,l.useGquery,l.$parent),l.nameSearch),l.saveFilterOpen=!l.saveFilterOpen,l.nameSearch="")}function F(e,t,a){return delete l.filterSelectItem,e.$$prevSibling.$key||e.$$nextSibling?!e.$$prevSibling.$key&&e.$$nextSibling?(e.$value.active=!1,e.$$nextSibling.$value.active=!1,n(function(){return e.$$nextSibling.$destroy(),e.$destroy()}),void w(t,"remove",a)):void(e.$$prevSibling.$key&&(e.$value.active=!1,e.$$prevSibling.$value.active=!1,n(function(){return e.$$prevSibling.$destroy(),e.$destroy()}),w(t,"remove",a))):(e.$value.query={attribute:{},condition:{},value:""},e.$value.activeStates=0,n(function(){return e.$value.addState("UPDATING_ATTRIBUTE")}),void w(t,"remove",a))}function _(t){if("AND"===t.$value.query.value)return t.$value.query.value="OR",t.$value.query.label="OU",void l.search({param:e.createHql(l.controlMap,l.useGquery,l.$parent)});t.$value.query.value="AND",t.$value.query.label="E",l.search({param:e.createHql(l.controlMap,l.useGquery,l.$parent)})}function w(t,a){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,i=!0,o=Object.keys(l.controlMap).filter(function(e){return l.controlMap[e].isUPDATING_VALUE()})[0],u=void 0;if(t.target.id!="_conditionLabel"+o&&t.target.id!="_valueLabel"+o){if((t.target.id=="_panelValue"+o||function(e,t){for(var n=angular.element(e);0!=n.parent().length;n=n.parent())if(n[0].id=="_panelValue"+t){n=!0;break}return!0===n&&n}(t.target,o))&&(i=!1),l.controlMap[o]&&(u=e.validator(l.controlMap[o].query.attribute.type)),i&&u&&u(l.controlMap[o].query.value)||"keyup"==t.type||"btn"==a){var c=U("_panelValue"+o).scope();n(function(){return c.$value.removeState("UPDATING_VALUE").removeState("ATTRIBUTE_AND_CONDITION").addState("EVERYTHING_NEEDED")}),U("_panelValue"+o).removeClass("show"),l.search({param:e.createHql(l.controlMap,l.useGquery,l.$parent)})}"remove"==a&&n(function(){var t=0==r?{}:e.createHql(l.controlMap,l.useGquery,l.$parent);l.search({param:t})})}}var D=l.$parent.$parent,O=999;if(l._attributes=[],l.controlMap={},l.addCondition=y,l.addQuery=N,l.clearQuery=S,l.closeInput=I,l.removeQuery=F,l.showInput=k,l.saveSearch=x,l.updateOperator=_,l.toggleEnum=A,l.saveQuery=!!u.saveQuery&&l.saveQuery,u.search||console.error('É necessário atribuir uma função para o atributo SEARCH. [search="foo()"]'),l.$on("filter-items",function(t,a){var i=JSON.parse(a.value);l.controlMap={},l.useGquery?n(function(){return l.search({param:i})}):(JSON.parse(i.source).forEach(function(e,t){l.controlMap[t]=t%2==0?r.create(e,!0,"EVERYTHING_NEEDED",O--):r.create({value:e.value,label:"AND"===e.value?"E":"OU"},void 0,"EVERYTHING_NEEDED",O--)}),l.filterSelectItem=a,n(function(){return l.search({param:e.createHql(l.controlMap,l.useGquery,l.$parent)})}))}),l.getTextQuery=function(e){var t="valor";if(e&&e.query&&e.query.attribute){if(e.query.attribute.type&&"select"==e.query.attribute.type&&void 0!=e.query.value&&null!=e.query.value){var n=e.query.attribute.extraProperties.data.filter(function(t){return t.field==e.query.value});if(n.length>0)return n[0].label}t=i("gumgaGenericFilter")(e.query.value?e.query.value.push&&e.query.value.length>0?e.query.value.join(", "):e.query.value:"valor",e.query.attribute.type)}return t},l.$on("openOrCloseFilter"+l.uid,function(e,t){if(!t)return delete l.filterSelectItem,Object.keys(l.controlMap||[]).forEach(function(e){var t=q(e);t&&(t.$value.active=!1,delete l.controlMap[e],n(function(e){return t.$destroy()}))}),void l.search({param:new GQuery});G()}),s(function(t){var n=l.$parent.$parent;[].slice.call(t).forEach(function(t,r){if("ADVANCED-SEARCH-FIELD"===t.nodeName){if(!t.getAttribute("field"))return console.error("É necessário atribuir um valor ao atributo FIELD da tag ADVANCED-SEARCH-FIELD.");var i=t.getAttribute("field"),o=t.getAttribute("type"),u=t.getAttribute("inner-join")?t.getAttribute("inner-join").split(","):[],c=t.getAttribute("left-join")?t.getAttribute("left-join").split(","):[],s=t.getAttribute("label")?a(t.getAttribute("label"))(n):i.charAt(0).toUpperCase().concat(i.slice(1)),d={},p="false"!=t.getAttribute("ignore-case"),v="false"!=t.getAttribute("translate");if(!o)return console.error("É necessário atribuir um valor ao atributo TYPE da tag ADVANCED-SEARCH-FIELD.");if(o=o.toLowerCase().trim()||"",s=s||i.charAt(0).toUpperCase()+i.slice(1),d=E(t),!e.useType(o))return console.error('O tipo "{1}" passado como parâmetro para o ADVANCED-SEARCH-FIELD não é suportado.'.replace("{1}",o));l._attributes.push({field:i,type:o,label:s,extraProperties:d,innerJoin:u,leftJoin:c,ignoreCase:p,translate:v})}})}),l._attributes[0]){var U=function(e){return angular.element(o.find("#"+e))},G=function(e){l.controlMap[0]=r.create({attribute:{},condition:{},value:""},!0,"NOTHING",O--),n(function(e){q().$value.removeState("NOTHING").addState("UPDATING_ATTRIBUTE")})};G();var C=angular.copy(l._attributes[0]);angular.copy(e.useType(C.type).defaultCondition)[0],l.addAttribute=d,l.toggleUpdatingAttribute=g,l.addCondition=y,l.toggleUpdatingCondition=b,l.toggleUpdatingValue=h,l.goSearch=p,l.callSearch=w,l.deleteFilter=v,l.isAnyQueryNotOk=m,l.lastOfControlMap=$,l.getIndexScope=q,l.validatonValue=T,document.addEventListener("click",function(e){w(e)}),document.addEventListener("keyup",function(e){27===e.keyCode&&Object.keys(l.controlMap||[]).forEach(function(e){var t=q(e);t&&t.$value&&8!==t.$value.activeStates&&(t.$$prevSibling&&t.$$prevSibling.$key?(t.$$prevSibling.$value.active=!1,delete l.controlMap[t.$$prevSibling.$key],n(function(){return t.$$prevSibling.$destroy()})):t.$$nextSibling&&t.$$nextSibling.$key?(t.$$nextSibling.$value.active=!1,delete l.controlMap[t.$$nextSibling.$key],n(function(){return t.$$nextSibling.$destroy()})):t.$$prevSibling&&t.$$prevSibling.$key&&t.$$nextSibling.$key&&(t.$$nextSibling.$value.active=!1,delete l.controlMap[t.$$nextSibling.$key],n(function(){return t.$$nextSibling.$destroy()})),t.$value.active=!1,delete l.controlMap[e],n(function(e){return t.$destroy()}))})})}}}}a.$inject=["HQLFactory","$compile","$timeout","$interpolate","QueryModelFactory","$filter"],angular.module("gumga.queryfilter.filter.core",[]).directive("gumgaFilterCore",a)},function(e,t,n){"use strict";function a(e,t,n){return{restrict:"E",template:'\n <div>\n <button class="btn btn-default" ng-click="isOpen = !isOpen ">\n <span class="glyphicon glyphicon-filter"></span>\n </button>\n </div>\n <div id="replace"></div>\n ',transclude:!0,scope:{search:"&",saveQuery:"&",containerId:"@?"},link:function(e,n,a,r,i){e.possibleAdvancedFields=[],e.search=e.search||angular.noop,e.saveQuery=e.saveQuery||angular.noop,e.containerId=e.containerId||"replace",e.proxySave=function(t){e.saveQuery({query:t,name:name})},e.proxySearch=function(t){e.search({param:t})},i(function(n){[].slice.call(n).forEach(function(t){t&&"ADVANCED-SEARCH-FIELD"===t.nodeName&&e.possibleAdvancedFields.push(t.outerHTML)});var r='<gumga-filter-core ng-show="isOpen" search="proxySearch(param)" '+(a.saveQuery?'save-query="saveQuery(query, name)"':"")+">\n "+e.possibleAdvancedFields.reduce(function(e,t){return e+=t},"")+"\n </gumga-filter-core>";angular.element(document.getElementById(e.containerId)).replaceWith(t(r)(e))})}}}a.$inject=["HQLFactory","$compile","$timeout"],angular.module("gumga.queryfilter.filter.directive",[]).directive("gumgaFilter",a)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(0),n(2),n(1);var a=angular.module("gumga.queryfilter",["gumga.queryfilter.query","gumga.queryfilter.filter","gumga.queryfilter.factory"]);t.default=a}]);