diff options
Diffstat (limited to 'usecaseui-common/src/main/webapp/static/js/search.js')
-rw-r--r-- | usecaseui-common/src/main/webapp/static/js/search.js | 830 |
1 files changed, 830 insertions, 0 deletions
diff --git a/usecaseui-common/src/main/webapp/static/js/search.js b/usecaseui-common/src/main/webapp/static/js/search.js new file mode 100644 index 00000000..c7b7ba65 --- /dev/null +++ b/usecaseui-common/src/main/webapp/static/js/search.js @@ -0,0 +1,830 @@ + +// var app=angular.module("abs", ["att.abs"]); + + + app.directive('afterRender', [ function() { + var def = { + restrict : 'A', + terminal : true, + transclude : false, + link : function(scope, element, attrs) { + if (attrs) { scope.$eval(attrs.afterRender) } + scope.$emit('onAfterRender') + } + }; + return def; + }]); + + app.directive("search", function() { + return { + // replace custom element with html5 markup + template: '<div >' + //+ '<c:set var="zeroidx" value="0" />' + + '<div ng-repeat="a in optionsSizeArray track by $index"> ' + + '<div id="{{sId}}{{a}}" > ' + + ' <div class="form-field form-field__glued pull-left size-onefourth" style=" width:25%;" >' + + ' <div att-search="options" ng-model="valueOptions[a]" placeholder="Select"></div> ' + + ' </div> ' + + ' <div class="form-field form-field__glued pull-left size-onefourth" style=" width:25%;"> ' + + ' <div att-search="operators" ng-model="compareOptions[a]" placeholder="Select"></div> ' + + ' </div> ' + + ' <div class="form-field form-field__glued pull-left size-onefourth" style=" width:25%;">' + + ' <input ng-model="searchValue[a]" type="text" placeholder="What are you looking for?" style=" border-radius:0px 5px 5px 0px" > ' + + ' </div> ' + + ' <div class="form-field form-field__glued pull-left size-onefourth" style=" width:25%; padding-left:5px;"> ' + + ' <button ng-click="remove(sId,a)" class="myzkBtn" >-</button>' + + ' <button ng-if="$index==0" ng-click="addSearch(sId,a,optionsSizeArray)" class="myzkBtn" >+</button> ' + + ' <button ng-if="$index==0" ng-click="updateparent({filter: { valueOptions: valueOptions, compareOptions: compareOptions, searchValue : searchValue } })" class="myzkBtn" style="background-image:url(static/ebz/images/searchIcon.png); background-repeat: no-repeat; background-position: center;"> </button>' + + ' </div>' + + ' </div> ' + + '</div>' + + '</div> ' , + replace: true, + // restrict usage to element only since we use attributes for APIs + restrict: 'EA', + require: 'ngModel', + // new isolate scope + scope: { + mSearch : '=ngModel' + ,updateparent: '&' + ,jsonForOption : '=' + ,jsonForOperator : '=' + ,searchId : '=' + }, + link: function(scope, iElement, iAttrs){ + scope.optionsSizeArray = []; + scope.sId = ''; + //scope.options = JSON.parse(JSON.stringify(iAttrs.jsonForOption)); + //scope.operators = JSON.parse(iAttrs.operators); + + scope.$watch("jsonForOption", function(newval, oldval) { + scope.options = JSON.parse(JSON.stringify(oldval)); + console.log('1'); + scope.evalRepeatIndex(scope.options.length); + console.log('2'); + + }); + + scope.evalRepeatIndex = function(size){ + for(index = 0; index < size; index++) { + scope.optionsSizeArray.push(index); + } + }; + + scope.$watch("jsonForOperator", function(newval, oldval) { + scope.operators = JSON.parse(JSON.stringify(oldval)); + + }); + + if(getParameterByName("search")!=null && getParameterByName("search")!=''){ + if((getParameterByName("location")!=null && getParameterByName("location")!='')){ + scope.searchValue[0]=JSON.parse(JSON.stringify(getParameterByName("location"))); + scope.valueOptions[0]={index:0,value:'Location Name',title:"Location Name",alias:'Location Name'}; + scope.compareOptions[0]={index:1,value:'Contains',title:"Contains",alias:'Contains'}; + }else if((getParameterByName("userLastName")!=null && getParameterByName("userLastName")!='')){ + scope.searchValue[0]=JSON.parse(JSON.stringify(getParameterByName("userLastName"))); + scope.valueOptions[0]= {index: 0, value: 'Last Name', title: 'Last Name', alias:'Last Name'}; + scope.compareOptions[0]={index:1,value:'Contains',title:"Contains",alias:'Contains'}; + } + } + scope.$watch("searchId", function(newval, oldval) { + scope.sId = oldval; + scope.hideDiv(); + }); + + scope.showHide = function(div){ + if(div != 0){ + $("#s1").css('display', 'none'); + } + return true; + }; + + + scope.hideDiv = function(){ + console.log('3'); + console.log(scope.optionsSizeArray); + + + for (i = 1; i < scope.optionsSizeArray.length; i++) { + var element = "#"+scope.sId+i; + $(element).css('display', 'none'); + } + + console.log('4'); + + }; + + + $(function() { + scope.hideDiv(); + }); + + }, + + controller: function ($scope) { + + $scope.addSearch = function(searchId, index, optionsLength){ + console.log('5'); + + for(var i = 0; i<=optionsLength.length ;i++){ + var element = "#"+searchId+i; + if($(element).css('display') == 'none'){ + $(element).css('display', 'inline'); + break; + } + }; + console.log('6'); + + }; + + $scope.remove = function(searchId, index){ + var remove = "#"+searchId+index; + if(index!=0) + $(remove).css("display", "none"); + var v ={ + index: 0, + value: '', + title: 'Select', + alias:'' + }; + $scope.valueOptions[index]=v; + $scope.compareOptions[index]=v; + $scope.searchValue[index]=""; + }; + + $scope.search = function() { + var data = { + valueOptions : $scope.valueOptions, + compareOptions : $scope.compareOptions, + searchValue : $scope.searchValue + }; + }; + + var data = { + valueOptions : $scope.valueOptions, + compareOptions : $scope.compareOptions, + searchValue : $scope.searchValue + }; + + $scope.mSearch = data; + $scope.valueOptions=[]; + $scope.compareOptions=[]; + $scope.searchValue=[]; + } + } + + }); + + app.directive('phoneNumberMask', [function(){ + return { + restrict: 'A', + require: '?ngModel', + scope: { + ngModel : '=' + }, + link: function(scope, el, attrs){ + scope.$watch(attrs.phoneNumberMask, function(newValue, oldValue) { + + if(scope.ngModel) + scope.ngModel= scope.ngModel.replace(/(\+1)?(\d{3})(\d{3})(\d{4})/, '$2.$3.$4'); + $(el).mask("999.999.9999"); + }); + scope.$watch("ngModel", function() { + var current = $(el).val(); + if(scope.ngModel && /^(\+1)?\d{3,}$/.test(scope.ngModel)) + scope.ngModel= scope.ngModel.replace(/(\+1)?(\d{3})(\d{3})(\d{4})/, '$2.$3.$4'); + + }); + }, + }; + }]); + + app.directive('allowOnlyNumber', [function(){ + return { + require: 'ngModel', + link: function(scope, element, attrs, modelCtrl) { + modelCtrl.$parsers.push(function (inputValue) { + if (inputValue == undefined) return ''; + var transformedInput = inputValue.replace(/[^0-9]/g, ''); + if (transformedInput!=inputValue) { + modelCtrl.$setViewValue(transformedInput); + modelCtrl.$render(); + } + + return transformedInput; + }); + } + }; + }]); + + app.directive('showProcessing', function(){ + return { + restrict: 'A', + link: function(scope, elem, attrs) { + elem.bind('click', function() { + $(".overlayed").css("display","inline"); + $(".loadingId").css("display","inline"); + }); + } + } + }); + +app.directive("searchCriteria", function() { + return { + // replace custom element with html5 markup + template: '<div >' + + '<div ng-repeat="a in searchCriterion track by $index" ng-show="isShown[$index]"> ' + + ' <div class="form-field form-field__glued form-field__square size-onefourth left_round_border">' + + ' <div att-search="availableOptions[$index]" ng-model="valueOptions[$index]"></div> ' + + ' </div> ' + + ' <div class="form-field form-field__glued form-field__square size-onefourth"> ' + + ' <div att-search="availableOperators[$index]" ng-model="compareOptions[$index]" > </div> ' + + ' </div> ' + + ' <div class="form-field form-field__glued form-field__square size-onefourth right_round_border">' + + ' <input ng-show="!availableValues[$index] || availableValues[$index].length===0" ng-model="searchValue[$index]" type="text" placeholder="What are you looking for?" class="fn-ebz-text" style="width:100%;" > ' + + ' <div ng-show="availableValues[$index] && availableValues[$index].length!==0" att-search="availableValues[$index]" ng-model="searchValue[$index]"></div> ' + + ' </div> ' + + ' <div class="form-field form-field__glued form-field__square size-onefourth" style=" padding-left:5px;" > ' + + ' <button ng-show="$index!=0" ng-click="removeSearchCriteria($index)" class="myzkBtn">-</button>' + + ' <button ng-show="$index==0" ng-click="addSearchCriteria($index)" class="myzkBtn">+</button> ' + + ' <button ng-show="$index==0" ng-click="search()" class="myzkBtn" style="background-image:url(static/ebz/images/searchIcon.png); background-repeat: no-repeat; background-position: center;"> </button>' + + ' </div>' + + ' </div> ' + + '</div> ' , + replace: true, + // restrict usage to element only since we use attributes for APIs + restrict: 'EA', + require: 'ngModel', + // new isolate scope + scope: { + mSearch : '=ngModel', + updateparent: '&' + ,options : '=jsonForOption' + ,operators : '=jsonForOperator' + }, + + controller: function ($scope) { + $scope.isShown = [true]; + $scope.searchCriterion = []; + $scope.valueOptions=[]; + $scope.compareOptions=[]; + $scope.searchValue=[]; + $scope.availableOperators=[]; + $scope.availableValues=[]; + $scope.availableOptions = []; + //init + $scope.insertEmptyOption = function(arr){ + var hasEmpty = false; + $.each(arr, function(i, a){ + if(a.value ===''){ + hasEmpty = true; + } + }); + if(!hasEmpty){ + $.each(arr, function(i, a){ + a.index +=1; + }); + arr.unshift({index: 0, value: '', title: 'Select', alias:'Select'}); + } + }; + $scope.findFirstOption = function(arr){ + + }; + $scope.insertEmptyOption($scope.options); + $scope.insertEmptyOption($scope.operators); + + for(var i = 0, l= $scope.options.length; i<l; i++) { + var option= $scope.options[i]; + var n = option.maxOccurs; + if(option.value!==''){ + if(n && Number(n)===n && n%1===0){ //maxOccurs is specified + for(var j=0; j<n; j++){ + $scope.searchCriterion.push(""); + $scope.availableOperators.push($scope.operators); + var valueArr = []; + $scope.availableValues.push(valueArr); + $scope.availableOptions.push($scope.options); + $scope.isShown.push(false); + } + }else{ + $scope.searchCriterion.push(""); + $scope.availableOperators.push($scope.operators); + var valueArr = []; + $scope.availableValues.push(valueArr); + $scope.availableOptions.push($scope.options); + $scope.isShown.push(false); + } + } + } + $scope.isShown.pop(); + + $scope.updateAvailableOptions = function(index, isFirst){ + var selectedOptions = [];//{value:'name', occurs: } + if($scope.options && $scope.options.length > 0){ + $.each($scope.valueOptions, function(i, a){ + if(a){ + var v = a.value; + if(v){ + var s= $.grep(selectedOptions, function(e){ return e.value === v }); + + if(s.length ===1){ + s[0].occurs += 1; + }else{ + selectedOptions.push({value: v, occurs:1}); + } + } + var o= $.grep($scope.options, function(e){ return e.value === v }); + if(o.length ===1){ + if("operators" in o[0]){ + $scope.availableOperators[i]=o[0].operators; + $scope.insertEmptyOption($scope.availableOperators[i]); + }else{ + $scope.availableOperators[i]=$scope.operators; + } + if("values" in o[0]){ + $scope.availableValues[i]=o[0].values; + }else{ + $scope.availableValues[i]=[]; + } + } + } + }); + for(var j = 0 , l = $scope.availableOptions.length; j<l ; j++){ + var newOptions = []; + var aoi = 0; + $.each($scope.options, function(i, a){ + var s= $.grep(selectedOptions, function(e){ return e.value === a.value }); + var maxOccurs = "maxOccurs" in a ? a.maxOccurs :1; + if(s.length > 0 && s[0].occurs >= maxOccurs && ($scope.valueOptions[j] && $scope.valueOptions[j].value !== s[0].value)){// reach limit + }else{ + newOptions.push({index: aoi, value: a.value, title: a.title, alias:a.alias}); + aoi += 1; + } + }); + $scope.availableOptions[j] = newOptions; + if(isFirst){ + if($scope.availableValues[j].length>0) + $scope.searchValue[j]= $scope.availableValues[j][0]; + else + $scope.searchValue[j]=""; + + $scope.compareOptions[j]= $scope.availableOperators[j][0]; + } + }; + + } + if(typeof index !== 'undefined' && !isFirst){ + if($scope.availableValues[index].length>0) + $scope.searchValue[index]= $scope.availableValues[index][0]; + else + $scope.searchValue[index]=""; + } + }; + + $scope.updateAvailableOptions(undefined, true); + $.each($scope.availableOptions, function(j, a){ + $scope.valueOptions[j]= a[0]; + }); + $scope.addSearchCriteria = function(index){ + for(var i = 0 , l =$scope.isShown.length; i<l; i++ ){ + if(!$scope.isShown[i]){ + $scope.isShown[i]= true; + break; + } + + } + }; + + $scope.removeSearchCriteria = function(index){ + $scope.isShown[index]= false; + + + $scope.valueOptions[index]=$scope.availableOptions[index][0]; + $scope.compareOptions[index]=$scope.availableOperators[index][0]; + $scope.searchValue[index]=""; + }; + $scope.search = function() { + //remove empty criteria + var vo =[]; + var co =[]; + var sv =[]; + for(var i = 0 , l=$scope.valueOptions.length; i<l ; i++){ + if($scope.valueOptions[i].value==='' || $scope.compareOptions[i].value==='' ||(typeof $scope.searchValue[i] ==='string' && $scope.searchValue[i] ==='') || $scope.searchValue[i].value === ''){ + }else{ + vo.push($scope.valueOptions[i]); + co.push($scope.compareOptions[i]); + sv.push($scope.searchValue[i]); + } + } + $scope.updateparent({filter: { valueOptions: vo, compareOptions: co, searchValue :sv } }); + }; + + $scope.$watchCollection("valueOptions", function(collection, oldValue ){ + if(collection) { + var index; + for(var i = 0 , l =collection.length; i<l; i++ ){ + if(!oldValue[i] || oldValue[i].value!=collection[i].value){ + index = i; + break; + } + + } + $scope.updateAvailableOptions(index); + } + }, true); + + } + } + + }); + + app.directive("selectUser", function() { + return { + // replace custom element with html5 markup + template: '<div> ' + + '<table style="width:660px; margin-left:-12px;" >' + + '<thead>' + + ' <tr >' + + ' <th style="width:325px;">{{availableTitle}}</th> ' + + ' <th style="width:10px;"></th> ' + + ' <th style="width:325px;">{{userTitle}}</th> ' + + '</tr>' + + '</thead>' + + '<tbody>' + + '<tr>' + + ' <td style="width:325px;">' + + ' <div class="ebz-listbox">' + + ' <label ng-repeat="canditateId in canditateIds track by canditateId.ociUserId" style="display:block;"> ' + + ' <input type="checkbox" style="margin-top: 10px;" ng-model="canditateId.available" att-checkbox ng-change="checkCanditate($index)"/> {{canditateId.firstName}} {{canditateId.lastName}}({{canditateId.phone}})<br/>' + + ' </label>' + + ' </div>' + + '</td>' + + '<td valign="middle" width="10px">' + + ' <img src="static/images/rightarrow_g.png" id="removeBtn" ng-click="chooseSelected()" ng-hide="oneMax && chosenIds.length==1"/>' + + ' <img src="static/images/leftarrow_g.png" id="chooseBtn" ng-click="removeSelected()" ng-show="oneMax && chosenIds.length==1"/>' + + ' <br/><br/> ' + + ' <img src="static/images/leftarrow_g.png" id="chooseBtn" ng-click="removeSelected()" ng-hide="oneMax"/>' + + ' <br/><br/>' + + ' <img id="chooseAllBtn" src="static/images/rightrightarrow_g.png" ng-click="chooseAll()" ng-hide="oneMax"/>' + + ' <br/><br/>' + + ' <img style="cursor:pointer" id="removeAllBtn" src="static/images/leftleftarrow_g.png" ng-click="removeAll()" ng-hide="oneMax"/>' + + '</td>' + + '<td style="width:325px;">' + + ' <div class="ebz-listbox" >' + + ' <label ng-repeat="chosenId in chosenIds" style="display:block;">' + + ' <input type="checkbox" style=" margin-top :10px;" att-checkbox ng-model="chosenId.available"/> {{chosenId.firstName}} {{chosenId.lastName}}({{chosenId.phone}})<br/>' + + ' </label>' + + ' </div>' + + '</td> ' + + ' </tr>' + + '</tbody>' + + '</table>' + + '</div>', + replace: true, + // restrict usage to element only since we use attributes for APIs + restrict: 'EA', + // new isolate scope + scope: { + chosenIds : '=assignedUsers' + ,availableUsers : '=' + ,userTitle : '=' + ,availableTitle : '=' + ,oneMax : '=?' + }, + link: function(scope, iElement, attrs){ + + scope.$watch("userTitle", function(newval, oldval) { + scope.userTitle = newval; + }); + scope.$watch("availableTitle", function(newval, oldval) { + scope.availableTitle = newval; + }); + + scope.$watch("availableUsers", function(newval, oldval) { + scope.availableUsers = newval; + scope.canditateIds= scope.getArrayRemoved(scope.availableUsers, scope.chosenIds); + }); + + }, + + controller: function ($scope) { + $scope.getArrayRemoved = function(from, removed){ + var retArray = (from)? from:[]; + if(retArray && retArray.length >0 && removed){ + for(var i = 0, l = removed.length; i<l; i++ ){ + retArray = $.grep(retArray, function(e){ return e.ociUserId !== removed[i].ociUserId; }); + }; + } + return retArray; + }; + $scope.canditateIds= $scope.getArrayRemoved($scope.availableUsers, $scope.chosenIds); + $scope.chooseAll = function() { + + var dataFromTableData = $scope.canditateIds; + for (var i = dataFromTableData.length - 1; i >= 0; i--){ + if(!$scope.chosenIds) + $scope.chosenIds=[]; + $scope.chosenIds.push(dataFromTableData[i]); + $scope.canditateIds.splice(i,1); + + } + var dataFromChoosonTable = $scope.chosenIds; + for (var i = dataFromChoosonTable.length - 1; i >= 0; i--){ + if(dataFromChoosonTable[i].available){ + $scope.chosenIds[i].available=false; + } + } + }; + + $scope.removeAll = function() { + var dataFromTableData = $scope.chosenIds; + for (var i = dataFromTableData.length - 1; i >= 0; i--){ + $scope.canditateIds.push(dataFromTableData[i]); + $scope.chosenIds.splice(i,1); + + } + var dataFromChoosonTable = $scope.canditateIds; + for (var i = dataFromChoosonTable.length - 1; i >= 0; i--){ + if(dataFromChoosonTable[i].available){ + $scope.canditateIds[i].available=false; + } + } + }; + + $scope.chooseSelected = function() { + + var dataFromTableData = $scope.canditateIds; + + for (var i = dataFromTableData.length - 1; i >= 0; i--){ + + if(dataFromTableData[i].available){ + if(!$scope.chosenIds) + $scope.chosenIds=[]; + $scope.chosenIds.push(dataFromTableData[i]); + $scope.canditateIds.splice(i,1); + + } + } + var dataFromChoosonTable = $scope.chosenIds; + for (var i = dataFromChoosonTable.length - 1; i >= 0; i--){ + if(dataFromChoosonTable[i].available){ + $scope.chosenIds[i].available=false; + } + } + }; + $scope.removeSelected = function() { + + var dataFromTableData = $scope.chosenIds; + + for (var i = dataFromTableData.length - 1; i >= 0; i--){ + if(dataFromTableData[i].available){ + $scope.canditateIds.push(dataFromTableData[i]); + $scope.chosenIds.splice(i,1); + + } + } ; + var dataFromChoosonTable = $scope.canditateIds; + for (var i = dataFromChoosonTable.length - 1; i >= 0; i--){ + if(dataFromChoosonTable[i].available){ + $scope.canditateIds[i].available=false; + } + } + }; + $scope.checkCanditate = function(index) { + if($scope.oneMax){ + for (var i = $scope.canditateIds.length - 1; i >= 0; i--){ + if(i != index) + $scope.canditateIds[i].available=false; + } + } + }; + + + } + } + }); + app.directive("selectString", function() { + return { + // replace custom element with html5 markup + template: '<div> ' + + '<table style="width:660px;">' + + '<thead>' + + ' <tr >' + + ' <th style="width:325px;">{{availableTitle}}</th> ' + + ' <th style="width:10px;"></th> ' + + ' <th style="width:325px;">{{assignedTitle}}</th> ' + + '</tr>' + + '</thead>' + + '<tbody>' + + '<tr>' + + ' <td style="width:325px;">' + + ' <div class="ebz-listbox">' + + ' <label ng-repeat="canditateId in canditateIds track by $index" style="display:block;"> ' + + ' <input type="checkbox" style="margin-top: 10px;" ng-model="canditateId.available" att-checkbox /> {{canditateId}}<br/>' + + ' </label>' + + ' </div>' + + '</td>' + + '<td valign="middle" width="10px">' + + ' <img src="static/images/rightarrow_g.png" id="removeBtn" ng-click="chooseSelected()" />' + + ' <br/><br/> ' + + ' <img src="static/images/leftarrow_g.png" id="chooseBtn" ng-click="removeSelected()" />' + + ' <br/><br/>' + + ' <img id="chooseAllBtn" src="static/images/rightrightarrow_g.png" ng-click="chooseAll()" />' + + ' <br/><br/>' + + ' <img style="cursor:pointer" id="removeAllBtn" src="static/images/leftleftarrow_g.png" ng-click="removeAll()" />' + + '</td>' + + '<td style="width:325px;">' + + ' <div class="ebz-listbox" >' + + ' <label ng-repeat="chosenId in chosenIds" style="display:block;">' + + ' <input type="checkbox" style=" margin-top :10px;" att-checkbox ng-model="chosenId.available"/> {{chosenId}}<br/>' + + ' </label>' + + ' </div>' + + '</td> ' + + ' </tr>' + + '</tbody>' + + '</table>' + + '</div>', + replace: true, + // restrict usage to element only since we use attributes for APIs + restrict: 'EA', + // new isolate scope + scope: { + chosenIds : '=assignedOptions' + ,availableOptions : '=' + ,availableTitle : '@' + ,assignedTitle : '@' + }, + link: function(scope, iElement, attrs){ + scope.$watch("availableOptions", function(newval, oldval) { + scope.availableOptions = newval; + scope.canditateIds= scope.getArrayRemoved(scope.availableOptions, scope.chosenIds); + }); + + }, + + controller: function ($scope) { + $scope.getArrayRemoved = function(from, removed){ + var retArray = (from)? from:[]; + if(retArray && retArray.length >0 && removed){ + for(var i = 0, l = removed.length; i<l; i++ ){ + retArray = $.grep(retArray, function(e){ return e !== removed[i]; }); + }; + } + return retArray; + }; + + $scope.canditateIds= $scope.getArrayRemoved($scope.availableOptions, $scope.chosenIds); + $scope.chooseAll = function() { + + var dataFromTableData = $scope.canditateIds; + for (var i = dataFromTableData.length - 1; i >= 0; i--){ + if(!$scope.chosenIds) + $scope.chosenIds=[]; + $scope.chosenIds.push(dataFromTableData[i]); + $scope.canditateIds.splice(i,1); + + } + }; + + $scope.removeAll = function() { + var dataFromTableData = $scope.chosenIds; + for (var i = dataFromTableData.length - 1; i >= 0; i--){ + $scope.canditateIds.push(dataFromTableData[i]); + $scope.chosenIds.splice(i,1); + + } + }; + + $scope.chooseSelected = function() { + + var dataFromTableData = $scope.canditateIds; + + for (var i = dataFromTableData.length - 1; i >= 0; i--){ + + if(dataFromTableData[i].available){ + if(!$scope.chosenIds) + $scope.chosenIds=[]; + $scope.chosenIds.push(dataFromTableData[i]); + $scope.canditateIds.splice(i,1); + + } + } + }; + $scope.removeSelected = function() { + + var dataFromTableData = $scope.chosenIds; + + for (var i = dataFromTableData.length - 1; i >= 0; i--){ + if(dataFromTableData[i].available){ + $scope.canditateIds.push(dataFromTableData[i]); + $scope.chosenIds.splice(i,1); + + } + } ; + }; + + } + } + }); + function getParameterByName(name) { + name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); + var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), + results = regex.exec(location.search); + return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); + }; + + app.directive("time", function() { + return { + // replace custom element with html5 markup + template: '<div style="height:80px; display:inline-block;"> ' + + ' <input type="text" class="fn-ebz-text" ng-model="timeStr" placeholder="HH:MM" style="width:70px" ng-change="parseValue()"/>' + + ' <div class="form-field" att-select="ampmOptions" ng-model="ampm" style="width:70px" ng-change="parseValue()"></div>' + + ' </div>', + replace: true, + // restrict usage to element only since we use attributes for APIs + restrict: 'EA', + // new isolate scope + scope: { + value : '=' + ,validTime : '=?' + }, + link: function(scope, iElement, attrs){ + }, + + controller: function ($scope) { + $scope.timeStr=''; + $scope.ampm=null; + var am ={index: 0, value: 'AM', title: 'AM', alias:'Name2'}; + var pm = {index: 1, value: 'PM', title: 'PM', alias:'Name'}; + $scope.ampmOptions=[ + am, + pm, + ] + $scope.parseTimeStr= function(str){ + if(str){ + try{ + var date; + if(/^(\d*):(\d*)$/.test(str)){ + var hh = Number(str.match(/^(\d+)/)[1]); + var mm = Number(str.match(/:(\d+)/)[1]); + date = new Date(1970, 0, 1, hh, mm, 0); + }else{ + date = new Date(str); + } + var hours = date.getHours(); + var minutes = date.getMinutes(); + var ampm = hours >= 12 ?pm : am; + hours = hours % 12; + hours = hours ? hours : 12; // the hour '0' should be '12' + minutes = minutes < 10 ? '0'+minutes : minutes; + hours = hours < 10 ? '0'+hours : hours; + var strTime = hours + ':' + minutes ; + + + $scope.timeStr =strTime; + $scope.ampm = ampm; + if (typeof $scope.validTime != 'undefined'){ + $scope.validTime=true; + } + }catch(err){ + if (typeof $scope.validTime != 'undefined'){ + $scope.validTime=false; + } + } + }else{ + $scope.timeStr = "12:00"; + $scope.ampm =am; + } + }; + $scope.parseTimeStr($scope.value); + $scope.parseValue = function(){ + try{ + var date; + var hh = Number($scope.timeStr.match(/^(\d+)/)[1]); + var mm = Number($scope.timeStr.match(/:(\d+)/)[1]); + + if(hh<=12 && hh>0 && mm>=0 && mm<=59){ + + if($scope.ampm.value=='PM'&& hh<12) hh = hh+12; + if($scope.ampm.value=='AM'&& hh==12) hh = hh-12; + mm = mm < 10 ? '0'+mm : mm; + hh = hh < 10 ? '0'+hh : hh; + $scope.value= hh+":"+mm; + if (typeof $scope.validTime != 'undefined'){ + $scope.validTime=true; + } + }else{ + if (typeof $scope.validTime != 'undefined'){ + $scope.validTime=false; + } + } + + }catch(err){ + if (typeof $scope.validTime != 'undefined'){ + $scope.validTime=false; + } + } + }; + } + } + });
\ No newline at end of file |