gumga-query-filter-ng
Version:
Gumga Query Filter
1 lines • 47.3 kB
JavaScript
!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){function r(r,i,l,o){function u(){var e='<gumga-filter-core ng-show="openFilter" use-gquery="'+l.useGquery+'" is-open="true" search="ctrl.proxySearch(param)" '+(l.saveQuery?'save-query="saveQuery(query, name)"':"")+'is-query="true">'+v.possibleAdvancedFields.reduce(function(e,t){return e+=t},"")+"</gumga-filter-core>";angular.element(document.getElementById(v.containerAdvanced)).replaceWith(n(e)(r))}function c(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(v.mapFields).filter(function(e){return!!v.mapFields[e].checkbox}).reduce(function(e,t){return e+=t.concat(",")},"").slice(0,-1);if(0!==a.length)if(v.useGquery){var r=new GQuery;a=a.split(",");var i=[],o=[],u=Object.keys(v.mapFields).filter(function(e){return!!v.mapFields[e].checkbox});u.map(function(e){return v.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==o.indexOf(e)&&o.push(e)})}),a.forEach(function(t,n){var a=new Criteria(t,s(t),void 0==e||null==e?"":e);"number"==v.mapFields[t].type?a=new Criteria(t,s(t),void 0==e||null==e?0:Number(e)):"date"==v.mapFields[t].type?a=new Criteria(t,s(t),void 0==e||null==e?new Date:e):"string"==v.mapFields[t].type&&(a.setFieldFunction("lower(%s)"),a.setValueFunction("lower(%s)")),r=0==n?new GQuery(a):r.or(a)}),i.forEach(function(e){r.join(new Join(e,JoinType.INNER))}),o.forEach(function(e){r.join(new Join(e,JoinType.LEFT))}),l.lastGquery&&(v.lastGquery=angular.copy(r)),v.search({param:r})}else v.search({field:a,param:e})}}function s(e){return"string"==v.mapFields[e].type?ComparisonOperator.CONTAINS:ComparisonOperator.EQUAL}function d(t){return e.when(v.savedFilters({page:location.hash}))}function p(e,n,a,i){t(function(){return v.searchField="",r.$broadcast("filter-items",e)})}var v=this,g=function(e){return!!l[e]};v.mapFields={},v.possibleAdvancedFields=[],g("search")||console.error('É necessário passar uma função para o atributo "search". [search="foo(field, param)"]'),o(function(e){var t=!1,n=r.$parent;if([].slice.call(e).forEach(function(e){if(e&&"ADVANCED-SEARCH-FIELD"===e.nodeName&&v.possibleAdvancedFields.push(e.outerHTML),e&&"SEARCH-FIELD"===e.nodeName){var i=angular.element(e),l=i.attr("field")?i.attr("field"):"",o=i.attr("type")?i.attr("type"):"string",u=!!r.$eval(i.attr("select")),c=i.attr("label")?a(i.attr("label"))(n):l.charAt(0).toUpperCase().concat(l.slice(1)),s=i.attr("inner-join")?i.attr("inner-join").split(","):[],d=i.attr("left-join")?i.attr("left-join").split(","):[];l||console.error('É necessário um parâmetro field na tag search-field.[<search-field field="foo"></search-field>]'),u&&(t=!0),v.mapFields[l]={checkbox:u,label:c,field:l,type:o,innerJoin:s,leftJoin:d}}}),!t){for(var i in v.mapFields)break;i&&(v.mapFields[i].checkbox=!0)}}),v.$onInit=function(){v.compileFilter=u,v.doSearch=c,v.proxyFn=d,v.filterSelect=p,v.advancedSearch=g("advancedSearch")?v.advancedSearch:null,v.containerAdvanced=g("containerAdvanced")?v.containerAdvanced:"replaceFilter",v.savedFilters=g("savedFilters")?v.savedFilters:angular.noop,v.searchText=g("searchText")?l.searchText:" ",v.proxySearch=function(e){return v.advancedSearch({param:e})},v.hasQuerySaved=!!l.savedFilters,r.proxySave=function(e,t){return v.saveQuery({query:e,name:t})},v.advancedSearch&&v.compileFilter()};var y=function(e){switch(e){case"string":return"text";case"number":return"number";case"date":return"date";default:return"text"}};v.getInputType=function(){var e=Object.keys(v.mapFields).filter(function(e){return!!v.mapFields[e].checkbox});0==e.length&&(v.searchSimpleType="text");var t=v.mapFields[e[0]]&&v.mapFields[e[0]].type?v.mapFields[e[0]].type:"string";return v.searchSimpleType=y(t),v.searchSimpleType},r.$watch("openFilter",function(e){void 0!==e&&r.$broadcast("openOrCloseFilter",e)}),v.getActivesFields=function(){return Object.keys(v.mapFields).filter(function(e){return!!v.mapFields[e].checkbox})},v.isDisabled=function(e){var t=v.getActivesFields();if(v.mapFields[e]&&v.mapFields[e].type){return t.filter(function(t){return v.mapFields[t].type!=v.mapFields[e].type}).length>0}},v.checkFields=function(e,t){var n=v.getActivesFields();if(v.mapFields[t]&&v.mapFields[t].type&&y(v.mapFields[t].type)!=v.searchSimpleType&&delete v.searchField,v.mapFields[t]&&v.mapFields[t].type){n.filter(function(e){return v.mapFields[e].type!=v.mapFields[t].type}).length>0&&(v.mapFields[t].checkbox=!1)}e.stopPropagation()},v.useGumgaDate=function(){try{return!!angular.module("gumga.date")}catch(e){return!1}}}return r.$inject=["$scope","$element","$attrs","$transclude"],{restrict:"E",scope:{search:"&",advancedSearch:"&?",containerAdvanced:"@?",savedFilters:"&?",saveQuery:"&?",useGquery:"=?",lastGquery:"=?"},bindToController:!0,transclude:!0,controllerAs:"ctrl",controller:r,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" 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)">\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"],angular.module("gumga.queryfilter.query",[]).directive("gumgaQuery",a)},function(e,t,n){"use strict";function a(e){function t(e){return g[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.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){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,y(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()](y(n[a].query,l))}return t}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments[2];if(t)return n.ctrl.lastGquery=r(e),a(e,n.ctrl.lastGquery),n.ctrl.lastGquery;var i=[],l=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"===l.slice(-2)||"OR"===l.slice(-2)?(i.pop(),{hql:l.slice(0,-3),source:JSON.stringify(i)}):l?{hql:l,source:JSON.stringify(i)}:{}}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:" ";return g[e]?g[e].validator:angular.noop}var o=/[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}/,u=/[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2}/,c=/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/,s=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:\/?#]+|\[[a-f\d:]+\])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,d=/(?:[0-9]{1,3}\.){3}[0-9]{1,3}/,p=/^[0-9]+$/,v=/^[0-9]+(\.[0-9]{1,2})?$/,g={};g.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>'},g.number={validator:function(e){return p.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>'},g.float={validator:function(e){return v.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>'},g.money={validator:function(e){return v.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>'},g.cpf={validator:function(e){return o.test(f.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>'},g.cnpj={validator:function(e){return u.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>'},g.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>'},g.date={validator:function(t){return c.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>'},g.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>'},g.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>'},g.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>'},g.url={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="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>'},g.ip={validator:function(e){return d.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 y=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("lower(%s)"),n.setValueFunction("lower(%s)")),n},f={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:i,validator:l}}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" style="z-index: 0;border-left: 1px solid #ccc; " class="btn btn-default" ng-click="removeQuery(this, $event, $index)" ng-show="!$value.query.label" ng-disabled="!$value.isEVERYTHING_NEEDED() || $value.isUPDATING_VALUE() ||(!isAnyQueryNotOk() && $value.isEVERYTHING_NEEDED()) ">\n <span class="glyphicon glyphicon-remove"></span>\n </button>\n </div>\n </div>\n <button id="single-button" type="button" class="btn btn-default" ng-click="addQuery()" ng-disabled="!isAnyQueryNotOk()" 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:"=?"},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()}).filter(function(e){return parseInt(e)%2==0}).length}function $(){return Object.keys(l.controlMap)[Object.keys(l.controlMap).length-1]}function q(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=angular.element(document.getElementById("first")).scope();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 E(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 A(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:O[e.getAttribute("data")]};break;case"enum":t={data:O[e.getAttribute("data")]}}return t}function N(){delete l.filterSelectItem,l.controlMap[parseInt($())+1]=r.create({value:"AND",label:"E"},void 0,"EVERYTHING_NEEDED",F--),l.controlMap[parseInt($())+1]=r.create({attribute:{},condition:{},value:""},void 0,"NOTHING",F--),n(function(){return q(parseInt($())).$value.addState("UPDATING_ATTRIBUTE")})}function I(){l.controlMap=[],G()}function S(){n(function(){l.saveFilterOpen=!1},200)}function k(){l.saveFilterOpen=!0,n(function(){return document.getElementById("_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 _(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 D(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)})}if("remove"==a){var s=0==r?{}:e.createHql(l.controlMap,l.useGquery,l.$parent);l.search({param:s})}}}var O=l.$parent.$parent,F=999;if(l._attributes=[],l.controlMap={},l.addCondition=y,l.addQuery=N,l.clearQuery=I,l.closeInput=S,l.removeQuery=_,l.showInput=k,l.saveSearch=x,l.updateOperator=D,l.toggleEnum=E,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",F--):r.create({value:e.value,label:"AND"===e.value?"E":"OU"},void 0,"EVERYTHING_NEEDED",F--)}),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",function(e,t){if(!t)return delete l.filterSelectItem,Object.keys(l.controlMap).forEach(function(e){var t=q(e);t.$value.active=!1,delete l.controlMap[e],n(function(e){return t.$destroy()})}),void l.search({param:{}});l.controlMap[0]||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={};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=A(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})}})}),l._attributes[0]){var U=function(e){return angular.element(document.getElementById(e))},G=function(e){l.controlMap[0]=r.create({attribute:{},condition:{},value:""},!0,"NOTHING",F--),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);8!==t.$value.activeStates&&(t.$$prevSibling.$key?(t.$$prevSibling.$value.active=!1,delete l.controlMap[t.$$prevSibling.$key],n(function(){return t.$$prevSibling.$destroy()})):t.$$nextSibling.$key?(t.$$nextSibling.$value.active=!1,delete l.controlMap[t.$$nextSibling.$key],n(function(){return t.$$nextSibling.$destroy()})):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}]);