gumga-many-to-one-ng
Version:
Gumga Many To One
1 lines • 12.9 kB
JavaScript
!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,d){var u=this,s=void 0,c=void 0;u.$onInit=function(){function p(){return u.displayClear}function y(){return u.displayInfo}function m(){return!!u.disabled||(!u.value||!("object"===a(u.value)))}function f(){return!("object"===a(u.value))}function h(){u.visible="typeahead",u.onDeselect&&u.onDeselect({value:angular.copy(u.value)}),delete u.value}function v(){u.isTypeaheadOpen||document.getElementById("typeahead-"+u.field+"-"+r.value).focus()}function g(){u.visible="typeahead",o(function(){u.value=angular.copy(u.inputMatchValue),v(),delete u.inputMatchValue})}function b(){return u.postMethod&&("string"==typeof s.$$rawModelValue||s.$$rawModelValue instanceof String)&&s.$$rawModelValue.length>0}function T(){if(u.inputMatch){var e=document.getElementById("match-"+u.field+"-"+r.value),n=u.inputMatch.replace(/{/g,"{{").replace(/}/g,"}}").replace(/item/g,"manyToOneCtrl.value"),a='<span style="display: none;" id="match-'+u.field+"-"+r.value+'">'+n+"</span>";angular.element(e).replaceWith(t(a)(l)),o(function(){var e=document.getElementById("match-"+u.field+"-"+r.value);u.inputMatchValue=e.innerHTML,u.visible="inputMatchValue"})}else u.visible="typeahead"}function O(e,n,t,a,o,l){T(),!n.id&&u.authorizeAdd&&u.proxySave(n,o),u.ev.onSelect&&u.ev.onSelect({value:n})}function $(){function e(e,n){e.close=function(){return n.close()}}var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments[1];u.isTypeaheadOpen=!0,a.stopImmediatePropagation(),a.preventDefault(),e.$inject=["$scope","$uibModalInstance"];var o='\n <div class="modal-header">\n <h3 class="modal-title">'+u.modalTitle+'</h3>\n </div>\n <div class="modal-body">\n '+function(){return u.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})}var C={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"},V=["loadingText","onSelect","value","list","searchMethod","field","onNewValueAdded","onValueSelected","onValueVisualizationOpened","onValueVisualizationClosed","tabindex"],w=!1;r.value||console.error(C.noValue),r.field||console.error(C.noField),u.ev={},u.list=u.list||[],u.ev.onNewValueAdded=r.onNewValueAdded?u.onNewValueAdded:angular.noop,u.ev.onSelect=r.onSelect?u.onSelect:angular.noop,u.ev.onValueVisualizationOpened=r.onValueVisualizationOpened?r.onValueVisualizationOpened:angular.noop,u.ev.onValueVisualizationClosed=r.onValueVisualizationClosed?r.onValueVisualizationClosed:angular.noop,u.field=r.field||"",u.modalTitle=r.modalTitle||"Visualizador de Registro",u.modalFields=r.modalFields?r.modalFields.split(","):[u.field],u.postFields=r.postFields?r.postFields.split(","):[u.field],u.displayClear=!u.hasOwnProperty("displayClear")||u.displayClear,u.displayInfo=!u.hasOwnProperty("displayInfo")||u.displayInfo,u.editable=!u.hasOwnProperty("editable")||u.editable,u.async=!u.hasOwnProperty("async")||u.async,u.displayInfoButton=y,u.modelValueIsObject=m,u.disabledDisplayInfo=f,u.displayPlusButton=b,u.displayClearButton=p,u.clearModel=h,u.openInfo=$,u.valueToAdd="",u.afterSelect=O,u.openTypehead=v,u.showTypeheadAndHideMatch=g,u.proxySearch=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return u.async?u.searchMethod({param:e}).then(function(n){if(n.filter(function(n){return n[u.field]==e}).length>0||!u.authorizeAdd)return n;var t={};return t[u.field]=u.valueToAdd,n.concat(t)}):(e&&(e=e.toLowerCase()),u.list.filter(function(n){return-1!=n[u.field].toLowerCase().indexOf(e)}))},u.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){u.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">'+u.modalTitle+'</h3>\n </div>\n <div class="modal-body">\n '+function(){return u.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:l,controllerAs:"ctrl",resolve:o}).result.then(function(e){u.postMethod({value:e}).then(function(e){u.value=e.data.data,s.$viewValue=e.data.data})},function(e){delete u.value})}},u.isTypeaheadOpen=!0,d(l,function(e){angular.forEach(e,function(e){var n=angular.element(e)[0];n.nodeName&&"MATCH"===n.nodeName&&(w=!0,u.match=n.innerHTML)})});var M='\n <style>\n gumga-many-to-one [uib-typeahead-popup].dropdown-menu{\n width: 100%;\n }\n </style>\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-'+u.field+"-"+r.value+'"\n class="form-control gmd inputahead"\n tabindex="'+u.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 ng-model-options="{ debounce: '+(u.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 V.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'+u.field+"-"+r.value+'.html"\n typeahead-is-open="manyToOneCtrl.isTypeaheadOpen"\n typeahead-editable="'+u.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 {{'+u.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-'+u.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>',x=w?"<span>"+u.match+"</span>":'<span ng-bind-html="match.model.'+u.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 '+x+'\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="'+u.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>\n ';e.put("manyToOneTemplate"+u.field+"-"+r.value+".html",I);for(var S=angular.element(M),j=S.find("input"),A=i.parent();"FORM"!=A[0].nodeName;)A=A.parent();var z=l.$parent[A.attr("name")];i.append(t(S)(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)},m()||T(),l.$watch(function(){return s.$$rawModelValue},function(e){""==s.$$rawModelValue?(delete s.$$rawModelValue,delete u.value):u.valueToAdd=s.$$rawModelValue})}}return l.$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:"=?",debounce:"@?"},controllerAs:"manyToOneCtrl",bindToController:!0,controller:l}}e.$inject=["$templateCache","$uibModal","$compile","$timeout"],angular.module("gumga.manytoone",["ui.bootstrap"]).directive("gumgaManyToOne",e)}()}]);