UNPKG

gumga-many-to-one-ng

Version:

Gumga Many To One

6 lines (4 loc) 14.6 kB
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ "use strict";var _typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return void 0===obj?"undefined":_typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":void 0===obj?"undefined":_typeof2(obj)};!function(){function ManyToOne($templateCache,$uibModal,$compile,$timeout){function controller($scope,$element,$attrs,$transclude){function displayClearButton(){return manyToOneCtrl.displayClear}function displayInfoButton(){return manyToOneCtrl.displayInfo}function modelValueIsObject(){if(manyToOneCtrl.disabled)return!0;if(!manyToOneCtrl.value)return!0;return!("object"===_typeof(manyToOneCtrl.value))}function disabledDisplayInfo(){return!("object"===_typeof(manyToOneCtrl.value))}function clearModel(){manyToOneCtrl.visible="typeahead",delete manyToOneCtrl.value}function openTypehead(){if(manyToOneCtrl.isTypeaheadOpen)return;document.getElementById("typeahead-"+manyToOneCtrl.field+"-"+$attrs.value).focus()}function showTypeheadAndHideMatch(){manyToOneCtrl.visible="typeahead",$timeout(function(){manyToOneCtrl.value=angular.copy(manyToOneCtrl.inputMatchValue),openTypehead(),delete manyToOneCtrl.inputMatchValue})}function displayPlusButton(){return manyToOneCtrl.postMethod&&("string"==typeof ngModelCtrl.$$rawModelValue||ngModelCtrl.$$rawModelValue instanceof String)&&ngModelCtrl.$$rawModelValue.length>0}function handlingInputVisible(){if(manyToOneCtrl.inputMatch){var span=document.getElementById("match-"+manyToOneCtrl.field+"-"+$attrs.value),inputMatch=manyToOneCtrl.inputMatch.replace(/{/g,"{{").replace(/}/g,"}}").replace(/item/g,"manyToOneCtrl.value"),update='<span style="display: none;" id="match-'+manyToOneCtrl.field+"-"+$attrs.value+'">'+inputMatch+"</span>";angular.element(span).replaceWith($compile(update)($scope)),$timeout(function(){var content=document.getElementById("match-"+manyToOneCtrl.field+"-"+$attrs.value);manyToOneCtrl.inputMatchValue=content.innerHTML,manyToOneCtrl.visible="inputMatchValue"})}else manyToOneCtrl.visible="typeahead"}function afterSelect($item,$model,$label,$event,isBtn,match){handlingInputVisible(),$model.id||manyToOneCtrl.proxySave($model,isBtn),manyToOneCtrl.ev.onSelect&&manyToOneCtrl.ev.onSelect({value:$model})}function openInfo(){function controller($scope,$uibModalInstance){$scope.close=function(){return $uibModalInstance.close()}}var object=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},$event=arguments[1];manyToOneCtrl.isTypeaheadOpen=!0,$event.stopImmediatePropagation(),$event.preventDefault(),controller.$inject=["$scope","$uibModalInstance"];var template='\n <div class="modal-header">\n <h3 class="modal-title">'+manyToOneCtrl.modalTitle+'</h3>\n </div>\n <div class="modal-body">\n '+function mountModalBody(){return manyToOneCtrl.modalFields.reduce(function(prev,next){return prev+='\n <div class="form-group">\n '+("string"==typeof object[next]||object[next]instanceof String?"<label>"+next+"</label>":" ")+"\n "+("string"==typeof object[next]||object[next]instanceof String?'<input type="text" class="form-control" value="'+object[next]+'" disabled />':" ")+"\n </div>"}," ")}()+"\n </div>\n ";$uibModal.open({controller:controller,template:template})}var manyToOneCtrl=this,ngModelCtrl=void 0,ERR_MSGS={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"},possibleAttributes=["loadingText","onSelect","value","list","searchMethod","field","onNewValueAdded","onValueSelected","onValueVisualizationOpened","onValueVisualizationClosed","tabindex"],template=!1;$attrs.value||console.error(ERR_MSGS.noValue),$attrs.field||console.error(ERR_MSGS.noField),manyToOneCtrl.ev={},manyToOneCtrl.list=manyToOneCtrl.list||[],manyToOneCtrl.ev.onNewValueAdded=$attrs.onNewValueAdded?manyToOneCtrl.onNewValueAdded:angular.noop,manyToOneCtrl.ev.onSelect=$attrs.onSelect?manyToOneCtrl.onSelect:angular.noop,manyToOneCtrl.ev.onValueVisualizationOpened=$attrs.onValueVisualizationOpened?$attrs.onValueVisualizationOpened:angular.noop,manyToOneCtrl.ev.onValueVisualizationClosed=$attrs.onValueVisualizationClosed?$attrs.onValueVisualizationClosed:angular.noop,manyToOneCtrl.field=$attrs.field||"",manyToOneCtrl.modalTitle=$attrs.modalTitle||"Visualizador de Registro",manyToOneCtrl.modalFields=$attrs.modalFields?$attrs.modalFields.split(","):[manyToOneCtrl.field],manyToOneCtrl.postFields=$attrs.postFields?$attrs.postFields.split(","):[manyToOneCtrl.field],manyToOneCtrl.displayClear=!manyToOneCtrl.hasOwnProperty("displayClear")||manyToOneCtrl.displayClear,manyToOneCtrl.displayInfo=!manyToOneCtrl.hasOwnProperty("displayInfo")||manyToOneCtrl.displayInfo,manyToOneCtrl.editable=!manyToOneCtrl.hasOwnProperty("editable")||manyToOneCtrl.editable,manyToOneCtrl.async=!manyToOneCtrl.hasOwnProperty("async")||manyToOneCtrl.async,manyToOneCtrl.displayInfoButton=displayInfoButton,manyToOneCtrl.modelValueIsObject=modelValueIsObject,manyToOneCtrl.disabledDisplayInfo=disabledDisplayInfo,manyToOneCtrl.displayPlusButton=displayPlusButton,manyToOneCtrl.displayClearButton=displayClearButton,manyToOneCtrl.clearModel=clearModel,manyToOneCtrl.openInfo=openInfo,manyToOneCtrl.valueToAdd="",manyToOneCtrl.afterSelect=afterSelect,manyToOneCtrl.openTypehead=openTypehead,manyToOneCtrl.showTypeheadAndHideMatch=showTypeheadAndHideMatch,manyToOneCtrl.proxySearch=function(param){return manyToOneCtrl.async?(param=param||"",manyToOneCtrl.searchMethod({param:param}).then(function(data){if(data.filter(function(dataItem){return dataItem[manyToOneCtrl.field]==param}).length>0||!manyToOneCtrl.authorizeAdd)return data;var objToAppend={};return objToAppend[manyToOneCtrl.field]=manyToOneCtrl.valueToAdd,data.concat(objToAppend)})):(param&&(param=param.toLowerCase()),manyToOneCtrl.list.filter(function(listItem){return listItem[manyToOneCtrl.field].toLowerCase().indexOf(param)>-1}))},manyToOneCtrl.proxySave=function(val,abc){function controller($scope,$uibModalInstance,value){var ctrl=this;ctrl.object=value,ctrl.cancel=function(obj){return $uibModalInstance.dismiss("cancel")},ctrl.save=function(obj){return $uibModalInstance.close(obj)}}if(!abc)return;manyToOneCtrl.isTypeaheadOpen=!0;var resolve={value:function value(){return val}};controller.$inject=["$scope","$uibModalInstance","value"];var template='\n <div class="modal-header">\n <h3 class="modal-title">'+manyToOneCtrl.modalTitle+'</h3>\n </div>\n <div class="modal-body">\n '+function mountModalBody(){return manyToOneCtrl.postFields.reduce(function(prev,next){return prev+='\n <div class="form-group">\n <label>'+next+'</label>\n <input type="text" class="form-control" ng-model="ctrl.object.'+next+'" />\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>';$uibModal.open({controller:controller,template:template,controllerAs:"ctrl",resolve:resolve}).result.then(function(value){manyToOneCtrl.postMethod({value:value}).then(function(dataFromPostMethod){manyToOneCtrl.value=dataFromPostMethod.data.data,ngModelCtrl.$viewValue=dataFromPostMethod.data.data})},function(reject){return manyToOneCtrl.value=""})},manyToOneCtrl.isTypeaheadOpen=!0,$transclude($scope,function(cloneEl){angular.forEach(cloneEl,function(cl){var element=angular.element(cl)[0];element.nodeName&&"MATCH"===element.nodeName&&(template=!0,manyToOneCtrl.match=element.innerHTML)})});var baseTemplate='\n <div>\n <div ng-class="{\'input-group\': (manyToOneCtrl.displayInfoButton() && manyToOneCtrl.modelValueIsObject()) || manyToOneCtrl.displayClearButton()}">\n <input type="text" ng-init="manyToOneCtrl.visible = \'typeahead\'" ng-show="manyToOneCtrl.visible == \'typeahead\'" id="typeahead-'+manyToOneCtrl.field+"-"+$attrs.value+'" class="form-control gmd inputahead" tabindex="'+manyToOneCtrl.tabSeq+'" ng-disabled="manyToOneCtrl.disabled" ng-readonly="manyToOneCtrl.readonly" ng-model="manyToOneCtrl.value" ng-trim="true" uib-typeahead="$value as $value[manyToOneCtrl.field] for $value in manyToOneCtrl.proxySearch($viewValue)" typeahead-loading="manyToOneCtrl.typeaheadLoading" '+function mirrorAttributes(){var isOneOfPossibles=function isOneOfPossibles(attribute){return possibleAttributes.filter(function(value){return attribute==value}).length>0};return Object.keys($attrs.$attr).filter(function(value){return!isOneOfPossibles(value)}).reduce(function(prev,next){return prev+=next+'="'+$attrs[next]+'"'},"")}()+'\n typeahead-template-url="manyToOneTemplate'+manyToOneCtrl.field+"-"+$attrs.value+'.html" typeahead-is-open="manyToOneCtrl.isTypeaheadOpen" typeahead-editable="'+manyToOneCtrl.editable+'" typeahead-show-hint="true" typeahead-min-length="0" typeahead-on-select="manyToOneCtrl.afterSelect($item, $model, $label, $event, \'isNotButton\', manyToOneCtrl.match)" 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-'+manyToOneCtrl.field+"-"+$attrs.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\n </div>',templateForInnerMatch=template?"<span>"+manyToOneCtrl.match+"</span>":'<span ng-bind-html="match.model.'+manyToOneCtrl.field+' | uibTypeaheadHighlight:query"></span>',templateForMatch='\n <a class="col-md-12 result gmd">\n <span class="col-md-10 str" ng-click="manyToOneCtrl.select()">\n '+templateForInnerMatch+'\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="'+manyToOneCtrl.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>';$templateCache.put("manyToOneTemplate"+manyToOneCtrl.field+"-"+$attrs.value+".html",templateForMatch);for(var element=angular.element(baseTemplate),input=element.find("input"),form=$element.parent();"FORM"!=form[0].nodeName;)form=form.parent();var formController=$scope.$parent[form.attr("name")];$element.append($compile(element)($scope)),ngModelCtrl=input.controller("ngModel"),angular.copy(ngModelCtrl),formController.$addControl(ngModelCtrl),ngModelCtrl.$viewChangeListeners.push(function(){}),ngModelCtrl.$validators.manyToOne=function(modelValue,viewValue){return!modelValue||!("string"==typeof modelValue||modelValue instanceof String)},modelValueIsObject()||handlingInputVisible(),$scope.$watch(function(){return ngModelCtrl.$$rawModelValue},function(i){return manyToOneCtrl.valueToAdd=ngModelCtrl.$$rawModelValue})}return controller.$inject=["$scope","$element","$attrs","$transclude"],{restrict:"E",replace:!0,transclude:!0,scope:{value:"=",loadingText:"@?",inputMatch:"@?",searchMethod:"&",postMethod:"&?",onSelect:"&?",list:"=?",authorizeAdd:"=?",disabled:"=?",readonly:"=?",displayInfo:"=?",displayClear:"=?",editable:"=?",tabSeq:"=?",async:"=?"},controllerAs:"manyToOneCtrl",bindToController:!0,controller:controller}}ManyToOne.$inject=["$templateCache","$uibModal","$compile","$timeout"],angular.module("gumga.manytoone",["ui.bootstrap"]).directive("gumgaManyToOne",ManyToOne)}(); },{}]},{},[1]) //# sourceMappingURL=gumga-many-to-one.js.map