1function AuroraBrowser(settings) { 2 if (settings == undefined) { 3 settings = {}; 4 } 5 6 this.defaultSettings = { 7 dialog: '#auroraFileBrowseDialog', 8 dialogHash: '#auroraFileBrowseDialogHash', 9// dialogTitle : '#auroraFileBrowseTitle', 10// dialogClose : '#auroraFileClose', 11 dialogAccept: '.aurora-file-browse-accept', 12 selectedFileContainer: '#auroraFileBrowseSelected', 13 selectedFilePreview: '#auroraFileBrowseSelectedImage', 14 selectedFileName: '#auroraFileBrowseSelectedName', 15 selectedFileDescription: '#auroraFileBrowseSelectedDescription', 16 selectedFileSize: '#auroraFileBrowseSelectedSize', 17 selectedFileSizeContainer: '#auroraFileBrowseSelectedSizeContainer', 18 chooseSizePopover: '#auroraFileBrowsePopoverSize', 19 fileInfoPopover: '#auroraFileBrowsePopoverInfo', 20 searchBarForm: '#auroraFileBrowseSearchBarForm', 21 searchContentType: '#auroraFileBrowseFileTypeFilter', 22 searchTags: '#auroraFileBrowseFileTagsFilter', 23 searchTagsOpOr: '#auroraFileBrowseFileTagsOpOrFilter', 24 searchTagsOpAnd: '#auroraFileBrowseFileTagsOpAndFilter', 25 searchPagination: '#auroraFileBrowseFilePaginationFilter', 26 fileManagerBadge: '#auroraFileBrowseFileBadge', 27// fileManagerPanel : '#auroraFileBrowseFilePanel', 28 fileManagerPanelBody: '#auroraFileBrowseFilePanelBody', 29 fileManagerPanelFooter: '#auroraFileBrowseFilePanelFooter', 30 fileManagerFolderPanel: '#auroraFileBrowseFileFolderPanel', 31 fileManagerFolderCrumbs: "#auroraFileBrowseFileFolderBreadcrumb", 32 contentManagerBadge: '#auroraFileBrowseContentBadge', 33// contentManagerPanel : '#auroraFileBrowseContentPanel', 34 contentManagerPanelBody: '#auroraFileBrowseContentPanelBody', 35 contentManagerPanelFooter: '#auroraFileBrowseContentPanelFooter', 36// uploadPanel : '#auroraFileBrowseUploadPanel', 37// uploadPanelBody : '#auroraFileBrowseUploadPanelBody', 38 uploadFolderPanel: '#auroraFileBrowseUploadFolderPanel', 39 uploadFolderCrumbs: "#auroraFileBrowseUploadFolderBreadcrumb", 40 defaultPagination: 10, 41 defaultTagOp: 'or', 42 paramType: 'object', // string|object 43 callbackField: null, 44 callbackFunction: null, 45 initialFile: null 46 }; 47 48 this.settings = $.extend(this.defaultSettings, settings); 49 50 this.dialog = $(this.settings.dialog); 51 this.dialogHash = $(this.settings.dialogHash).val(); 52 this.dialogAccept = $(this.settings.dialogAccept); 53 this.chooseSizePopover = $(this.settings.chooseSizePopover); 54 this.fileInfoPopover = $(this.settings.fileInfoPopover); 55 this.selectedFileContainer = $(this.settings.selectedFileContainer); 56 this.selectedFilePreview = $(this.settings.selectedFilePreview); 57 this.selectedFileName = $(this.settings.selectedFileName); 58 this.selectedFileDescription = $(this.settings.selectedFileDescription); 59 this.selectedFileSize = $(this.settings.selectedFileSize); 60 this.selectedFileSizeContainer = $(this.settings.selectedFileSizeContainer); 61 62 this.searchBarForm = $(this.settings.searchBarForm); 63 this.searchTags = $(this.settings.searchTags); 64 this.searchTagsOpOr = $(this.settings.searchTagsOpOr); 65 this.searchTagsOpAnd = $(this.settings.searchTagsOpAnd); 66 if (this.settings.defaultTagOp.toLowerCase() == 'and') { 67 this.searchTagsOpOr.prop('checked', false); 68 this.searchTagsOpAnd.prop('checked', true); 69 } else { 70 this.searchTagsOpAnd.prop('checked', false); 71 this.searchTagsOpOr.prop('checked', true); 72 } 73 this.searchContentType = $(this.settings.searchContentType); 74 this.searchPagination = $(this.settings.searchPagination); 75 this.searchPagination.val(this.settings.defaultPagination); 76 77 this.fileManagerBadge = $(this.settings.fileManagerBadge); 78 this.fileManagerPanelBody = $(this.settings.fileManagerPanelBody); 79 this.fileManagerPanelFooter = $(this.settings.fileManagerPanelFooter); 80 this.fileManagerFolderPanel = $(this.settings.fileManagerFolderPanel); 81 this.fileManagerFolderCrumbs = $(this.settings.fileManagerFolderCrumbs); 82 83 this.contentManagerBadge = $(this.settings.contentManagerBadge); 84 this.contentManagerPanelBody = $(this.settings.contentManagerPanelBody); 85 this.contentManagerPanelFooter = $(this.settings.contentManagerPanelFooter); 86 87 this.uploadFolderPanel = $(this.settings.uploadFolderPanel); 88 this.uploadFolderCrumbs = $(this.settings.uploadFolderCrumbs); 89 90 // filter variables 91 this.tags = []; 92 this.contentType = ''; 93 this.pagination = this.settings.defaultPagination; 94 this.tagOp = this.settings.defaultTagOp.toLowerCase(); 95 96 // selected file variables 97 this.file = null; 98 this.selectedSize = null; 99 100 // file manager tab variables 101 this.filePage = 1; 102 this.fileFolder = null; 103 this.fileCount = 0; 104 105 // content manager tab variables 106 this.contentPage = 1; 107 this.contentCount = 0; 108 109 this.clearFolderOptionRegistered = false;
110 111 this.fileUpload = null; 112 this.uploadedFiles = {}; 113 this.busy = false; 114 115 this.initialize(); 116} 117 118AuroraBrowser.prototype.loadResources = function () { 119 var browser = this; 120 var head = document.getElementsByTagName('head')[0]; 121 122 // check and load tagsInput 123 if (typeof $.fn.tagsInput == 'undefined') { 124 // add the tagsInput javascript file 125 var script = document.createElement('script'); 126 script.type = 'text/javascript'; 127 script.src = '/js/tagsinput/1.3.3/jquery.tagsinput.min.js'; 128 script.onload = function() { 129 browser.initializeTags(browser); 130 } 131 head.appendChild(script); 132 133 // add the tagsInput CSS file 134 var css = document.createElement('link'); 135 css.rel = 'stylesheet'; 136 css.type = 'text/css'; 137 css.href = '/js/tagsinput/1.3.3/jquery.tagsinput.min.css'; 138 head.appendChild(css); 139 } else { 140 // create tags input area 141 this.initializeTags(this); 142 } 143 144 // check and load the ZeroClipboard 145 if (typeof ZeroClipboard == 'undefined') { 146 // load the javascript file 147 148 var script = document.createElement('script'); 149 script.type = 'text/javascript'; 150 script.src = '/js/ZeroClipboard/2.1.6/ZeroClipboard.min.js'; 151 head.appendChild(script); 152 } 153 154 // load the jquery-fileupload resources 155 if (typeof $.fn.fileupload == 'undefined') { 156 var script = document.createElement('script'); 157 script.type = 'text/javascript'; 158 script.src = '/js/jquery-file-upload/tmpl.min.js'; 159 head.appendChild(script); 160 161 script = document.createElement('script'); 162 script.type = 'text/javascript'; 163 script.src = '/js/jquery-file-upload/load-image.min.js'; 164 head.appendChild(script); 165 166 script = document.createElement('script'); 167 script.type = 'text/javascript'; 168 script.src = '/js/jquery-file-upload/canvas-to-blob.min.js'; 169 head.appendChild(script); 170 171 script = document.createElement('script'); 172 script.type = 'text/javascript'; 173 script.src = '/js/jquery-file-upload/9.5.7/jquery.iframe-transport.min.js'; 174 head.appendChild(script); 175 176 script = document.createElement('script'); 177 script.type = 'text/javascript'; 178 script.src = '/js/jquery-file-upload/9.5.7/jquery.fileupload.min.js'; 179 script.onload = function() { 180 var script = document.createElement('script'); 181 script.type = 'text/javascript'; 182 script.src = '/js/jquery-file-upload/9.5.7/jquery.fileupload-process.min.js'; 183 script.onload = function() { 184 var script = document.createElement('script'); 185 script.type = 'text/javascript'; 186 script.src = '/js/jquery-file-upload/9.5.7/jquery.fileupload-image.min.js'; 187 head.appendChild(script); 188 189 script = document.createElement('script'); 190 script.type = 'text/javascript'; 191 script.src = '/js/jquery-file-upload/9.5.7/jquery.fileupload-audio.min.js'; 192 head.appendChild(script); 193 194 script = document.createElement('script'); 195 script.type = 'text/javascript'; 196 script.src = '/js/jquery-file-upload/9.5.7/jquery.fileupload-video.min.js'; 197 head.appendChild(script); 198 199 script = document.createElement('script'); 200 script.type = 'text/javascript'; 201 script.src = '/js/jquery-file-upload/9.5.7/jquery.fileupload-validate.min.js'; 202 script.onload = function() { 203 var script = document.createElement('script'); 204 script.type = 'text/javascript'; 205 script.src = '/js/jquery-file-upload/9.5.7/jquery.fileupload-ui.min.js'; 206 script.onload = function() { 207 browser.initializeUpload(browser); 208 } 209 head.appendChild(script); 210 } 211 head.appendChild(script); 212 }; 213 head.appendChild(script); 214 }; 215 head.appendChild(script); 216 217 var css = document.createElement('link'); 218 css.rel = 'stylesheet'; 219 css.type = 'text/css'; 220 css.href = '/css/jquery-file-upload/9.5.7/jquery.fileupload.min.css'; 221 head.appendChild(css); 222 223 css = document.createElement('link'); 224 css.rel = 'stylesheet'; 225 css.type = 'text/css'; 226 css.href = '/css/jquery-file-upload/9.5.7/jquery.fileupload-ui.min.css'; 227 head.appendChild(css); 228 } else { 229 browser.initializeUpload(browser); 230 } 231}; 232 233AuroraBrowser.prototype.destroy = function() { 234 this.unregisterFolderOptionClick(); 235 236 if (this.fileUpload != null) { 237 this.fileUpload.fileupload('destroy'); 238 this.fileUpload = null; 239 } 240 241 this.hideWait(); 242}; 243 244AuroraBrowser.prototype.isBusy = function() { 245 return this.busy; 246}; 247 248AuroraBrowser.prototype.initialize = function () { 249 var browser = this; 250 251 // initialize bootstrap dialog 252 this.dialog.on('hidden.bs.modal', function () { 253 browser.destroy(); 254 browser.dialog.remove(); 255 if ($('.modal-backdrop').length > 0) { 256 $('body').addClass('modal-open'); 257 } 258 browser = null; 259 }).on('show.bs.modal', function () { 260 browser.dialog.css('zIndex', 65536); 261 }).modal('show'); 262 263 this.loadResources(); 264 265 // setup the accept button click 266 this.dialogAccept.click(function (event) { 267 event.preventDefault(); 268 event.stopPropagation(); 269 270 if(browser.isBusy()) { 271 browser.showMessage('Please wait, still processing your last request'); 272 } else { 273 browser.dialogAccept.prop('disabled', true); 274 browser.showWait(); 275 276 setTimeout(function () {
277 browser.acceptFile(); 278 279 browser.hideWait(); 280 //browser.dialogAccept.prop('disabled', false); 281 browser.dialog.modal('hide'); 282 }, 10); 283 } 284 }); 285 286 // setup choose file size popover 287 this.chooseSizePopover.data('browser', this); 288 this.chooseSizePopover.popover({ 289 container: browser.settings.selectedFileContainer, 290 content: browser.getAvailableFileSize, 291 html: true, 292 placement: 'auto right', 293 title: 'Choose A Size', 294 viewport: { 295 "selector": browser.settings.selectedFileContainer + ' .media', 296 "padding": 0 297 } 298 }).on('shown.bs.popover', function () { 299 $('body').on('click', {browser: browser}, browser.hideChooseSizePopover); 300 }).on('hidden.bs.popover', function () { 301 $('body').off('click', browser.hideChooseSizePopover); 302 }); 303 304 // setup click event handler to change selected file size 305 this.selectedFileContainer.on('click', '.aurora-file-browse-size-option', function (event) { 306 event.preventDefault(); 307 var fileId = $(this).data('id'); 308 if (fileId == browser.file.id) { 309 browser.setSelectedSize(browser.file); 310 } else { 311 for (var i in browser.file.children) { 312 if (fileId == browser.file.children[i].id) { 313 browser.setSelectedSize(browser.file.children[i]); 314 break; 315 } 316 } 317 } 318 319 browser.chooseSizePopover.popover('hide'); 320 }); 321 322 // setup click event handler to create new custom size image 323 this.selectedFileContainer.on('click', '#auroraFileBrowseSizeCreateSize', function (event) { 324 event.preventDefault(); 325 var newWidth = parseInt($('#auroraFileBrowseSizeNewWidth').val()); 326 if (isNaN(newWidth) || newWidth == 0) { 327 browser.showError('Valid Width Is Required'); 328 $('#auroraFileBrowseSizeNewWidth').focus(); 329 } else { 330 var newFile = new AuroraFile({}, browser.file.sourceType); 331 newFile.id = (new Date()).getTime(); 332 newFile.parentId = browser.file.id; 333 newFile.type = 'new'; 334 newFile.caption = browser.file.caption; 335 newFile.filename = browser.file.filename; 336 newFile.contentType = browser.file.content_type; 337 newFile.width = newWidth; 338 newFile.height = parseInt(( browser.file.height * newWidth ) / browser.file.width); 339 340 browser.file.addChild(newFile); 341 browser.setSelectedSize(newFile); 342 343 browser.chooseSizePopover.popover('hide') 344 } 345 }); 346 347 // setup full file detail popover 348 this.fileInfoPopover.data('browser', this); 349 this.fileInfoPopover.popover({ 350 container: browser.settings.selectedFileContainer, 351 content: browser.generateFileInfoDisplay, 352 html: true, 353 placement: 'auto left', 354 title: 'File Information', 355 viewport: { 356 "selector": browser.settings.selectedFileContainer + ' .media', 357 "padding": 0 358 } 359 }).on('shown.bs.popover', function () { 360 $('body').on('click', {browser: browser}, browser.hideFileInfoPopover); 361 }).on('hidden.bs.popover', function () { 362 $('body').off('click', browser.hideFileInfoPopover); 363 }); 364 365 // override the form submit 366 this.searchBarForm.submit(function (event) { 367 event.preventDefault(); 368 browser.loadTabs(); 369 }); 370 371 // reload tab content when the pagination or file content is changed] 372 this.searchContentType.change(function () { 373 browser.setContentType(this.value); 374 }); 375 this.contentType = this.searchContentType.val(); 376 377 this.searchPagination.change(function () { 378 browser.setPagination(this.value); 379 }); 380 381 // reload the tab content when the tag operation is changed 382 this.searchTagsOpAnd.change(function () { 383 var val = $(this).val(); 384 browser.setTagOp(val); 385 }); 386 387 this.searchTagsOpOr.change(function () { 388 var val = $(this).val(); 389 browser.setTagOp(val); 390 }); 391
392 // set click handlers to select the uploaded file 393 $('#auroraFileBrowseUploadedFiles').on('click', '.aurora-file-browse-uploaded-file', function(event) { 394 event.preventDefault(); 395 var fileId = $(this).data('id'); 396 if(browser.uploadedFiles[fileId]) { 397 browser.setSelectedFile(browser.uploadedFiles[fileId]); 398 } 399 }); 400 401 this.loadInitialFile(); 402 403 // initial load of tab content 404// this.loadTabs(); 405 this.loadFolders(true); 406 this.loadContentManager(); 407}; 408 409AuroraBrowser.prototype.loadInitialFile = function() { 410 var browser = this; 411 412 if(this.settings.initialFile != null) { 413 // load the initial file 414 var dataObject = {}; 415 var type = 'id'; 416 if(isNaN(parseInt(this.settings.initialFile))) { 417 dataObject['file_url'] = this.settings.initialFile; 418 type = 'url'; 419 } else { 420 dataObject['file_id'] = this.settings.initialFile; 421 } 422 423 $.ajax({ 424 url: '/service/file/manage/getFileDetails', 425 dataType: 'json', 426 data: dataObject, 427 success: function(data) { 428 if(data.success) { 429 data.data.file.Children = data.data.file.children; 430 var file = new AuroraFile(data.data.file, 'file'); 431 browser.setSelectedFile(file); 432 433 for(var i in file.children) { 434 if(type == 'url') { 435 if(file.children[i].url == browser.settings.initialFile) { 436 browser.setSelectedSize(file.children[i]); 437 break; 438 } 439 } else { 440 if(file.children[i].id == browser.settings.initialFile) { 441 browser.setSelectedSize(file.children[i]); 442 break; 443 } 444 } 445 } 446 } 447 }, 448 }); 449 } 450}; 451 452AuroraBrowser.prototype.acceptFile = function() { 453 if (this.selectedSize != null) { 454 var browser = this; 455 if (this.selectedSize.sourceType == 'content') { 456 var dataObject = { 457 url: this.file.url, 458 filename: this.file.getName() 459 } 460 if (this.selectedSize.type == 'new') { 461 dataObject['width'] = this.selectedSize.width; 462 } 463 $.ajax({ 464 url: '/service/file/manage/importFile', 465 async: false, 466 data: dataObject, 467 dataType: 'json', 468 success: function (data) { 469 if (data.success) { 470 // file successfully imported into file manager 471 browser.setSelectedSize(new AuroraFile(data.data[data.data.selected_index], 'file')); 472 } else { 473 browser.showError(data.message); 474 } 475 }, 476 error: function () { 477 browser.showError('Unable to import Content Manager File'); 478 } 479 }); 480 } else if (this.selectedSize.type == 'new') { 481 var dataObject = { 482 image_id: this.selectedSize.parentId, 483 width: this.selectedSize.width 484 } 485 $.ajax({ 486 url: '/service/file/manage/resizeImage', 487 async: false, 488 data: dataObject, 489 dataType: 'json', 490 success: function (data) { 491 if (data.success) { 492 // new image size successfully created 493 browser.setSelectedSize(new AuroraFile(data.data, 'file')); 494 } else { 495 browser.showError(data.message); 496 } 497 }, 498 error: function () { 499 browser.showError('Unable to create new image size'); 500 } 501 }); 502 } 503 } 504 505 if (this.settings.callbackField != null) { 506 $(this.settings.callbackField).val(this.selectedSize.url); 507 } 508 509 if (typeof this.settings.callbackFunction == 'function') { 510 if(this.settings.paramType == 'string') { 511 this.settings.callbackFunction(this.selectedSize.url); 512 } else { 513 this.settings.callbackFunction(this.selectedSize); 514 } 515 } 516}; 517 518AuroraBrowser.prototype.hideFileInfoPopover = function (event) { 519 event.preventDefault(); 520 var target = event.target; 521 var parent = $(target).parents('.popover'); 522 if (parent.length == 0) { 523 event.data.browser.fileInfoPopover.popover('hide'); 524 } 525}; 526 527AuroraBrowser.prototype.hideChooseSizePopover = function (event) { 528 event.preventDefault(); 529 var target = event.target; 530 var parent = $(target).parents('.popover'); 531 if (parent.length == 0) { 532 event.data.browser.chooseSizePopover.popover('hide'); 533 } 534}; 535 536AuroraBrowser.prototype.initializeTags = function (browser, attempt) { 537 if (attempt == undefined) { 538 attempt = 1; 539 } 540 if (typeof $.fn.tagsInput == "undefined") { 541 // defer initialization for 50 ms with a max of 1 second 542 if (attempt < 20) { 543 attempt++; 544 setTimeout(function () { 545 browser.initializeTags(browser, attempt) 546 }, 50); 547 } 548 } else { 549 browser.searchTags.tagsInput({ 550 defaultText: 'Search Tags' 551 }); 552 } 553}; 554 555AuroraBrowser.prototype.initializeUpload = function (browser, attempt) { 556 if (attempt == undefined) { 557 attempt = 1; 558 } 559 if (typeof $.fn.fileupload == "undefined" || typeof $.blueimp == 'undefined') { 560 // defer initialization for 50 ms with a max of 1 second 561 if (attempt < 20) { 562 attempt++; 563 setTimeout(function () { 564 browser.initializeUpload(browser, attempt) 565 }, 50); 566 } 567 } else { 568 var folderId = browser.getFileFolderId(); 569 if(folderId == null) { 570 folderId = ''; 571 } 572 browser.fileUpload = $('#auroraFileBrowseFileupload').fileupload({ 573 url: '/service/file/manage/uploadfile', 574 autoUpload: true, 575 dataType: 'json', 576 disableImageResize: true, 577 dropZone: $('#auroraFileBrowseDropzone'), 578 fileInput: $('#auroraFileBrowseUploadInput'), 579 formData: { 580 folder_id: folderId 581 }, 582 // override getFilesFromResponse so that the 583 // javascript templates will work for 584 // processing the response 585 getFilesFromResponse: function (data) { 586 var files = []; 587 588 if (data.result && data.result.data) { 589 files = [data.result.data]; 590 } 591 592 return files; 593 } 594 }).bind('fileuploaddone', function (e, data) { 595 browser.loadFileManager(); 596 if (data['result']['success'] === false) { 597 if (data["result"]["message"].includes('file size')) { 598 browser.showWarning(data["result"]["message"]); 599 } else { 600 browser.showError(data["result"]["message"]); 601 } 602 603 return; 604 } 605 606 if(data.result.data) { 607 var file = data.result.data.original; 608 if(data.result.data.squarethumb) { 609 file.thumb = data.result.data.squarethumb.url; 610 } else if (data.result.data.thumb) { 611 file.thumb = data.result.data.thumb.url; 612 } else { 613 file.thumb = data.result.data.original.url; 614 } 615 file.Children = {}; 616 617 for(var i in data.result.data) { 618 if(i != 'original') { 619 file.Children[i] = data.result.data[i]; 620 } 621 } 622 623 file = new AuroraFile(file); 624 browser.uploadedFiles[file.id] = file; 625 browser.setSelectedFile(file); 626 } 627 }); 628 } 629}; 630 631AuroraBrowser.prototype.getAvailableFileSize = function () { 632 var browser = $(this).data('browser'); 633 634 var html = '<ul id="auroraFileBrowseSizeOptions" class="aurora-file-browse-size-options">'; 635 var selectedId = browser.selectedSize == null ? null : browser.selectedSize.id; 636 637 var selectedClass = ''; 638 639 if (browser.file.children.length > 0) { 640 641 for (var i in browser.file.children) { 642 selectedClass = ''; 643 if (selectedId == browser.file.children[i].id) { 644 selectedClass = ' selected'; 645 } 646 html += '<li class="aurora-file-browse-size-option' + selectedClass + '" data-id="' + browser.file.children[i].id + '">' + 647 '<i class="fa fa-check-square-o"></i>' + 648 browser.file.children[i].getImageSize(true) + 649 '</li>'; 650 } 651 } 652 653 selectedClass = ''; 654 if (selectedId == browser.file.id) { 655 selectedClass = ' selected'; 656 } 657 html += '<li class="aurora-file-browse-size-option' + selectedClass + '" data-id="' + browser.file.id + '">' + 658 '<i class="fa fa-check-square-o"></i>' + 659 browser.file.getImageSize(true) + 660 '</li>'; 661 662 html += '</ul>'; 663 664 html += '<hr>'; 665 666 html += '<div>' + 667 '<div class="form-group col-xs-10" style="padding: 0;">' + 668 '<label>Create Width</label>' + 669 '<div class="input-group">' + 670 '<input id="auroraFileBrowseSizeNewWidth" type="number" class="form-control" placeholder="Enter New Width" min="1" max="' + browser.file.width + '">' + 671 '<span class="input-group-addon">px</span>' + 672 '</div>' + 673 '</div>' + 674 '<div class="form-group col-xs-1">' + 675 '<label> </label>' + 676 '<i id="auroraFileBrowseSizeCreateSize" class="fa fa-arrow-circle-up"></i>' + 677 '</div>' + 678 '</div>'; 679 680 return html; 681}; 682 683AuroraBrowser.prototype.generateFileInfoDisplay = function () { 684 var browser = $(this).data('browser'); 685 686 var html = ''; 687 if (browser.file == null) { 688 html = ''; 689 } else { 690 html = '<ul id="auroraFileBrowseInfoPopover" class="aurora-file-browse-info-popover">' + 691 '<li><label>Name</label>' + browser.file.getName() + '</li>' + 692 '<li><label>Description</label>' + browser.file.getDescription() + '</li>' + 693 '<li><label>Caption</label>' + browser.file.caption + '</li>' + 694 '<li><label>Dimensions</label>' + browser.file.getImageSize(true) + '</li>' + 695 '<li><label>Size</label>' + browser.file.size + '</li>' + 696 '<li><label>Content Type</label>' + browser.file.contentType + '</li>' + 697 '<li><label>URL</label>' + 698 '<a id="auroraFileBrowseInfoUrlLink" class="zclip" href="' + browser.file.url + '" target="_blank" data-clipboard-text="' + browser.file.url + '" >' + 699 '<i class="fa fa-link"></i>' + 700 '</a></li>' + 701 '<li><label>Upload Time</label>' + browser.file.createdDate + '</li>'; 702 703 if (typeof ZeroClipboard != undefined) { 704 html += '<script>' + 705 'var client = new ZeroClipboard( document.getElementById("auroraFileBrowseInfoUrlLink") );' + 706 'client.on( "ready", function( readyEvent ) { ' + 707 ' client.on( "aftercopy", function( event ) { ' + 708 ' le_show_message("Copied To Clipboard", "File URL" );' + 709 ' });' + 710 '});' + 711 '$("#auroraFileBrowseInfoUrlLink").click(function(event) { event.preventDefault(); });' + 712 '</scr' + 'ipt>'; 713 } 714 } 715 716 return html; 717}; 718 719AuroraBrowser.prototype.unregisterFolderOptionClick = function () { 720 // stop hide folder popup options on any other click 721 if (this.clearFolderOptionRegistered) { 722 $('body').off('click', this.clearFolderOption); 723 this.clearFolderOptionRegistered = false;
724 } 725}; 726 727AuroraBrowser.prototype.registerFolderOptionClick = function () { 728 // hide folder popup options on any other click 729 if (!this.clearFolderOptionRegistered) { 730 var eventData = { 731 broswer: this 732 }; 733 $('body').click(eventData, this.clearFolderOption); 734 this.clearFolderOptionRegistered = true; 735 } 736}; 737 738AuroraBrowser.prototype.clearFolderOption = function (event) { 739 if (event.data != undefined && event.data.broswer != undefined) { 740 event.data.broswer.fileManagerFolderPanel.find('.abn-tree-row.visible .dropdown-menu').hide(); 741 event.data.broswer.fileManagerFolderPanel.find('.abn-tree-row.visible').removeClass('visible'); 742 event.data.broswer.uploadFolderPanel.find('.abn-tree-row.visible .dropdown-menu').hide(); 743 event.data.broswer.uploadFolderPanel.find('.abn-tree-row.visible').removeClass('visible'); 744 event.data.broswer.unregisterFolderOptionClick(); 745 } 746}; 747 748AuroraBrowser.prototype.loadFolders = function (setFolder) { 749 if (setFolder == undefined) { 750 setFolder = false; 751 } 752 var browser = this; 753 $.ajax({ 754 url: '/service/file/manage/getFolders', 755 dataType: 'json', 756 beforeSend: function () { 757 browser.showWait(); 758 }, 759 success: function (data) { 760 if (data.success) { 761 browser.populateFolders(data.data); 762 if (setFolder) { 763 var folder = browser.fileManagerFolderPanel.find('.abn-tree-row:first').data('folder'); 764 browser.setFileFolder(folder); 765 } 766 } else { 767 browser.showError(data.message); 768 } 769 browser.hideWait(); 770 }, 771 error: function () { 772 browser.showError('Unable to load folders!'); 773 browser.hideWait(); 774 } 775 }); 776}; 777 778AuroraBrowser.prototype.populateFolders = function (folders) { 779 // remove all existing folders 780 this.fileManagerFolderPanel.empty(); 781 this.uploadFolderPanel.empty(); 782 783 var fileManagerFolderList = document.createElement('ul'); 784 fileManagerFolderList.className = "nav nav-list nav-pills nav-stacked abn-tree"; 785 786 var uploadFolderList = document.createElement('ul'); 787 uploadFolderList.className = "nav nav-list nav-pills nav-stacked abn-tree"; 788 789 for (var i in folders) { 790 var folder = new AuroraFolder(folders[i]); 791 792 this.addFolderItem(folder, fileManagerFolderList, 1); 793 this.addFolderItem(folder, uploadFolderList, 1); 794 } 795 796 this.fileManagerFolderPanel.append(fileManagerFolderList); 797 this.uploadFolderPanel.append(uploadFolderList); 798}; 799 800AuroraBrowser.prototype.addFolderItem = function (folder, folderContainer, level) { 801 // create the folder DOM element 802 var folderItem = this.generateFolderDisplayElement(folder, level); 803 804 folderContainer.appendChild(folderItem); 805 806 for (var i in folder.children) { 807 this.addFolderItem(folder.children[i], folderContainer, level + 1); 808 } 809}; 810 811AuroraBrowser.prototype.getFileManagerCount = function () { 812 return this.fileCount; 813}; 814 815AuroraBrowser.prototype.setFileManagerCount = function (count) { 816 this.fileCount = parseInt(count); 817 if (this.fileCount == undefined || isNaN(this.fileCount)) { 818 this.fileCount = 0; 819 } 820 this.fileManagerBadge.text(this.fileCount); 821}; 822 823AuroraBrowser.prototype.getContentManagerCount = function () { 824 return this.contentCount; 825}; 826 827AuroraBrowser.prototype.setContentManagerCount = function (count) { 828 this.contentCount = parseInt(count); 829 if (this.contentCount == undefined || isNaN(this.contentCount)) { 830 this.contentCount = 0; 831 } 832 this.contentManagerBadge.text(this.contentCount); 833}; 834 835AuroraBrowser.prototype.getContentType = function () { 836 return this.contentType; 837}; 838 839AuroraBrowser.prototype.setContentType = function (contentType) { 840 this.contentType = contentType; 841 this.loadTabs(); 842}; 843 844AuroraBrowser.prototype.getTagOp = function () { 845 return this.tagOp; 846}; 847 848AuroraBrowser.prototype.setTagOp = function (tagOp) { 849 if (tagOp != undefined && tagOp.toLowerCase() == 'and') { 850 this.tagOp = 'and' 851 this.searchTagsOpOr.prop('checked', false); 852 this.searchTagsOpAnd.prop('checked', true); 853 } else { 854 this.tagOp = 'or'; 855 this.searchTagsOpAnd.prop('checked', false); 856 this.searchTagsOpOr.prop('checked', true); 857 } 858 this.loadTabs(); 859}; 860 861AuroraBrowser.prototype.getPagination = function () { 862 return this.pagination; 863}; 864 865AuroraBrowser.prototype.setPagination = function (pagination) { 866 this.pagination = parseInt(pagination); 867 if (this.pagination == undefined || isNaN(this.pagination)) { 868 this.pagination = this.settings.defaultPagination; 869 this.searchPagination.val(this.pagination); 870 } 871 this.loadTabs(); 872}; 873 874AuroraBrowser.prototype.getFilePage = function () { 875 return this.filePage; 876}; 877 878AuroraBrowser.prototype.setFilePage = function (page, reload) { 879 if (reload == undefined) { 880 reload = true; 881 } 882 this.filePage = parseInt(page); 883 if (this.filePage == undefined || isNaN(this.filePage)) { 884 this.filePage = 1; 885 } 886
887 if (reload) { 888 this.loadFileManager(); 889 } 890}; 891 892AuroraBrowser.prototype.getContentPage = function () { 893 return this.contentPage; 894}; 895 896AuroraBrowser.prototype.setContentPage = function (page, reload) { 897 if (reload == undefined) { 898 reload = true; 899 } 900 this.contentPage = parseInt(page); 901 if (this.contentPage == undefined || isNaN(this.contentPage)) { 902 this.contentPage = 1; 903 } 904 905 if (reload) { 906 this.loadContentManager(); 907 } 908}; 909 910AuroraBrowser.prototype.getFileFolder = function () { 911 return this.fileFolder; 912}; 913 914AuroraBrowser.prototype.getFileFolderId = function () { 915 if (this.fileFolder instanceof AuroraFolder) { 916 return this.fileFolder.id; 917 } 918 return null; 919}; 920 921AuroraBrowser.prototype.setFileFolder = function (folder) { 922 this.fileFolder = folder; 923 if (this.fileFolder == undefined || typeof folder !== 'object') { 924 this.fileFolder = null; 925 } 926 var id = this.getFileFolderId(); 927 928 // set the folder element as active in the folder trees 929 this.fileManagerFolderPanel.find('.abn-tree-row.active').removeClass('active'); 930 this.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + id + ']').addClass('active'); 931 this.uploadFolderPanel.find('.abn-tree-row.active').removeClass('active'); 932 this.uploadFolderPanel.find('.abn-tree-row[data-folder_id=' + id + ']').addClass('active'); 933 934 // make sure the folder is showing 935 this.expandParentFolders(folder); 936 937 this.generateFolderCrumbs(folder); 938 939 this.setFilePage(1); 940 941 // set the folder id of the fileUpload object 942 if(this.fileUpload != null) { 943 if(id == null) { 944 id = ''; 945 } 946 this.fileUpload.fileupload('option', 'formData', {folder_id: id}); 947 } 948}; 949 950AuroraBrowser.prototype.setFileFolderId = function (folderId) { 951 var folderElement = this.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folderId + ']'); 952 if (folderElement.length > 0) { 953 var folder = folderElement.data('folder'); 954 this.setFileFolder(folder); 955 } 956}; 957 958AuroraBrowser.prototype.getSearchTags = function () { 959 var searchString = this.searchTags.val().trim(); 960 var searchArray = null; 961 if (searchString.length > 0) { 962 searchArray = searchString.split(","); 963 if (searchArray.length > 0) { 964 for (var i in searchArray) { 965 searchArray[i] = searchArray[i].trim(); 966 } 967 } 968 } else { 969 searchArray = []; 970 } 971 972 return searchArray; 973}; 974 975AuroraBrowser.prototype.generateFolderCrumbs = function (folder) { 976 this.fileManagerFolderCrumbs.empty(); 977 this.uploadFolderCrumbs.empty(); 978 this.generateParentFolderCrumb(folder, folder.id); 979}; 980 981AuroraBrowser.prototype.generateParentFolderCrumb = function (folder, activeFolderId) { 982 var parentElement = this.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.parentId + ']'); 983 if (parentElement.length > 0) { 984 var parentFolder = parentElement.data('folder'); 985 this.generateParentFolderCrumb(parentFolder, activeFolderId); 986 } 987 988 var fileManagerCrumb = this.generateFolderCrumb(folder, activeFolderId); 989 this.fileManagerFolderCrumbs.append(fileManagerCrumb); 990 991 var uploadCrumb = this.generateFolderCrumb(folder, activeFolderId); 992 this.uploadFolderCrumbs.append(uploadCrumb); 993}; 994 995AuroraBrowser.prototype.generateFolderCrumb = function (folder, activeFolderId) { 996 var browser = this; 997 var crumb = document.createElement('li'); 998 999 if (folder.id == activeFolderId) { 1000 crumb.className = 'active'; 1001 crumb.appendChild(document.createTextNode(folder.getName())); 1002 } else { 1003 var crumbLink = document.createElement('a'); 1004 crumbLink.href = '#'; 1005 crumbLink.appendChild(document.createTextNode(folder.getName())); 1006 crumbLink.onclick = function (event) { 1007 event.preventDefault(); 1008 browser.setFileFolder(folder); 1009 }; 1010 crumb.appendChild(crumbLink); 1011 } 1012 1013 return crumb; 1014}; 1015 1016AuroraBrowser.prototype.expandCollapseFileFolder = function (folder) { 1017 var fileManagerFolderElement = this.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1018 var fileManagerIconElement = fileManagerFolderElement.find('.tree-icon'); 1019 1020 var uploadFolderElement = this.uploadFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1021 var uploadIconElement = uploadFolderElement.find('.tree-icon'); 1022 1023 var state = fileManagerFolderElement.data('state'); 1024 1025 if (state == 'closed') { 1026 // expand the folder 1027 fileManagerFolderElement.data('state', 'opened'); 1028 fileManagerIconElement.addClass('fa-chevron-down').removeClass('fa-chevron-right'); 1029 uploadFolderElement.data('state', 'opened'); 1030 uploadIconElement.addClass('fa-chevron-down').removeClass('fa-chevron-right'); 1031 1032 // show subfolders 1033 fileManagerFolderElement.nextAll('[data-parent_folder_id=' + folder.id + ']').show(); 1034 uploadFolderElement.nextAll('[data-parent_folder_id=' + folder.id + ']').show(); 1035 for (var i in folder.children) { 1036 this.showSubfolder(folder.children[i], fileManagerFolderElement); 1037 } 1038 } else if (state == 'opened') { 1039 // collapse the folder 1040 fileManagerFolderElement.data('state', 'closed'); 1041 fileManagerIconElement.addClass('fa-chevron-right').removeClass('fa-chevron-down'); 1042 uploadFolderElement.data('state', 'closed'); 1043 uploadIconElement.addClass('fa-chevron-right').removeClass('fa-chevron-down'); 1044 1045 // hide subfolders 1046 for (var i in folder.children) { 1047 this.hideSubfolder(folder.children[i]); 1048 } 1049 } 1050}; 1051 1052AuroraBrowser.prototype.expandParentFolders = function (folder) { 1053 if (folder.parentId != null) { 1054 var fileParent = this.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.parentId + ']'); 1055 var parentFolder = fileParent.data('folder'); 1056 1057 var fileState = fileParent.data('state'); 1058 1059 if (fileState == 'closed') { 1060 this.expandCollapseFileFolder(parentFolder); 1061 } 1062 1063 this.expandParentFolders(parentFolder); 1064 } 1065}; 1066 1067AuroraBrowser.prototype.toggleFolderOption = function (folder, container) { 1068 var folderElement = container.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1069 1070 if (folderElement.hasClass('visible')) { 1071 // remove the visible popup 1072 folderElement.removeClass('visible'); 1073 folderElement.find('.dropdown-menu').hide(); 1074 this.unregisterFolderOptionClick(); 1075 } else { 1076 // show the popup 1077 // hide any others that are showing 1078 container.find('.abn-tree-row.visible .dropdown-menu').hide(); 1079 container.find('.abn-tree-row.visible').removeClass('visible'); 1080 folderElement.addClass('visible'); 1081 folderElement.find('.dropdown-menu').show(); 1082 this.registerFolderOptionClick(); 1083 } 1084}; 1085 1086AuroraBrowser.prototype.showSubfolder = function (folder, parentElement) { 1087 var fileManagerFolderElement = this.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1088 var uploadFolderElement = this.uploadFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1089 if (parentElement.data('state') == 'opened') { 1090 fileManagerFolderElement.show(); 1091 uploadFolderElement.show(); 1092 } 1093 1094 // hide subfolders 1095 for (var i in folder.children) { 1096 this.showSubfolder(folder.children[i], fileManagerFolderElement); 1097 } 1098}; 1099 1100AuroraBrowser.prototype.hideSubfolder = function (folder) { 1101 var fileManagerFolderElement = this.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1102 var uploadFolderElement = this.uploadFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1103 fileManagerFolderElement.hide(); 1104 uploadFolderElement.hide(); 1105 1106 // hide subfolders 1107 for (var i in folder.children) { 1108 this.hideSubfolder(folder.children[i]); 1109 } 1110}; 1111 1112AuroraBrowser.prototype.getFileManagerUrl = function () { 1113 var folderId = this.getFileFolderId(); 1114 if (folderId == null) { 1115 folderId = ''; 1116 } 1117 var url = '/service/file/manage/getFiles?folder_id=' + folderId + '&page=' + this.filePage
1117+ 1118 '&results_per_page=' + this.pagination + '&content_type=' + this.contentType + 1119 '&tagop=' + this.tagOp; 1120 var tags = this.getSearchTags(); 1121 if (tags.length > 0) { 1122 for (var i in tags) { 1123 url += '&tags[]=' + tags[i]; 1124 } 1125 } 1126 return url; 1127}; 1128 1129AuroraBrowser.prototype.getContentManagerUrl = function () { 1130 var url = '/service/contentmanager/manage/getFiles?page=' + this.contentPage + 1131 '&results_per_page=' + this.pagination + '&content_type=' + this.contentType + 1132 '&tagop=' + this.tagOp; 1133 var tags = this.getSearchTags(); 1134 if (tags.length > 0) { 1135 for (var i in tags) { 1136 url += '&tags[]=' + tags[i]; 1137 } 1138 } 1139 return url; 1140}; 1141 1142AuroraBrowser.prototype.loadTabs = function () { 1143 this.loadFileManager(); 1144 this.loadContentManager(); 1145}; 1146 1147AuroraBrowser.prototype.loadFileManager = function () { 1148 var browser = this; 1149 $.ajax({ 1150 url: browser.getFileManagerUrl(), 1151 dataType: 'json', 1152 beforeSend: function () { 1153 browser.showWait(); 1154 }, 1155 success: function (data) { 1156 if (data.success) { 1157 browser.setFileManagerCount(data.data.total_records); 1158 browser.setFilePage(data.data.page, false); 1159 browser.populateFileManager(data.data.records); 1160 browser.populateFileManagerNavigation(data.data.page_nav); 1161 } else { 1162 browser.showError(data.message); 1163 } 1164 browser.hideWait(); 1165 }, 1166 error: function () { 1167 browser.showError('Unable to load files!'); 1168 browser.hideWait(); 1169 } 1170 }); 1171}; 1172 1173AuroraBrowser.prototype.populateFileManager = function (files) { 1174 // remove all existing files 1175 this.fileManagerPanelBody.empty(); 1176 1177 for (var i in files) { 1178 var file = new AuroraFile(files[i], 'file'); 1179 1180 // build new dom element 1181 var fileElement = this.generateFileDisplayElement(file); 1182 1183 this.fileManagerPanelBody.append(fileElement); 1184 } 1185}; 1186 1187AuroraBrowser.prototype.populateContentManager = function (files) { 1188 // remove all existing files 1189 //this.contentManagerPanelBody.empty(); 1190 1191 for (var i in files) { 1192 var file = new AuroraFile(files[i], 'content'); 1193 1194 // build new dom element 1195 var fileElement = this.generateFileDisplayElement(file); 1196 1197 this.contentManagerPanelBody.append(fileElement); 1198 } 1199}; 1200 1201AuroraBrowser.prototype.setSelectedFile = function (file) { 1202 this.file = file; 1203 1204 // set thumbnail image preview 1205 this.selectedFilePreview.attr('src', file.getThumbnail()); 1206 this.selectedFilePreview.attr('alt', file.getName()); 1207 1208 // set file name and description 1209 this.selectedFileName.text(file.getName()); 1210 this.selectedFileDescription.text(file.getDescription()); 1211 1212 if (file.isImage()) { 1213 //show the file size options 1214 this.selectedFileSizeContainer.show(); 1215 this.selectedFileSize.html(file.getImageSize(true)); 1216 this.selectedSize = file; 1217 } else { 1218 // hide the file size options 1219 this.selectedFileSizeContainer.hide(); 1220 this.selectedFileSize.text(''); 1221 this.selectedSize = null; 1222 } 1223 1224 this.selectedFileContainer.show(); 1225 this.dialog.animate({scrollTop: 0}, 'medium'); 1226}; 1227 1228AuroraBrowser.prototype.setSelectedSize = function (file) { 1229 this.selectedSize = file; 1230 1231 // set file name and description 1232 this.selectedFileName.text(file.getName()); 1233 this.selectedFileDescription.text(file.getDescription()); 1234 1235 //show the file size options 1236 this.selectedFileSizeContainer.show(); 1237 this.selectedFileSize.html(file.getImageSize(true)); 1238}; 1239 1240AuroraBrowser.prototype.populateFileManagerNavigation = function (nav) { 1241 var browser = this; 1242 // remove all existing page navigation 1243 browser.fileManagerPanelFooter.empty(); 1244 1245 var navigation = document.createElement('nav'); 1246 var list = document.createElement('ul'); 1247 list.className = 'pagination'; 1248 navigation.appendChild(list); 1249 1250 for (var i in nav) { 1251 var listItem = document.createElement('li'); 1252 1253 var link = document.createElement('a'); 1254 link.className = 'aurora-file-browse-navigation'; 1255 link.setAttribute('href', '#'); 1256 var linkText = document.createTextNode(nav[i].label); 1257 link.appendChild(linkText); 1258 1259 if (nav[i].link.length == 0) { 1260 listItem.className = 'active'; 1261 } else { 1262 link.setAttribute('data-page', nav[i].link.replace(/[^0-9]/g, '')); 1263 link.onclick = function (event) { 1264 event.preventDefault(); 1265 var page = this.getAttribute('data-page'); 1266 browser.setFilePage(page); 1267 }; 1268 } 1269 1270 listItem.appendChild(link); 1271 list.appendChild(listItem); 1272 } 1273 1274 browser.fileManagerPanelFooter.append(navigation); 1275}; 1276 1277AuroraBrowser.prototype.populateContentManagerNavigation = function (nav) { 1278 var browser = this; 1279 // remove all existing page navigation 1280 browser.contentManagerPanelFooter.empty(); 1281 1282 var navigation = document.createElement('nav'); 1283 var list = document.createElement('ul'); 1284 list.className = 'pagination'; 1285 navigation.appendChild(list); 1286 1287 for (var i in nav) { 1288 var listItem = document.createElement('li'); 1289 1290 var link = document.createElement('a'); 1291 link.className = 'aurora-file-browse-navigation'; 1292 link.setAttribute('href', '#'); 1293 var linkText = document.createTextNode(nav[i].label); 1294 link.appendChild(linkText); 1295 1296 if (nav[i].link.length == 0) { 1297 listItem.className = 'active'; 1298 } else { 1299 link.setAttribute('data-page', nav[i].link.replace(/[^0-9]/g, '')); 1300 link.onclick = function (event) { 1301 event.preventDefault(); 1302 var page = this.getAttribute('data-page'); 1303 browser.setContentPage(page); 1304 }; 1305 } 1306 1307 listItem.appendChild(link); 1308 list.appendChild(listItem); 1309 } 1310 1311 browser.contentManagerPanelFooter.append(navigation); 1312}; 1313 1314AuroraBrowser.prototype.loadContentManager = function () { 1315 var browser = this; 1316 $.ajax({ 1317 url: browser.getContentManagerUrl(), 1318 dataType: 'json', 1319 beforeSend: function () { 1320 browser.showWait(); 1321 }, 1322 success: function (data) { 1323 if (data.success) { 1324 browser.setContentManagerCount(data.data.total_records); 1325 browser.setContentPage(data.data.page, false); 1326 browser.populateContentManager(data.data.records); 1327 browser.populateContentManagerNavigation(data.data.page_nav); 1328 } else { 1329 browser.showError(data.message); 1330 } 1331 browser.hideWait(); 1332 }, 1333 error: function () { 1334 browser.showError('Unable to load files!'); 1335 browser.hideWait(); 1336 } 1337 }); 1338}; 1339 1340AuroraBrowser.prototype.showWait = function () { 1341 $('body').css({ 1342 'cursor': 'wait' 1343 }); 1344 this.dialog.addClass('aurora-file-browse-waiting'); 1345 this.busy = true; 1346}; 1347 1348AuroraBrowser.prototype.hideWait = function () { 1349 $('body').css({ 1350 'cursor': 'default' 1351 }); 1352 this.dialog.removeClass('aurora-file-browse-waiting'); 1353 this.busy = false;
1354}; 1355 1356AuroraBrowser.prototype.showError = function (message, title) { 1357 if (title == undefined) { 1358 title = ''; 1359 } 1360 le_show_error(message, title); 1361}; 1362 1363AuroraBrowser.prototype.showWarning = function (message, title) { 1364 if (title == undefined) { 1365 title = ''; 1366 } 1367 le_show_warning(message, title); 1368}; 1369 1370AuroraBrowser.prototype.showMessage = function (message, title) { 1371 if (title == undefined) { 1372 title = ''; 1373 } 1374 le_show_message(message, title); 1375}; 1376 1377AuroraBrowser.prototype.generateFileDisplayElement = function (file) { 1378 // build new dom element 1379 var fileElement = document.createElement('div'); 1380 fileElement.className = 'aurora-image-file-container'; 1381 var imageElement = document.createElement('img'); 1382 imageElement.className = 'aurora-image-file-image'; 1383 imageElement.setAttribute('src', file.getThumbnail()); 1384 imageElement.setAttribute('alt', file.getName()); 1385 fileElement.appendChild(imageElement); 1386 var imageName = document.createElement('div'); 1387 imageName.className = 'aurora-image-file-name'; 1388 var imageText = document.createTextNode(file.getName()); 1389 imageName.appendChild(imageText); 1390 fileElement.appendChild(imageName); 1391 1392 var browser = this; 1393 1394 // attach Aurora file to jquery data 1395 fileElement.onclick = function (event) { 1396 event.preventDefault(); 1397 var file = $(this).data('file'); 1398 browser.setSelectedFile(file); 1399 }; 1400 1401 $(fileElement).data('file', file); 1402 1403 return fileElement; 1404}; 1405 1406AuroraBrowser.prototype.generateFolderDisplayElement = function (folder, level) { 1407 // create the li containing element 1408 var folderItem = document.createElement('li'); 1409 folderItem.className = "abn-tree-row level-" + level + " clearfix"; 1410 // hide all children folders 1411 if (folder.parentId != undefined && folder.parentId != null) { 1412 folderItem.style.display = "none"; 1413 } 1414 folderItem.setAttribute('data-folder_id', folder.id); 1415 folderItem.setAttribute('data-parent_folder_id', folder.parentId); 1416 $folderItem = $(folderItem); 1417 $folderItem.data('folder', folder); 1418 1419 // create the div container 1420 var folderItemDiv = document.createElement('div'); 1421 folderItemDiv.className = "row_content clearfix"; 1422 folderItem.appendChild(folderItemDiv); 1423 1424 // create the row icon 1425 var folderItemIcon = document.createElement('i'); 1426 if (folder.id == null) { 1427 folderItemIcon.className = "indented tree-icon fa fa-folder-open-o"; 1428 $folderItem.data('state', 'root'); 1429 } else if (folder.children.length == 0) { 1430 folderItemIcon.className = "indented tree-icon fa fa-minus-circle"; 1431 $folderItem.data('state', 'empty'); 1432 } else if (level > 1) { 1433 folderItemIcon.className = "indented tree-icon fa fa-chevron-right"; 1434 $folderItem.data('state', 'closed'); 1435 } else { 1436 folderItemIcon.className = "indented tree-icon fa fa-chevron-down"; 1437 $folderItem.data('state', 'opened'); 1438 } 1439 1440 folderItemDiv.appendChild(folderItemIcon); 1441 1442 // create the folder name element 1443 var folderItemName = document.createElement('span'); 1444 folderItemName.className = "indented tree-label"; 1445 var folderItemNameText = document.createTextNode(folder.getName()); 1446 folderItemName.appendChild(folderItemNameText); 1447 folderItemDiv.appendChild(folderItemName); 1448 1449 // create the folder action dropdown 1450 var dropdown = document.createElement('div'); 1451 dropdown.className = "options btn-group btn-group-xs"; 1452 folderItemDiv.appendChild(dropdown); 1453 1454 // create the dropdown button 1455 var dropdownButton = document.createElement('button'); 1456 dropdownButton.setAttribute('type', 'button'); 1457 dropdownButton.className = "btn btn-primary dropdown-toggle"; 1458 dropdown.appendChild(dropdownButton); 1459 1460 // create the icon for the dropdown button 1461 var dropdownButtonIcon = document.createElement('i'); 1462 dropdownButtonIcon.className = "fa fa-cog"; 1463 dropdownButton.appendChild(dropdownButtonIcon); 1464 1465 // create the dropdown actions 1466 var dropdownActions = document.createElement('ul'); 1467 dropdownActions.className = "dropdown-menu"; 1468 dropdownActions.setAttribute('role', 'menu'); 1469 dropdown.appendChild(dropdownActions); 1470 1471 // create the add dropdown action 1472 var dropdownActionAdd = document.createElement('li'); 1473 dropdownActions.appendChild(dropdownActionAdd); 1474 var dropdownActionAddLink = document.createElement('a'); 1475 dropdownActionAdd.appendChild(dropdownActionAddLink); 1476 var dropdownActionAddIcon = document.createElement('i'); 1477 dropdownActionAddIcon.className = "fa fa-plus-circle btn-icon"; 1478 dropdownActionAddLink.appendChild(dropdownActionAddIcon); 1479 dropdownActionAddLink.appendChild(document.createTextNode('Add')); 1480 1481 if (folder.canDelete()) { 1482 // create the delete dropdown action 1483 var dropdownActionDelete = document.createElement('li'); 1484 dropdownActions.appendChild(dropdownActionDelete); 1485 var dropdownActionDeleteLink = document.createElement('a'); 1486 dropdownActionDeleteLink.className = "delete"; 1487 dropdownActionDelete.appendChild(dropdownActionDeleteLink); 1488 var dropdownActionDeleteIcon = document.createElement('i');
1489 dropdownActionDeleteIcon.className = "fa fa-trash-o btn-icon"; 1490 dropdownActionDeleteLink.appendChild(dropdownActionDeleteIcon); 1491 dropdownActionDeleteLink.appendChild(document.createTextNode('Delete')); 1492 } 1493 1494 var browser = this; 1495 1496 dropdownActionAddLink.onclick = function (event) { 1497 event.preventDefault(); 1498 event.stopPropagation(); 1499 //force hide of popup menu 1500 var folderElement = $(this).parents('.abn-tree-row'); 1501 folderElement.removeClass('visible'); 1502 folderElement.find('.dropdown-menu').hide(); 1503 browser.unregisterFolderOptionClick(); 1504 1505 // add folder with dialog prompt 1506 browser.addFolderTo(folder); 1507 }; 1508 1509 if (dropdownActionDeleteLink != undefined) { 1510 dropdownActionDeleteLink.onclick = function (event) { 1511 event.preventDefault(); 1512 event.stopPropagation(); 1513 //force hide of popup menu 1514 var folderElement = $(this).parents('.abn-tree-row'); 1515 folderElement.removeClass('visible'); 1516 folderElement.find('.dropdown-menu').hide(); 1517 browser.unregisterFolderOptionClick(); 1518 1519 //delete the folder with a confirmation dialog 1520 browser.deleteFolder(folder); 1521 }; 1522 } 1523 1524 // set active click handler 1525 folderItem.onclick = function (event) { 1526 event.preventDefault(); 1527 var f = $(this).data('folder'); 1528 1529 browser.setFileFolder(f); 1530 }; 1531 1532 // set the folder icon click event (collapse/expand) handler 1533 folderItemIcon.onclick = function (event) { 1534 event.preventDefault(); 1535 event.stopPropagation(); 1536 var parent = $(this).parents('.abn-tree-row'); 1537 var f = parent.data('folder'); 1538 1539 browser.expandCollapseFileFolder(f); 1540 }; 1541 1542 // set the folder popup click event handler 1543 dropdownButton.onclick = function (event) { 1544 event.preventDefault(); 1545 event.stopPropagation(); 1546 var parent = $(this).parents('.abn-tree-row'); 1547 var f = parent.data('folder'); 1548 1549 browser.toggleFolderOption(f, parent.parent()); 1550 }; 1551 1552 1553 return folderItem; 1554}; 1555 1556AuroraBrowser.prototype.addFolderTo = function (folder) { 1557 var browser = this; 1558 var t = (new Date()).getTime(); 1559 var dialog_id = 'aurora-confirm-dialog-' + t; 1560 1561 var dialog_html = '<div id="' + dialog_id + '" class="modal fade aurora_bootstrap_modal aurora-confirm-dialog" ' + 1562 'tabindex="-1" data-backdrop="static" style="display: none; z-index: 999999;">' + 1563 '<div class="modal-dialog">' + 1564 '<div class="modal-content aurora-confirm-dialog-content">' + 1565 1566 '<!-- dialog header title bar -->' + 1567 '<div class="modal-header aurora-confirm-dialog-header">' + 1568 '<span class="modal-title aurora-confirm-dialog-title">Add Folder</span>' + 1569 '</div>' + 1570 1571 '<!-- dialog body -->' + 1572 '<div class="modal-body aurora-confirm-dialog-body">' + 1573 '<div class="modal-contain aurora-confirm-dialog-contain">' + 1574 '<div class="form-group">' + 1575 '<label for="auroraConfirmDialogFolderName">Add folder to parent folder <b>' + folder.getName() + '</b></label>' + 1576 '<input type="text" class="form-control" id="auroraConfirmDialogFolderName" placeholder="Enter Folder Name">' + 1577 '</div>' + 1578 '</div>' + 1579 '<div class="clearfix"></div>' + 1580 '</div>' + 1581 1582 '<!-- dialog buttons -->' + 1583 '<div class="modal-footer aurora-confirm-dialog-footer">' + 1584 '<button type="button" class="btn btn-primary small-btn blue-btn footer-save-btn aurora-confirm-dialog-ok" id="aurora-confirm-dialog-ok-' + t + '">Add</button>' + 1585 '<button type="button" class="btn small-btn stroked-gray-btn footer-close-btn aurora-confirm-dialog-cancel" id="aurora-confirm-dialog-cancel-' + t + '" data-dismiss="modal">Cancel</button>' + 1586 '<div class="clearfix"></div>' + 1587// '</div>' + 1588 1589 '</div>' + // close the modal-content 1590 '</div>' + // close the modal-dialog 1591 '</div>'; // close the modal 1592 1593 $('body').append(dialog_html); 1594 1595 $('#aurora-confirm-dialog-ok-' + t).click(function (event) { 1596 event.preventDefault(); 1597 // make sure folder name is completed 1598 var folderName = $('#auroraConfirmDialogFolderName').val(); 1599 var folderId = folder.id == null ? '' : folder.id; 1600 if (folderName.trim().length == 0) { 1601 browser.showWarning('Folder Name Is Required!'); 1602 $('#auroraConfirmDialogFolderName').focus(); 1603 } else { 1604 $.ajax({ 1605 url: '/service/file/manage/addFolder?parent_id=' + folderId + '&folder_name=' + folderName, 1606 dataType: 'json', 1607 beforeSend: function () { 1608 browser.showWait(); 1609 }, 1610 success: function (data) { 1611 browser.hideWait(); 1612 if (data.success) { 1613 browser.showMessage('Folder, ' + folderName + ', created'); 1614 1615 // add the folder to the folder trees 1616 var newFolder = new AuroraFolder(data.data); 1617 folder.addChild(newFolder); 1618 1619 // update the parent folder element with the new child 1620 var parentElement = browser.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1621 parentElement.data('folder', folder); 1622 var uploadParentElement = browser.uploadFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1623 uploadParentElement.data('folder', folder); 1624 1625 var elementState = parentElement.data('state'); 1626 if (elementState == 'empty') { 1627 parentElement.find('.fa-minus-circle').removeClass('fa-minus-circle').addClass('fa-chevron-right'); 1628 parentElement.data('state', 'closed'); 1629 1630 uploadParentElement.find('.fa-minus-circle').removeClass('fa-minus-circle').addClass('fa-chevron-right'); 1631 uploadParentElement.data('state', 'closed'); 1632 } 1633 1634 // generate the new folder DOM element 1635 var level = data.data.data.bread_crumb.length; 1636 var folderElement = browser.generateFolderDisplayElement(newFolder, level); 1637 var uploadFolderElement = browser.generateFolderDisplayElement(newFolder, level); 1638 if (elementState == 'opened') { 1639 folderElement.style.display = 'block'; 1640 uploadFolderElement.style.display = 'block'; 1641 } 1642 1643 parentElement.after(folderElement); 1644 uploadParentElement.after(uploadFolderElement); 1645 } else { 1646 browser.showError(data.message); 1647 } 1648 $('#' + dialog_id).modal('hide'); 1649 }, 1650 error: function (XMLHttpRequest, textStatus, errorThrown) { 1651 browser.hideWait(); 1652 browser.showError('Unable To Create Folder, ' + folderName + '!'); 1653 $('#' + dialog_id).modal('hide'); 1654 } 1655 }); 1656 } 1657 }); 1658 1659 $('#' + dialog_id).on('hidden.bs.modal', function () { 1660 $('#' + dialog_id).remove(); 1661 if ($('.modal-backdrop').length > 0) { 1662 $('body').addClass('modal-open'); 1663 } 1664 }).on('shown.bs.modal', function () { 1665 $('#auroraConfirmDialogFolderName').focus(); 1666 }); 1667 1668 $('#' + dialog_id).modal({ 1669 'show': true, 1670 'keyboard': false, 1671 'backdrop': 'static' 1672 }); 1673 1674}; 1675 1676AuroraBrowser.prototype.deleteFolder = function (folder) { 1677 if (folder.canDelete()) { 1678 var browser = this; 1679 1680 var url = '/service/file/manage/deleteFolder?parent_id=' + folder.id + '&hash=' + this.dialogHash; 1681 var message = '<p>Do you want to delete folder, <b>' + folder.getName() + '</b></p>'; 1682 message += '<p>This will remove all the files and subfolders contained in the folder.</p>'; 1683 var title = 'Delete Folder'; 1684 var success = function (data) { 1685 browser.hideWait(); 1686 if (data.success) { 1687 browser.showMessage('Folder, ' + folder.getName() + ', deleted'); 1688 1689 // get the folder tree item 1690 var folderItem = browser.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1691 1692 // check if the folder contained the selected folder 1693 // if the folder contained the selected folder select the parent folder 1694 var activeFolder = browser.findActiveFolder(folder); 1695 1696 var parentFolderElement = browser.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.parentId + ']'); 1697 var uploadFolderElement = browser.uploadFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.parentId + ']'); 1698 var parentFolder = parentFolderElement.data('folder'); 1699 // remove the child folder from the parent folder 1700 parentFolder.removeChild(folder); 1701 if (parentFolder.children.length == 0) { 1702 // folder is now empty 1703 parentFolderElement.find('.tree-icon') 1704 .removeClass('fa-chevron-down') 1705 .removeClass('fa-chevron-right') 1706 .addClass('fa-minus-circle') 1707 .data('state', 'empty'); 1708 uploadFolderElement.find('.tree-icon') 1709 .removeClass('fa-chevron-down') 1710 .removeClass('fa-chevron-right') 1711 .addClass('fa-minus-circle') 1712 .data('state', 'empty'); 1713 } 1714 1715 // update the folder data in the folder trees 1716 parentFolderElement.data('folder', parentFolder); 1717 uploadFolderElement.data('folder', parentFolder); 1718 1719 if (activeFolder != null) { 1720 // the deleted folder or one of its subfolders was active 1721 browser.setFileFolder(parentFolder); 1722 } 1723 1724 // need to remove subfolders 1725 browser.removeFolder(folder); 1726 } else { 1727 browser.showError(data.message); 1728 } 1729 }; 1730 var error = function () { 1731 browser.hideWait(); 1732 browser.showError('Unable to delete folder, ' + folder.getName()); 1733 }; 1734 var beforeSend = function () { 1735 browser.showWait(); 1736 }; 1737 le_confirm_delete(url, message, title, success, error, beforeSend); 1738 } else { 1739 this.showWarning('Can not delete folder ' + folder.getName(), ''); 1740 } 1741}; 1742 1743AuroraBrowser.prototype.removeFolder = function (folder) { 1744 for (var i in folder.children) { 1745 this.removeFolder(folder.children[i]); 1746 } 1747 1748 this.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']').remove(); 1749 this.uploadFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']').remove(); 1750}; 1751 1752AuroraBrowser.prototype.findActiveFolder = function (folder) { 1753 var browser = this; 1754 var activeFolder = null; 1755 1756 var folderElement = browser.fileManagerFolderPanel.find('.abn-tree-row[data-folder_id=' + folder.id + ']'); 1757 if (folderElement.hasClass('active')) { 1758 activeFolder = folder; 1759 } else { 1760 browser.fileManagerFolderPanel.find('.abn-tree-row[data-parent_folder_id=' + folder.id + ']').each(function (index, value) { 1761 var childElement = $(value); 1762 var childFolder = childElement.data('folder'); 1763 if (activeFolder == null) { 1764 activeFolder = browser.findActiveFolder(childFolder); 1765 } 1766 }); 1767 } 1768 1769 return activeFolder; 1770}; 1771 1772function AuroraFile(file, sourceType) { 1773 if (sourceType == undefined) { 1774 sourceType = 'file'; 1775 } 1776 1777 var defaultValues = { 1778 id: null, 1779 parent_id: null, 1780 type: null, 1781 caption: null, 1782 filename: null, 1783 url: null, 1784 content_type: null, 1785 size: 0, 1786 width: 0, 1787 height: 0, 1788 created_date: null, 1789 modified_date: null, 1790 created_by_uuid: null, 1791 modified_by_uuid: null, 1792 thumb: null, 1793 Children: [] 1794 }; 1795 file = $.extend(defaultValues, file); 1796 1797 this.id = file.id; 1798 this.parentId = file.parent_id; 1799 this.type = file.type; 1800 this.caption = file.caption; 1801 this.filename = file.filename; 1802 this.url = file.url; 1803 this.contentType = file.content_type; 1804 this.size = file.size; 1805 this.width = file.width; 1806 this.height = file.height; 1807 this.createdDate = file.created_date; 1808 this.modifiedDate = file.modified_date; 1809 this.createdBy = file.created_by_uuid; 1810 this.modifiedBy = file.modified_by_uuid; 1811 this.thumbnail = file.thumb; 1812 this.sourceType = sourceType; 1813 1814 this.children = []; 1815 for (var i in file.Children) { 1816 this.addChild(file.Children[i], sourceType); 1817 1818 if ((this.thumbnail == null || this.thumbnail.length == 0) && file.Children[i].type == 'squarethumb') { 1819 this.thumbnail = file.Children[i].url; 1820 } 1821 } 1822 1823 if (this.thumbnail == null || this.thumbnail.length == 0) { 1824 this.thumbnail = this.url; 1825 } 1826} 1827 1828AuroraFile.prototype.addChild = function (file, sourceType) { 1829 if (file instanceof AuroraFile) { 1830 this.children.push(file); 1831 } else { 1832 if (sourceType == undefined) { 1833 sourceType = 'file'; 1834 } 1835 this.children.push(new AuroraFile(file, sourceType)); 1836 } 1837}; 1838 1839AuroraFile.prototype.getName = function () { 1840 return this.filename; 1841}; 1842 1843AuroraFile.prototype.getDescription = function () { 1844 return this.filename; 1845}; 1846 1847AuroraFile.prototype.getThumbnail = function () { 1848 return this.thumbnail; 1849}; 1850 1851AuroraFile.prototype.getImageSize = function (display) { 1852 if (display == undefined) { 1853 display = false;
1854 } 1855 1856 if (display) { 1857 return this.type + ' - ' + this.width + 'px <i class="fa fa-times"></i> ' + this.height + 'px'; 1858 } 1859 1860 return this.width + ' x ' + this.height; 1861}; 1862 1863AuroraFile.prototype.isImage = function () { 1864 return /^image/.test(this.contentType); 1865}; 1866 1867function AuroraFolder(folder) { 1868 var defaultValues = { 1869 label: null, 1870 children: [], 1871 data: { 1872 id: null, 1873 1874 parent_id: null 1875 } 1876 }; 1877 folder = $.extend(defaultValues, folder); 1878 1879 this.id = folder.data.id == "" ? null : folder.data.id; 1880 this.parentId = folder.data.parent_id == "" ? null : folder.data.parent_id; 1881 this.folderName = folder.label; 1882 this.noDelete = this.id == null ? true : false; 1883 1884 this.children = []; 1885 for (var i in folder.children) { 1886 this.addChild(folder.children[i]); 1887 } 1888} 1889 1890AuroraFolder.prototype.addChild = function (folder) { 1891 if (folder instanceof AuroraFolder) { 1892 this.children.push(folder); 1893 } else { 1894 this.children.push(new AuroraFolder(folder)); 1895 } 1896}; 1897 1898AuroraFolder.prototype.getName = function () { 1899 return this.folderName; 1900}; 1901 1902AuroraFolder.prototype.canDelete = function () { 1903 return !this.noDelete; 1904}; 1905 1906AuroraFolder.prototype.removeChild = function (folder) { 1907 this.removeChildId(folder.id); 1908}; 1909 1910AuroraFolder.prototype.removeChildId = function (folderId) { 1911 var index = null; 1912 for (var i in this.children) { 1913 if (this.children[i].id == folderId) { 1914 index = parseInt(i); 1915 break; 1916 } 1917 } 1918 1919 if (index != null) { 1920 this.children = this.children.slice(0, index).concat(this.children.slice((index + 1), this.children.length)); 1921 } 1922};
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.