UNPKG

gumga-many-to-one-ng

Version:

Gumga Many To One

1 lines 16.4 kB
!function(e){function n(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:a})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=0)}([function(e,n,t){"use strict";var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(){function e(e,n,t,o){function l(l,i,r,u){var d=this,s=void 0,c=void 0;d.$onInit=function(){function p(){return d.displayClear}function m(){return d.displayInfo}function y(){return!!d.disabled||(!d.value||!("object"===a(d.value)))}function f(){return!("object"===a(d.value))}function g(){d.visible="typeahead",d.onDeselect&&d.onDeselect({value:angular.copy(d.value)}),delete d.value}function v(){d.isTypeaheadOpen||document.getElementById("typeahead-"+d.field+"-"+r.value).focus()}function h(){d.visible="typeahead",o(function(){d.value=angular.copy(d.inputMatchValue),v(),delete d.inputMatchValue})}function b(){return d.postMethod&&("string"==typeof s.$$rawModelValue||s.$$rawModelValue instanceof String)&&s.$$rawModelValue.length>0}function $(){if(d.inputMatch){var e=document.getElementById("match-"+d.field+"-"+r.value),n=d.inputMatch.replace(/{/g,"{{").replace(/}/g,"}}").replace(/item/g,"manyToOneCtrl.value"),a='<span style="display: none;" id="match-'+d.field+"-"+r.value+'">'+n+"</span>";angular.element(e).replaceWith(t(a)(l)),o(function(){var e=document.getElementById("match-"+d.field+"-"+r.value);d.inputMatchValue=e.innerHTML,d.visible="inputMatchValue"})}else d.visible="typeahead"}function T(e,n,t,a,o,l){$(),!n.id&&d.authorizeAdd&&d.proxySave(n,o),s.$setValidity("manyToOne",!0),d.ev.onSelect&&d.ev.onSelect({value:n})}function O(){function e(e,n){e.close=function(){return n.close()}}var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments[1];d.isTypeaheadOpen=!0,a.stopImmediatePropagation(),a.preventDefault(),e.$inject=["$scope","$uibModalInstance"];var o='\n <div class="modal-header">\n <h3 class="modal-title">'+d.modalTitle+'</h3>\n </div>\n <div class="modal-body">\n '+function(){return d.modalFields.reduce(function(e,n){return e+='\n <div class="form-group">\n '+("string"==typeof t[n]||t[n]instanceof String?"<label>"+n+"</label>":" ")+"\n "+("string"==typeof t[n]||t[n]instanceof String?'<input type="text" class="form-control" value="'+t[n]+'" disabled />':" ")+"\n </div>"}," ")}()+"\n </div>\n ";n.open({controller:e,template:o})}function C(e,n,t){var a="";if(t){var o=new Date;o.setTime(o.getTime()+24*t*60*60*1e3),a="; expires="+o.toUTCString()}document.cookie=e+"="+(n||"")+a+"; path=/"}function w(e){document.cookie=e+"=; Max-Age=-99999999;"}var x={noValue:"É necessário um atributo value no componente gumgaManyToOne",noField:"É necessário um atributo field no componente gumgaManyToOne",noSearch:"É necessário uma função de busca no componente gumgaManyToOne"},M=["loadingText","onSelect","value","list","searchMethod","field","onNewValueAdded","onValueSelected","onValueVisualizationOpened","onValueVisualizationClosed","tabindex"],V=!1;d.favoriteModel=JSON.parse(function(e){for(var n=e+"=",t=document.cookie.split(";"),a=0;a<t.length;a++){for(var o=t[a];" "==o.charAt(0);)o=o.substring(1,o.length);if(0==o.indexOf(n))return o.substring(n.length,o.length)}return null}(location.href+"-favorite-"+r.name)),!d.value&&d.favoriteModel&&d.activeFavorite&&(d.value=angular.copy(d.favoriteModel)),r.value||console.error(x.noValue),r.field||console.error(x.noField),d.ev={},d.list=d.list||[],d.ev.onNewValueAdded=r.onNewValueAdded?d.onNewValueAdded:angular.noop,d.ev.onSelect=r.onSelect?d.onSelect:angular.noop,d.ev.onValueVisualizationOpened=r.onValueVisualizationOpened?r.onValueVisualizationOpened:angular.noop,d.ev.onValueVisualizationClosed=r.onValueVisualizationClosed?r.onValueVisualizationClosed:angular.noop,d.field=r.field||"",d.modalTitle=r.modalTitle||"Visualizador de Registro",d.modalFields=r.modalFields?r.modalFields.split(","):[d.field],d.postFields=r.postFields?r.postFields.split(","):[d.field],d.displayClear=!d.hasOwnProperty("displayClear")||d.displayClear,d.displayInfo=!d.hasOwnProperty("displayInfo")||d.displayInfo,d.editable=!d.hasOwnProperty("editable")||d.editable,d.async=!d.hasOwnProperty("async")||d.async,d.displayInfoButton=m,d.modelValueIsObject=y,d.disabledDisplayInfo=f,d.displayPlusButton=b,d.displayClearButton=p,d.clearModel=g,d.openInfo=O,d.valueToAdd="",d.afterSelect=T,d.openTypehead=v,d.showTypeheadAndHideMatch=h,d.proxySearch=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return d.async?d.searchMethod({param:e}).then(function(n){if(n.filter(function(n){return n[d.field]==e}).length>0||!d.authorizeAdd)return n;if(e){var t={};return t[d.field]=d.valueToAdd,n.concat(t)}return n}):(e&&(e=e.toLowerCase()),d.list.filter(function(n){return-1!=n[d.field].toLowerCase().indexOf(e)}))},d.proxySave=function(e,t){function a(e,n,t){var a=this;a.object=t,a.cancel=function(e){return n.dismiss("cancel")},a.save=function(e){return n.close(e)}}if(t){d.isTypeaheadOpen=!0;var o={value:function(){return e}};a.$inject=["$scope","$uibModalInstance","value"];var l='\n <div class="modal-header">\n <h3 class="modal-title">'+d.modalTitle+'</h3>\n </div>\n <div class="modal-body">\n <form name="formNew">\n '+function(){return d.postFields.reduce(function(e,n){var t=-1!=n.indexOf(":")?n.trim().substring(0,n.indexOf(":")):n.trim(),a=-1!=n.indexOf(":")?n.trim().substring(n.indexOf(":")+1,n.length):"false";return e+='\n <div class="form-group">\n <label>'+t+'</label>\n <input type="text" class="form-control" '+("required"==a?a:"")+' ng-model="ctrl.object.'+t+'" />\n </div>'}," ")}()+'\n </form>\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-default" ng-click="ctrl.cancel(ctrl.object)">Retornar</button>\n <button type="button" class="btn btn-primary" ng-disabled="!formNew.$valid" ng-click="ctrl.save(ctrl.object)">Salvar</button>\n </div>';n.open({controller:a,template:l,controllerAs:"ctrl",resolve:o}).result.then(function(e){d.postMethod({value:e}).then(function(e){d.value=e.data.data,s.$viewValue=e.data.data})},function(e){delete d.value})}},d.isTypeaheadOpen=!0,u(l,function(e){angular.forEach(e,function(e){var n=angular.element(e)[0];n.nodeName&&"MATCH"===n.nodeName&&(V=!0,d.match=n.innerHTML)})}),d.keyUp=function(e){e.target.value},d.favorite=function(e,n){if(e.stopPropagation(),e.preventDefault(),angular.equals(n,d.favoriteModel))return w(location.href+"-favorite-"+r.name),void delete d.favoriteModel;C(location.href+"-favorite-"+r.name,JSON.stringify(n),999999),d.favoriteModel=n},d.isFavorite=function(e){return angular.equals(e,d.favoriteModel)};var S='\n <style>\n gumga-many-to-one [uib-typeahead-popup].dropdown-menu{\n width: 100%;\n }\n gumga-many-to-one a.result {\n display: flex;\n height: 42px;\n align-items: center;\n }\n gumga-many-to-one a.result > span.str{\n display: flex;\n }\n gumga-many-to-one input{\n color: #999 !important;\n padding-right: 32px;\n font-size: 1.6rem !important;\n }\n gumga-many-to-one button.left-button{\n padding: 0; width: 32px; padding-top: 10px; padding-bottom: 3px;\n }\n gumga-many-to-one input.form-control.ng-valid-many-to-one{\n color: #555 !important;\n }\n gumga-many-to-one i.favorite{\n color: #ccc;\n }\n gumga-many-to-one i.favorite.full{\n color: #d9d90d;\n }\n gumga-many-to-one i.favorite:hover{\n cursor: pointer; \n }\n </style>\n <div style="position: relative;">\n <div style="width: 100%;" ng-class="{\'input-group\': (manyToOneCtrl.displayInfoButton() && manyToOneCtrl.modelValueIsObject()) || manyToOneCtrl.displayClearButton()}">\n <input type="text"\n ng-init="manyToOneCtrl.visible = \'typeahead\'"\n ng-show="manyToOneCtrl.visible == \'typeahead\'"\n id="typeahead-'+d.field+"-"+r.value+'"\n class="form-control gmd inputahead"\n tabindex="'+d.tabSeq+'"\n ng-disabled="manyToOneCtrl.disabled"\n ng-readonly="manyToOneCtrl.readonly"\n ng-model="manyToOneCtrl.value"\n onfocus="this.classList.add(\'focused\')"\n ng-keyup="manyToOneCtrl.keyUp($event)"\n onblur="this.classList.remove(\'focused\')"\n ng-model-options="{ debounce: '+(d.debounce||1e3)+' }"\n uib-typeahead="$value as $value[manyToOneCtrl.field] for $value in manyToOneCtrl.proxySearch($viewValue)"\n typeahead-loading="manyToOneCtrl.typeaheadLoading" '+function(){var e=function(e){return M.filter(function(n){return e==n}).length>0};return Object.keys(r.$attr).filter(function(n){return!e(n)}).reduce(function(e,n){return e+=n+'="'+r[n]+'"'},"")}()+'\n typeahead-template-url="manyToOneTemplate'+d.field+"-"+r.value+'.html"\n typeahead-is-open="manyToOneCtrl.isTypeaheadOpen"\n typeahead-editable="'+d.editable+'"\n typeahead-show-hint="true"\n typeahead-min-length="0"\n typeahead-on-select="manyToOneCtrl.afterSelect($item, $model, $label, $event, \'isNotButton\', manyToOneCtrl.match)"\n typeahead-no-results="noResults"\n autocomplete="off"/>\n <div ng-show="noResults" style="position: absolute; left: 0; width: 100%; top: 34px; background: #FFF; z-index: 999; padding: 15px; border-top: 1px solid #ccc; box-shadow: 0 2px 4px rgba(0,0,0,0.175);">\n {{'+d.messageNoResult+' || \'Nenhum resultado foi encontrado.\'}}\n </div>\n <input type="text" ng-keyup="manyToOneCtrl.showTypeheadAndHideMatch()" ng-model="manyToOneCtrl.inputMatchValue" class="form-control" ng-show="manyToOneCtrl.visible == \'inputMatchValue\'"/>\n <div ng-show="manyToOneCtrl.typeaheadLoading && manyToOneCtrl.loadingText" style="position: absolute; top: 40px;">\n <i class="glyphicon glyphicon-refresh"></i>\n {{manyToOneCtrl.loadingText}}\n </div>\n <span ng-hide="true" id="match-'+d.field+"-"+r.value+'"></span>\n <div class="input-group-btn input-group-btn-icon" style="position: absolute; right: 25px;" ng-show="(manyToOneCtrl.displayInfoButton() && manyToOneCtrl.modelValueIsObject()) || manyToOneCtrl.displayClearButton()">\n <button type="button" style="z-index: 9;" class="left-button btn btn-default gmd" ng-show="!manyToOneCtrl.modelValueIsObject() && manyToOneCtrl.displayClearButton()" ng-click="manyToOneCtrl.clearModel()">\n <i ng-show="manyToOneCtrl.useGumgaLayout()" class="material-icons" style="font-size: 15px;">close</i>\n <i ng-show="!manyToOneCtrl.useGumgaLayout()" class="glyphicon glyphicon-remove" style="font-size: 15px;"></i>\n </button>\n <button type="button" class="btn btn-default gmd"\n ng-show="manyToOneCtrl.modelValueIsObject() && manyToOneCtrl.displayClearButton()"\n style="padding-bottom: 7px;"\n ng-click="manyToOneCtrl.openTypehead()">\n <span class="caret"></span> \n </button>\n <button type="button" class="btn btn-default gmd" ng-show="!manyToOneCtrl.modelValueIsObject() && manyToOneCtrl.displayInfoButton()" ng-disabled="manyToOneCtrl.disabledDisplayInfo()" ng-click="manyToOneCtrl.openInfo(manyToOneCtrl.value, $event)">\n <span class="glyphicon glyphicon-info-sign"></span>\n </button>\n </div>\n </div>\n </div>',I=V?"<span>"+d.match+"</span>":'<span ng-bind-html="match.model.'+d.field+' | uibTypeaheadHighlight:query"></span>',F='\n <a class="col-md-12 result gmd" style="white-space: normal;">\n <span class="col-md-10 str" ng-click="manyToOneCtrl.select()">\n '+I+'\n <span ng-show="$parent.$parent.$parent.$parent.manyToOneCtrl.valueToAdd == match.label && $parent.$parent.$parent.$parent.manyToOneCtrl.valueToAdd.length > 0 && !match.model.id && !!$parent.$parent.$parent.$parent.manyToOneCtrl.authorizeAdd">(novo)</span><br>\n </span>\n <span class="col-md-2">\n <span class="icon text-right" ng-if="'+d.displayInfo+'" ng-click="$parent.$parent.$parent.$parent.manyToOneCtrl.openInfo(match.model, $event)" ng-hide="$parent.$parent.$parent.$parent.manyToOneCtrl.valueToAdd == match.label && !match.label.id">\n <span class="glyphicon glyphicon-info-sign"></span>\n </span>\n <span style="float: right;" ng-show="$parent.$parent.$parent.$parent.manyToOneCtrl.activeFavorite">\n <i ng-show="!$parent.$parent.$parent.$parent.manyToOneCtrl.isFavorite(match.model)" \n title="Favoritar"\n ng-click="$parent.$parent.$parent.$parent.manyToOneCtrl.favorite($event, match.model)" \n class="material-icons favorite">star_border</i>\n\n <i ng-show="$parent.$parent.$parent.$parent.manyToOneCtrl.isFavorite(match.model)"\n title="Favoritar" \n ng-click="$parent.$parent.$parent.$parent.manyToOneCtrl.favorite($event, match.model)" \n class="material-icons favorite full">star</i>\n </span>\n </span>\n <div class="clearfix"></div>\n </a>\n ';e.put("manyToOneTemplate"+d.field+"-"+r.value+".html",F);for(var A=angular.element(S),j=A.find("input"),k=i.parent();"FORM"!=k[0].nodeName;)k=k.parent();var z=l.$parent[k.attr("name")];i.append(t(A)(l)),s=j.controller("ngModel"),c=angular.copy(s),z.$addControl(s),s.$viewChangeListeners.push(function(){}),s.$validators.manyToOne=function(e,n){return!e||!("string"==typeof e||e instanceof String)},d.useGumgaLayout=function(){try{return!!angular.module("gumga.layout")}catch(e){return!1}},y()||$(),l.$watch(function(){return s.$$rawModelValue},function(e){""==s.$$rawModelValue?(delete s.$$rawModelValue,delete d.value):d.valueToAdd=s.$$rawModelValue})}}return l.$inject=["$scope","$element","$attrs","$transclude"],{restrict:"E",replace:!0,transclude:!0,scope:{value:"=",loadingText:"@?",inputMatch:"@?",searchMethod:"&",postMethod:"&?",onSelect:"&?",activeFavorite:"=?",onDeselect:"&?",list:"=?",authorizeAdd:"=?",disabled:"=?",readonly:"=?",displayInfo:"=?",displayClear:"=?",editable:"=?",tabSeq:"=?",async:"=?",debounce:"@?"},controllerAs:"manyToOneCtrl",bindToController:!0,controller:l}}e.$inject=["$templateCache","$uibModal","$compile","$timeout"],angular.module("gumga.manytoone",["ui.bootstrap"]).directive("gumgaManyToOne",e)}()}]);