From 1faf201e8608dfa4d7af3460fd3d1fc7ebec398b Mon Sep 17 00:00:00 2001 From: talasila Date: Tue, 7 Feb 2017 11:47:55 -0500 Subject: Initial OpenECOMP Portal SDK commit Change-Id: I66a3491600a4b9ea241128dc29267eed6a78ed76 Signed-off-by: talasila --- .../sdk-app/src/main/webapp/static/js/search.js | 829 +++++++++++++++++++++ 1 file changed, 829 insertions(+) create mode 100644 ecomp-sdk/sdk-app/src/main/webapp/static/js/search.js (limited to 'ecomp-sdk/sdk-app/src/main/webapp/static/js/search.js') diff --git a/ecomp-sdk/sdk-app/src/main/webapp/static/js/search.js b/ecomp-sdk/sdk-app/src/main/webapp/static/js/search.js new file mode 100644 index 00000000..70cb166b --- /dev/null +++ b/ecomp-sdk/sdk-app/src/main/webapp/static/js/search.js @@ -0,0 +1,829 @@ + + + + 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: '
' + //+ '' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + ' ' + + '
' + + '
' + + ' ' + + ' ' + + ' ' + + '
' + + '
' + + '
' + + '
' , + 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: '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + ' ' + + '
' + + '
' + + '
' + + ' ' + + ' ' + + ' ' + + '
' + + '
' + + '
' , + 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 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 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 ' + + '' + + '' + + ' ' + + ' ' + + ' ' + + ' ' + + '' + + '' + + '' + + '' + + ' ' + + '' + + ' ' + + ' ' + + '' + + '
{{availableTitle}}{{userTitle}}
' + + '
' + + ' ' + + '
' + + '
' + + ' ' + + ' ' + + '

' + + ' ' + + '

' + + ' ' + + '

' + + ' ' + + '
' + + '
' + + ' ' + + '
' + + '
' + + '', + 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= 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: '
' + + '' + + '' + + ' ' + + ' ' + + ' ' + + ' ' + + '' + + '' + + '' + + '' + + ' ' + + '' + + ' ' + + ' ' + + '' + + '
{{availableTitle}}{{assignedTitle}}
' + + '
' + + ' ' + + '
' + + '
' + + ' ' + + '

' + + ' ' + + '

' + + ' ' + + '

' + + ' ' + + '
' + + '
' + + ' ' + + '
' + + '
' + + '
', + 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= 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: '
' + + ' ' + + '
' + + '
', + 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 -- cgit 1.2.3-korg