// 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; } } }; } } });