UNPKG

gumga-many-to-one-ng

Version:

Gumga Many To One

1 lines 12 kB
!function(e){function n(a){if(t[a])return t[a].exports;var l=t[a]={i:a,l:!1,exports:{}};return e[a].call(l.exports,l,l.exports,n),l.l=!0,l.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,l){function o(o,i,r,d){function u(){return T.displayClear}function s(){return T.displayInfo}function c(){return!!T.disabled||(!T.value||!("object"===a(T.value)))}function p(){return!("object"===a(T.value))}function y(){T.visible="typeahead",T.onDeselect&&T.onDeselect({value:angular.copy(T.value)}),delete T.value}function m(){T.isTypeaheadOpen||document.getElementById("typeahead-"+T.field+"-"+r.value).focus()}function f(){T.visible="typeahead",l(function(){T.value=angular.copy(T.inputMatchValue),m(),delete T.inputMatchValue})}function h(){return T.postMethod&&("string"==typeof O.$$rawModelValue||O.$$rawModelValue instanceof String)&&O.$$rawModelValue.length>0}function v(){if(T.inputMatch){var e=document.getElementById("match-"+T.field+"-"+r.value),n=T.inputMatch.replace(/{/g,"{{").replace(/}/g,"}}").replace(/item/g,"manyToOneCtrl.value"),a='<span style="display: none;" id="match-'+T.field+"-"+r.value+'">'+n+"</span>";angular.element(e).replaceWith(t(a)(o)),l(function(){var e=document.getElementById("match-"+T.field+"-"+r.value);T.inputMatchValue=e.innerHTML,T.visible="inputMatchValue"})}else T.visible="typeahead"}function g(e,n,t,a,l,o){v(),!n.id&&T.authorizeAdd&&T.proxySave(n,l),T.ev.onSelect&&T.ev.onSelect({value:n})}function b(){function e(e,n){e.close=function(){return n.close()}}var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments[1];T.isTypeaheadOpen=!0,a.stopImmediatePropagation(),a.preventDefault(),e.$inject=["$scope","$uibModalInstance"];var l='\n <div class="modal-header">\n <h3 class="modal-title">'+T.modalTitle+'</h3>\n </div>\n <div class="modal-body">\n '+function(){return T.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:l})}var T=this,O=void 0,$={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"},C=["loadingText","onSelect","value","list","searchMethod","field","onNewValueAdded","onValueSelected","onValueVisualizationOpened","onValueVisualizationClosed","tabindex"],V=!1;r.value||console.error($.noValue),r.field||console.error($.noField),T.ev={},T.list=T.list||[],T.ev.onNewValueAdded=r.onNewValueAdded?T.onNewValueAdded:angular.noop,T.ev.onSelect=r.onSelect?T.onSelect:angular.noop,T.ev.onValueVisualizationOpened=r.onValueVisualizationOpened?r.onValueVisualizationOpened:angular.noop,T.ev.onValueVisualizationClosed=r.onValueVisualizationClosed?r.onValueVisualizationClosed:angular.noop,T.field=r.field||"",T.modalTitle=r.modalTitle||"Visualizador de Registro",T.modalFields=r.modalFields?r.modalFields.split(","):[T.field],T.postFields=r.postFields?r.postFields.split(","):[T.field],T.displayClear=!T.hasOwnProperty("displayClear")||T.displayClear,T.displayInfo=!T.hasOwnProperty("displayInfo")||T.displayInfo,T.editable=!T.hasOwnProperty("editable")||T.editable,T.async=!T.hasOwnProperty("async")||T.async,T.displayInfoButton=s,T.modelValueIsObject=c,T.disabledDisplayInfo=p,T.displayPlusButton=h,T.displayClearButton=u,T.clearModel=y,T.openInfo=b,T.valueToAdd="",T.afterSelect=g,T.openTypehead=m,T.showTypeheadAndHideMatch=f,T.proxySearch=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return T.async?T.searchMethod({param:e}).then(function(n){if(n.filter(function(n){return n[T.field]==e}).length>0||!T.authorizeAdd)return n;var t={};return t[T.field]=T.valueToAdd,n.concat(t)}):(e&&(e=e.toLowerCase()),T.list.filter(function(n){return-1!=n[T.field].toLowerCase().indexOf(e)}))},T.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){T.isTypeaheadOpen=!0;var l={value:function(){return e}};a.$inject=["$scope","$uibModalInstance","value"];var o='\n <div class="modal-header">\n <h3 class="modal-title">'+T.modalTitle+'</h3>\n </div>\n <div class="modal-body">\n '+function(){return T.postFields.reduce(function(e,n){return e+='\n <div class="form-group">\n <label>'+n+'</label>\n <input type="text" class="form-control" ng-model="ctrl.object.'+n+'" />\n </div>'}," ")}()+'\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-click="ctrl.save(ctrl.object)">Salvar</button>\n </div>';n.open({controller:a,template:o,controllerAs:"ctrl",resolve:l}).result.then(function(e){T.postMethod({value:e}).then(function(e){T.value=e.data.data,O.$viewValue=e.data.data})},function(e){delete T.value})}},T.isTypeaheadOpen=!0,d(o,function(e){angular.forEach(e,function(e){var n=angular.element(e)[0];n.nodeName&&"MATCH"===n.nodeName&&(V=!0,T.match=n.innerHTML)})});var M='\n <div>\n <div 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-'+T.field+"-"+r.value+'"\n class="form-control gmd inputahead"\n tabindex="'+T.tabSeq+'"\n ng-disabled="manyToOneCtrl.disabled"\n ng-readonly="manyToOneCtrl.readonly"\n ng-model="manyToOneCtrl.value"\n onfocus="this.classList.add(\'focused\')"\n onblur="this.classList.remove(\'focused\')"\n ng-trim="true"\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 C.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'+T.field+"-"+r.value+'.html"\n typeahead-is-open="manyToOneCtrl.isTypeaheadOpen"\n typeahead-editable="'+T.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 autocomplete="off"/>\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-'+T.field+"-"+r.value+'"></span>\n <div class="input-group-btn input-group-btn-icon" ng-show="(manyToOneCtrl.displayInfoButton() && manyToOneCtrl.modelValueIsObject()) || manyToOneCtrl.displayClearButton()">\n <button type="button" class="btn btn-default gmd" ng-show="!manyToOneCtrl.modelValueIsObject() && manyToOneCtrl.displayClearButton()" ng-click="manyToOneCtrl.clearModel()">\n <span class="glyphicon glyphicon-remove"></span>\n </button>\n <button type="button" class="btn btn-default gmd"\n ng-show="manyToOneCtrl.modelValueIsObject() && manyToOneCtrl.displayClearButton()"\n ng-click="manyToOneCtrl.openTypehead()">\n <span class="{{!manyToOneCtrl.isTypeaheadOpen ? \'glyphicon glyphicon-chevron-down\' : \'glyphicon glyphicon-chevron-up\'}}"></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>',w=V?"<span>"+T.match+"</span>":'<span ng-bind-html="match.model.'+T.field+' | uibTypeaheadHighlight:query"></span>',I='\n <a class="col-md-12 result gmd" style="white-space: normal;">\n <span class="col-md-10 str" ng-click="manyToOneCtrl.select()">\n '+w+'\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="'+T.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>\n <div class="clearfix"></div>\n </a>';e.put("manyToOneTemplate"+T.field+"-"+r.value+".html",I);for(var S=angular.element(M),x=S.find("input"),j=i.parent();"FORM"!=j[0].nodeName;)j=j.parent();var A=o.$parent[j.attr("name")];i.append(t(S)(o)),O=x.controller("ngModel"),angular.copy(O),A.$addControl(O),O.$viewChangeListeners.push(function(){}),O.$validators.manyToOne=function(e,n){return!e||!("string"==typeof e||e instanceof String)},c()||v(),o.$watch(function(){return O.$$rawModelValue},function(e){""==O.$$rawModelValue?(delete O.$$rawModelValue,delete T.value):T.valueToAdd=O.$$rawModelValue})}return o.$inject=["$scope","$element","$attrs","$transclude"],{restrict:"E",replace:!0,transclude:!0,scope:{value:"=",loadingText:"@?",inputMatch:"@?",searchMethod:"&",postMethod:"&?",onSelect:"&?",onDeselect:"&?",list:"=?",authorizeAdd:"=?",disabled:"=?",readonly:"=?",displayInfo:"=?",displayClear:"=?",editable:"=?",tabSeq:"=?",async:"=?"},controllerAs:"manyToOneCtrl",bindToController:!0,controller:o}}e.$inject=["$templateCache","$uibModal","$compile","$timeout"],angular.module("gumga.manytoone",["ui.bootstrap"]).directive("gumgaManyToOne",e)}()}]);