1AskTheScholarApp.controller("BannerDataController", function ($rootScope, $location, $scope, $http, $window, BannerDataServices, AppConstant, AskTheScholarAPIStrings, Constants) { 2 3 //form load check whether the token is present in cache. if yes, allow the user to 4 //go to dashboard. 5 var token = data = JSON.parse(window.sessionStorage.getItem('token')); 6 var expiresAt = JSON.parse(window.sessionStorage.getItem('expiresAt')); 7 var userName = JSON.parse(window.sessionStorage.getItem('UserName')); 8 9 if (token == null || token == undefined 10 || expiresAt == null || expiresAt == undefined 11 || userName == null || expiresAt == userName) { 12 13 $rootScope.LoginErrorMessage = Constants.loginTokenEmptyError; 14 $rootScope.MessageType = Constants.Error; 15 16 //redirect to login page. 17 $location.path('/login'); 18 } 19 else { 20 21 //we have the token in cache. but check whether its still valid or not 22 //by checking the expiry datetime. 23 if (IsTokenValid(moment(expiresAt))) { 24 25 //store it in scope. 26 $scope.token = token; 27 $scope.expiresAt = expiresAt; 28 $scope.LoggedInUserName = userName; 29 } 30 else { 31 $rootScope.LoginErrorMessage = Constants.sessionExpiredError; 32 $rootScope.MessageType = Constants.Error; 33 //redirect to login page. 34 $location.path('/login'); 35 } 36 } 37 38 //clear the querystring if any. 39 $location.url($location.path()); 40 41 $rootScope.$emit("SetLoggedInUserDetailsMethodNew", {}); 42 43 //hide error & success messages. 44 HideAlert('#SuccessMessageDiv'); 45 HideAlert('#ErrorMessageDiv'); 46 HideAlert('#ModalErrorMessageDiv'); 47 HideAlert('#ModalErrorMessageDivForEdit'); 48 49 $scope.mainTypesDDLList = []; 50 51 $scope.BannerData = { 52 BannerDataId: 0, 53 Title: '', 54 Url: '', 55 ImagePath: '', 56 PageId: 0 57 }; 58 59 BindBannerGrid($scope.token); 60 61 function BindBannerGrid(token) { 62 63 64 var newOptions = { 65 BannerDataId: 0, 66 Title: '', 67 Url: '', 68 ImagePath: '', 69 PageId: 0 70 }; 71 72 var RouteURL = AppConstant.BaseServiceURL; 73 74 var deleteAPI = RouteURL + AskTheScholarAPIStrings.DeleteBannerData + '/' + Constants.WebCustomerId; 75 76 var getBannerDataURL = RouteURL + AskTheScholarAPIStrings.GetBannerData + '/' + Constants.WebCustomerId, 77 78 79 dataSource = new kendo.data.DataSource({ 80 transport: { 81 read: { 82 url: getBannerDataURL, 83 contentType: "application/json", 84 type: 'GET', 85 beforeSend: function (req) { 86 req.setRequestHeader('Authorization', 'Bearer ' + token); 87 } 88 }, 89 destroy: { 90 url: deleteAPI, 91 contentType: "application/json", 92 type: 'GET', 93 beforeSend: function (req) { 94 req.setRequestHeader('Authorization', 'Bearer ' + token); 95 } 96 }, 97 parameterMap: function (options, operation) { 98 99 if (operation !== "read" && options.models) { 100 return { models: kendo.stringify(options.models) }; 101 } 102 } 103 }, 104 batch: true, 105 pageable: true, 106 pageSize: Constants.GridPageSize, 107 requestEnd: function (e) { 108 109 if (e.type != 'read') { 110 ReloadtheMainGrid(); 111 } 112 113 var response = e.response; 114 if (response != null || response != undefined) { 115 if (response == 'Banner Deleted Successfully') { 116 HideAlert('#ErrorMessageDiv'); 117 SetText('#SuccessMessageDiv', response); 118 ShowAlertMessage('#SuccessMessageDiv'); 119 } 120 } 121 122 }, 123 schema: { 124 125 data: "ReturnedResult.Data", 126 total: "ReturnedResult.itemCount", 127 model: { 128 id: "BannerDataId", 129 fields: { 130 BannerDataId: { editable: false, nullable: false }, 131 PageId: { editable: false, nullable: false }, 132 Title: { editable: true, nullable: false }, 133 Url: { editable: true, nullable: false }, 134 PageName: { editable: true, nullable: false }, 135 ImagePath: { editable: true, nullable: false } 136 } 137 } 138 }, 139 140 }); 141 142 $("#grid").kendoGrid({
143 dataSource: dataSource, 144 //hide the pager control if number of records are less 145 dataBound: function (e) { 146 147 if (e.sender.dataSource.total() <= e.sender.dataSource.pageSize()) { 148 e.sender.pager.element.hide(); 149 } else { 150 e.sender.pager.element.show(); 151 } 152 }, 153 noRecords: { 154 template: "No data available." 155 }, 156 toolbar: [ 157 { template: "<label><b>Banner Data</b></label>" } 158 ], 159 pageable: true, 160 //height: 450, 161 columns: [ 162 //{ field: "ResourceId", title: "Resource Id", width: "30px" }, 163 { 164 field: "Title", title: "Banner Title", width: "10%", 165 filterable: { 166 cell: { 167 operator: "contains", 168 template: function (args) { 169 args.element.css("width", "100%").addClass("k-textbox").keydown(function (e) { 170 setTimeout(function () { 171 $(e.target).trigger("change"); 172 }); 173 }); 174 }, 175 showOperators: false 176 } 177 } 178 }, 179 { 180 title: "Banner Image", 181 width: '10%', 182 attributes: { style: "text-align:center;" }, 183 template: "<image src=\'#=ImagePath #\' style='width:300px; height:30px;' title='Choosed Image' />" 184 , filterable: false 185 }, 186 { 187 field: "Url", title: "Banner URL", width: "10%", 188 filterable: { 189 cell: { 190 operator: "contains", 191 template: function (args) { 192 args.element.css("width", "100%").addClass("k-textbox").keydown(function (e) { 193 setTimeout(function () { 194 $(e.target).trigger("change"); 195 }); 196 }); 197 }, 198 showOperators: false 199 } 200 } 201 }, 202 { 203 field: "PageName", title: "Page Name", width: "10%", 204 filterable: { 205 cell: { 206 operator: "contains", 207 template: function (args) { 208 args.element.css("width", "100%").addClass("k-textbox").keydown(function (e) { 209 setTimeout(function () { 210 $(e.target).trigger("change"); 211 }); 212 }); 213 }, 214 showOperators: false 215 } 216 } 217 }, 218 { 219 title: "", 220 width: "5%", 221 attributes: { style: "text-align:center;" }, 222 template: "<button type='button' class='form-btn_ForGrid' onclick=\"EditBannerData(\'#=BannerDataId #\',\'#=PageId #\',\'#=PageName #\',\'#=Title #\',\'#=Url #\',\'#=ImagePath #\')\">Edit</button> " 223 , filterable: false 224 }, 225 { command: [{ className: "form-btn_ForGrid", name: "destroy", text: "" }], width: "5%" }], 226 editable: "popup", 227 filterable: true 228 }); 229 230 } 231 232 233 function ReloadtheMainGrid() { 234 var grid = $("#grid").data("kendoGrid"); 235 if (grid != null) { 236 237 var currentPage = grid.dataSource.page(); 238 var count = grid.dataSource.view().length; 239 grid.dataSource.read(); 240 if (count <= 1) 241 grid.dataSource.page(currentPage - 1); 242 } 243 } 244 245 $scope.InsertNewBanner = function () { 246 247 $scope.BannerData.Title = ''; 248 $scope.BannerData.Url = ''; 249 var upload = $("#NewBannerImageUploader").data("kendoUpload"); 250 upload.clearAllFiles(); 251 252 bindDropdowns("#PageList", $scope.token); 253 $('#InsertBannerModal').modal( 254 { 255 show: true, 256 backdrop: 'static', 257 keyboard: false 258 }); 259 }; 260 261 $scope.EditBannerData = function (BannerId, pageId, pageName, title, url, imagePath) { 262 263 $scope.BannerData.BannerDataId = BannerId; 264 $scope.BannerData.Title = title; 265 $scope.BannerData.Url = url; 266 $scope.BannerData.ImagePath = imagePath; 267 $scope.BannerData.PageId = pageId; 268 269 bindDropdowns("#PageListForEdit", $scope.token); 270 271 $('#EditBannerModal').modal( 272 { 273 show: true, 274 backdrop: 'static', 275 keyboard: false 276 }); 277 } 278 279 LoadNewBannerImageUploader(); 280 281 function LoadNewBannerImageUploader() { 282 $("#NewBannerImageUploader").kendoUpload( 283 { 284 multiple: false, 285 validation: {
286 allowedExtensions: [".gif", ".jpg", ".png", ".jpeg"], 287 maxFileSize: 4194304 288 }, 289 localization: { 290 select: "Select File", 291 }, 292 select: function (event) { 293 var notAllowed = false; 294 $.each(event.files, function (index, value) { 295 296 if ((value.extension !== '.gif') && (value.extension !== '.jpg') && (value.extension !== '.png') 297 && (value.extension !== '.jpeg')) { 298 299 //HideAlert('#SuccessMessageDiv'); 300 //set error message 301 SetText('#ModalErrorMessageDiv', 'File Type is not supported'); 302 //show error message. 303 ShowAlertMessage('#ModalErrorMessageDiv'); 304 305 window.scrollTo(0, 0); 306 307 notAllowed = true; 308 } 309 310 }); 311 var breakPoint = 0; 312 if (notAllowed == true) event.preventDefault(); 313 } 314 } 315 ); 316 } 317 318 LoadEditBannerImageUploader(); 319 320 function LoadEditBannerImageUploader() { 321 $("#EditBannerImageUploader").kendoUpload( 322 { 323 multiple: false, 324 localization: { 325 select: "Select File", 326 }, 327 validation: { 328 allowedExtensions: [".gif", ".jpg", ".png"], 329 maxFileSize: 4194304 330 } 331 } 332 ); 333 334 $("#PageListForEdit").kendoDropDownList({ 335 enable: false 336 }); 337 } 338 339 function bindDropdowns(DropdownId, token) { 340 341 342 343 var jsonData = {}; 344 var finalObj = []; 345 var actualData = {}; 346 var s = ''; 347 var promise = BannerDataServices.GetPageMasterData(token); //call service function to call API 348 349 promise.then( 350 function (response) { 351 352 $scope.mainTypesDDLList = []; 353 354 if (response != null) { 355 356 pageList = response.data.ReturnedResult; 357 if (pageList != null) { 358 for (var i = 0; i < pageList.length; i++) { 359 360 $scope.mainTypesDDLList.push( 361 { 362 text: pageList[i].PageName, 363 value: pageList[i].PageId 364 }); 365 } 366 } 367 368 var dropdownlist = $(DropdownId).data("kendoDropDownList"); 369 if (dropdownlist != null) { 370 dropdownlist.value(""); 371 } 372 373 // create DropDownList from input HTML element foe main Category 374 $(DropdownId).kendoDropDownList({ 375 dataTextField: "text", 376 dataValueField: "value", 377 enable: true, 378 dataSource: $scope.mainTypesDDLList, 379 index: 0 380 //change: onChange 381 }); 382 if (DropdownId === "#PageListForEdit") { 383 var EditDropdownList = $("#PageListForEdit").data("kendoDropDownList"); 384 if (EditDropdownList != null) { 385 EditDropdownList.value($scope.BannerData.PageId); 386 } 387 } 388 } 389 else { 390 //Error 391 alert('No response'); 392 } 393 394 395 }) 396 } 397 398 var files; 399 $scope.SaveNewBanner = function () { 400 401 var isValid = true; 402 var message = "Please fix all the errors :" + '<br>'; 403 404 var upload = $("#NewBannerImageUploader").data("kendoUpload"); 405 if (upload.getFiles().length === 0) { 406 message = message + "Banner image is mandatory" + '<br>'; 407 isValid = false; 408 } 409 410 if ($scope.BannerData.Title === '') { 411 message = message + " Title is Mandatory" + '<br>'; 412 isValid = false; 413 } 414 415 if ($scope.BannerData.Url === '') { 416 message = message + "URL is Mandatory" + '<br>'; 417 isValid = false; 418 419 } 420 if (isValidUrl($scope.BannerData.Url) == -1 && $scope.BannerData.Url !== '') { 421
422 message = message + "Navigation URL is invalid" + '<br>'; 423 isValid = false; 424 } 425 426 if (isValid === false) { 427 428 HideAlert('#SuccessMessageDiv'); 429 //set error message 430 SetHtml('#ModalErrorMessageDiv', message); 431 432 //show error message. 433 ShowAlertMessage('#ModalErrorMessageDiv'); 434 435 isValid = false; 436 //editor.focus(); 437 438 window.scrollTo(0, 0); 439 440 return; 441 } 442 if (isValid) { 443 444 $("#confirm").kendoConfirm({ 445 title: 'Save Banner', 446 content: 'Are you sure to save the new banner?', 447 messages: { 448 okText: 'Yes', 449 cancel: 'No' 450 } 451 }).data("kendoConfirm").result.done(function () { 452 //kendo.confirm("Are you sure, to Save new Banner").then(function () { 453 454 //show loading animation 455 displayLoading(true); 456 457 //set the values to the model. 458 var PageNameDropdown = $("#PageList").data("kendoDropDownList"); 459 460 if (PageNameDropdown != null) { 461 462 var pageId = PageNameDropdown.value(); 463 $scope.BannerData.PageId = pageId; 464 } 465 else { 466 $scope.BannerData.PageId = null; 467 } 468 469 //get the upload control and get the file names 470 var upload = $("#NewBannerImageUploader").data("kendoUpload"); 471 472 if (upload != null) { 473 474 var fileList = upload.getFiles(); 475 476 if (fileList != null) { 477 files = fileList[0]; 478 } 479 } 480 481 //get the form object 482 var form = document.getElementById('NewBannerForm'); 483 484 formData = new FormData(form); 485 var name = ''; 486 if (files != null) { 487 name = files.name; 488 } 489 490 //embedd the values 491 var encodedStr = name; 492 var parser = new DOMParser; 493 var dom = parser.parseFromString( 494 '<!doctype html><body>' + encodedStr, 495 'text/html'); 496 var decodedString = dom.body.textContent; 497 formData.append("BannerDataObject", kendo.stringify($scope.BannerData)); 498 formData.append("FileName", decodedString); 499 500 var promise = BannerDataServices.InsertBannerData(formData, $scope.token); 501 502 promise.then( 503 function (response) { 504 //hide the loading 505 displayLoading(false); 506 507 if (response.data.Status == 0) { 508 509 var msg = response.data.ReturnedResult; 510 511 if (msg.indexOf('data saved successfully') != -1) { 512 513 HideAlert('#ErrorMessageDiv'); 514 515 SetText('#SuccessMessageDiv', response.data.ReturnedResult); 516 ShowAlertMessage('#SuccessMessageDiv'); 517 $scope.BannerData.Title = ''; 518 $scope.BannerData.Url = ''; 519 var grid = $("#grid").data("kendoGrid"); 520 if (grid != null) { 521 grid.dataSource.read(); 522 } 523 524 clearUploadControl("#NewBannerImageUploader"); 525 526 $('#InsertBannerModal').modal('toggle'); 527 528 } 529 } 530 else { 531 532 if (response.data.ReturnedResult != null || response.data.ReturnedResult != undefined) { 533 var msg = response.data.ReturnedResult; 534 535 if (msg.indexOf('Record exists for the selected page') != -1) { 536 537 SetText('#ModalErrorMessageDiv', msg); 538 ShowAlertMessage('#ModalErrorMessageDiv'); 539 } 540 } 541 else { 542 //show this error in modal pop's error div 543 SetText('#ModalErrorMessageDiv', Constants.technicalError); 544 ShowAlertMessage('#ModalErrorMessageDiv'); 545 //Constants.technicalError //this contains the technical error message 546 } 547 } 548 }) 549 550 $('body').append($('<div id="confirm">')); 551 552 }).fail(function () { 553 $('body').append($('<div id="confirm">')); 554 }); 555 } 556 } 557 558 $scope.UpdateBanner = function () { 559 560 var isValid = true; 561 var message = "Please fix all the errors :" + '<br>'; 562 563 //var upload = $("#EditBannerImageUploader").data("kendoUpload"); 564 //if (upload.getFiles().length === 0) { 565 // message = message + "Banner image is mandatory" + '<br>'; 566 // isValid = false; 567 //} 568 569 if ($scope.BannerData.Title === '') { 570 message = message + " Title is Mandatory" + '<br>'; 571 isValid = false; 572 } 573 574 if ($scope.BannerData.Url === '') { 575 message = message + "URL is Mandatory" + '<br>'; 576 isValid = false; 577 578 } 579 if (isValidUrl($scope.BannerData.Url) == -1 && $scope.BannerData.Url !== '') { 580
581 message = message + "Navigation URL is invalid" + '<br>'; 582 isValid = false; 583 } 584 585 if (isValid === false) { 586 587 HideAlert('#SuccessMessageDiv'); 588 //set error message 589 SetHtml('#ModalErrorMessageDivForEdit', message); 590 591 //show error message. 592 ShowAlertMessage('#ModalErrorMessageDivForEdit'); 593 594 isValid = false; 595 //editor.focus(); 596 597 window.scrollTo(0, 0); 598 599 return; 600 } 601 if (isValid) { 602 603 604 $("#confirm1").kendoConfirm({ 605 title: 'Save Banner', 606 content: 'Are you sure, to Update existing Banner?', 607 messages: { 608 okText: 'Yes', 609 cancel: 'No' 610 } 611 }).data("kendoConfirm").result.done(function () { 612 613 //kendo.confirm("Are you sure, to Save new Banner").then(function () { 614 615 //show loading animation 616 displayLoading(true); 617 618 //set the values to the model. 619 var PageNameDropdown = $("#PageListForEdit").data("kendoDropDownList"); 620 621 if (PageNameDropdown != null) { 622 623 var pageId = PageNameDropdown.value(); 624 $scope.BannerData.PageId = pageId; 625 } 626 else { 627 $scope.BannerData.PageId = null; 628 } 629 630 //get the upload control and get the file names 631 var upload = $("#EditBannerImageUploader").data("kendoUpload"); 632 633 if (upload != null) { 634 635 var fileList = upload.getFiles(); 636 637 if (fileList != null) { 638 files = fileList[0]; 639 } 640 } 641 642 //get the form object 643 var form = document.getElementById('EditBannerForm'); 644 645 formData = new FormData(form); 646 var name = ''; 647 if (files != null) { 648 name = files.name; 649 } 650 651 //embedd the values 652 var encodedStr = name; 653 var parser = new DOMParser; 654 var dom = parser.parseFromString( 655 '<!doctype html><body>' + encodedStr, 656 'text/html'); 657 var decodedString = dom.body.textContent; 658 formData.append("BannerDataObject", kendo.stringify($scope.BannerData)); 659 formData.append("FileName", decodedString); 660 661 var promise = BannerDataServices.UpdateBannerData(formData, $scope.token); 662 663 promise.then( 664 function (response) { 665 //hide the loading 666 displayLoading(false); 667 668 if (response.data.Status == 0) { 669 670 //show this success message in base page's success div 671 //response.data.ReturnedResult //this contains the success message 672 673 HideAlert('#ErrorMessageDiv'); 674 675 SetText('#SuccessMessageDiv', response.data.ReturnedResult); 676 ShowAlertMessage('#SuccessMessageDiv'); 677 $scope.BannerData.Title = ''; 678 $scope.BannerData.Url = ''; 679 var grid = $("#grid").data("kendoGrid"); 680 if (grid != null) { 681 grid.dataSource.read(); 682 } 683 684 clearUploadControl("#EditBannerImageUploader"); 685 686 $('#EditBannerModal').modal('toggle'); 687 } 688 else { 689 if (msg2.indexOf('Record is empty!!') != -1) { 690 SetText('#ModalErrorMessageDivForEdit', 'Could not get related Record'); 691 ShowAlertMessage('#ModalErrorMessageDivForEdit'); 692 } 693 else { 694 SetText('#ModalErrorMessageDivForEdit', Constants.technicalError); 695 ShowAlertMessage('#ModalErrorMessageDivForEdit'); 696 //Constants.technicalError //this contains the technical error message 697 } 698 //show this error in modal pop's error div 699 700 } 701 }) 702 703 704 $('body').append($('<div id="confirm1">')); 705 706 }).fail(function () { 707 $('body').append($('<div id="confirm1">')); 708 }); 709 //}); 710 } 711 }; 712 713});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.