/* The following errors were found when attempting to minify this file: - Line 682: Parse error. Unsupported syntax: CONST - Line 830: Parse error. IE8 (and below) will parse trailing commas in array and object literals incorrectly. If you are targeting newer versions of JS, set the appropriate language_in option. */ /// /// /// /// try { Sys.Application.add_load(loadOrAjaxUpdate); } catch (ex) { } function changePage(num, id) { var frm = document.aspnetForm; frm.lngNewPage.value = num; frm.action = "/gallery.aspx?AID=" + id; frm.submit(); } function viewSlideShow(albumID, title) { document.aspnetForm.action = "/gallery.aspx?AID=" + albumID + '&showSlideShow=1' + '&AN=' + title; document.aspnetForm.submit(); } function searchTextHookFE(ev) { ev = (window.event ? window.event : ev); if (ev.keyCode == 10 || ev.keyCode == 13) photoGallerySearchFE(); } function photoGallerySearchFE() { var frm = document.aspnetForm; frm.action = "/gallery.aspx?searchText=" + encodeURIComponent(frm.moduleSearch.value) + "&AID=" + frm.categoryFilter.value; frm.submit(); } function changeSearchPage(num, searchText, id) { var frm = document.aspnetForm; frm.lngNewPage.value = num; frm.action = "/gallery.aspx?searchText= " + searchText + "&AID=" + id; frm.submit(); } function changeAlbumPage(num) { var frm = document.aspnetForm; frm.lngNewPage.value = num; frm.action = "/gallery.aspx"; frm.submit(); } function arrayContains(a, obj){ for(var i = 0; i < a.length; i++) { if(a[i] == obj){ return true; } } return false; } function vote(photoID) { var ids = getCookieValue('PGVote'); if (ids != null) { var photoIDs = ids.split(','); if (arrayContains(photoIDs, photoID)) { alert("You’ve already voted."); return false; } else document.cookie = "PGVote=" + ids + "," + photoID + "; expires=12/31/2999 23:59:59"; document.getElementById("thumbs" + photoID).src = '/Common/images/PhotoGallery2/ThumbsUpChecked.png'; } else { document.cookie = "PGVote=" + photoID + "; expires=12/31/2999 23:59:59"; } var frm = document.aspnetForm; frm.PGActionFE.value = 'vote'; frm.lngPhotoID.value = photoID; redrawContent(); } function PGPhotoModifyDelete(albumID, action, updatePanelID, photoID) { var ysnArchShowForce = -1, doSubmit = true; var frmPG = document.aspnetForm; switch (action) { case "Link": { doSubmit = false; showCopyLinkWindowUsingRelatedLink('/gallery.aspx?PID=' + photoID); break; } case "Publish": case "Unpublish": case "Reject": case "Submit": frmPG.strActionFE.value = "PGItem" + action; break; case "Delete": { if (confirm("Are you sure you want to delete this item?")) { frmPG.strActionFE.value = "PGItemDelete"; } else doSubmit = false; break; } case 'archivePublic': ysnArchShowForce = 1; case 'archiveHidden': if (ysnArchShowForce < 0) ysnArchShowForce = 0; if (!(confirm('Are you sure you want to archive this item?'))) { ysnArchShowForce = -1; return; } frmPG.strActionFE.value = 'PGItemArchive'; frmPG.ysnArchShowForceFE.value = ysnArchShowForce; break; default: { doSubmit = false; break; } } if (doSubmit) { frmPG.ysnSaveFE.value = 1; frmPG.lngPGPhotoID.value = photoID; raiseAsyncPostbackPG(updatePanelID, 0); } } function PGChangeOrder(albumID, direction, updatePanelID, photoID) { var frmPGL = document.aspnetForm; frmPGL.strActionFE.value = "PGItemChangeOrder"; frmPGL.ysnSaveFE.value = 1; frmPGL.lngPGPhotoID.value = photoID; frmPGL.PGDirection.value = direction; raiseAsyncPostbackPG(updatePanelID, 0); } function openEditWindowPG(albumID, photoID, isCopy, order, updatePanelID, isSubmit) { behavior = $find('editItemBehavior'); if (behavior) { var ifr = document.getElementById('liveEditDialog'); ifr.style.height = '530px'; var url = '/common/modules/PhotoGallery2/PhotoGallery2LiveEdit.aspx?albumID=' + albumID + '&photoID=' + photoID + '&order=' + order + '&updatePanelID=' + updatePanelID; if (isSubmit) url = url + '&submit=1'; if (isCopy) ifr.src = url + '&strPage=itemCopy'; else ifr.src = url + '&strPage=itemForm'; ifr.style.display = 'block'; behavior.show(); } } // Live edit related: if (!window.PGKAMMenu) { PGKAMMenu = function() { }; window.PGKAMMenu = PGKAMMenu; } function raiseAsyncPostbackPG(updatePanelID, closePopUp, type) { if (closePopUp) closeModalDialog('editItemBehavior'); if (type != undefined) blockMenuSpawn = true; PGItemHideMenu(); PGCategoryHideMenu(); if(type) __doPostBack(updatePanelID, ""); else __doPostBack(updatePanelID, "photo"); if(closePopUp) location.reload(true); } function PGItemMouseOver(sender, event, itemID) { if (blockMenuSpawn) return; var controlID; PGKAMMenu.photoID = itemID; controlID = 'LiveEditControl' + itemID; var liveEditControl = $get(controlID); var showLiveEditControls = getCookieValue('showLiveEditControls') == "true"; // Make sure previous KAMs are hidden if they need to be. if (!showLiveEditControls) { if (previousKAMControl) previousKAMControl.style.display = 'none'; previousKAMControl = liveEditControl; } // Change z-index, for proper display. var parentContainer = resolveLiveEditContainer(liveEditControl); parentContainer.style.zIndex = 2; // Move action category menu to container for category. liveEditControl.appendChild(PGKAMMenu.elemItemMenu); // Show tool-tip (if they are not disabled). PGShowTooltip(controlID); // Show KAM. liveEditControl.style.display = 'block'; } function PGShowTooltip(controlID) { var liveEditControl = $get(controlID); liveEditControl.appendChild(PGKAMMenu.elemTooltip); if (PGKAMMenu.elemTooltip) { if (showToolTip) PGKAMMenu.elemTooltip.style.display = 'block'; else PGKAMMenu.elemTooltip.style.display = 'none'; } } function PGItemMouseOut(sender, event) { // Ignore when mouse leaves child controls within the live edit control. event = (window.event ? window.event : event); var toElement = (event.toElement ? event.toElement : event.relatedTarget); if (!elemInsideOrEq(sender, toElement)) { PGItemHideMenu(); } } function PGCategoryMouseOver(sender, event, categoryID, fromAlbumScreen) { if (blockMenuSpawn) return; PGKAMMenu.albumID = categoryID; var controlID; if (!fromAlbumScreen) controlID = 'LiveEditControl_' + categoryID; else controlID = 'LiveEditControlAlbum_' + categoryID; var liveEditControl = $get(controlID); var showLiveEditControls = getCookieValue('showLiveEditControls') == "true"; // Make sure previous KAMs are hidden if they need to be. if (!showLiveEditControls) { if (previousKAMControl) previousKAMControl.style.display = 'none'; previousKAMControl = liveEditControl; } // Move action category menu to container for category. liveEditControl.appendChild(PGKAMMenu.elemCatMenu); // Change z-index, for proper display. var parentContainer = resolveLiveEditContainer(liveEditControl); parentContainer.style.zIndex = 2; // Show tool-tip (if they are not disabled). PGShowTooltip(controlID); // Show KAM. liveEditControl.style.display = 'block'; } // Summons action menu for a category. function PGActionsCategory(albumID, catElemID, updatePanelID, status, rights, fromAlbumScreen) { PGKAMMenu.updatePanelID = updatePanelID; PGKAMMenu.photoID = 0; PGKAMMenu.albumID = albumID; PGKAMMenu.counter = 0; PGKAMMenu.status = status; PGKAMMenu.rights = rights; if (!fromAlbumScreen) liveEditCommonCategory( $get(catElemID), PGKAMMenu.elemTooltip, PGKAMMenu.elemCatMenu, $get('LiveEditControl_' + albumID), 'PGCategoryLiveEditMoreActions'); else liveEditCommonCategory( $get(catElemID), PGKAMMenu.elemTooltip, PGKAMMenu.elemCatMenu, $get('LiveEditControlAlbum_' + albumID), 'PGCategoryLiveEditMoreActions'); } function PGCategoryMouseOut(sender, event) { // Ignore when mouse leaves child controls within the live edit control. event = (window.event ? window.event : event); var toElement = (event.toElement ? event.toElement : event.relatedTarget); if (!elemInsideOrEq(sender, toElement)) PGCategoryHideMenu(); } function PGCategoryHideMenu() { var categoryID = PGKAMMenu.albumID; var controlID = 'LiveEditControl_' + categoryID; var controlIDAlbum = 'LiveEditControlAlbum_' + categoryID; var liveEditControl = $get(controlID); var liveEditControlAlbum = $get(controlIDAlbum); var showLiveEditControls = getCookieValue('showLiveEditControls') == "true"; if (!liveEditControl && !liveEditControlAlbum) return; // Change z-index, for proper display. var parentContainer; if (liveEditControl) parentContainer = resolveLiveEditContainer(liveEditControl); else parentContainer = resolveLiveEditContainer(liveEditControlAlbum); parentContainer.style.zIndex = 0; // Hide action menu for category. PGKAMMenu.elemCatMenu.style.display = 'none'; if (PGKAMMenu.elemCatMenu.parentNode) { PGKAMMenu.elemCatMenu.parentNode.removeChild(PGKAMMenu.elemCatMenu); PGKAMMenu.elemLiveEditBullpen.appendChild(PGKAMMenu.elemCatMenu); } // Hide any possibly visible tool-tip. PGHideTooltip(); // Hide KAM unless KAMs are set to always show. if (!showLiveEditControls) { if (liveEditControlAlbum) liveEditControlAlbum.style.display = 'none'; if (liveEditControl) liveEditControl.style.display = 'none'; } } function PGItemHideMenu() { var itemID = PGKAMMenu.photoID; var controlID = 'LiveEditControl' + itemID; var liveEditControl = $get(controlID); var showLiveEditControls = getCookieValue('showLiveEditControls') == "true"; if (!liveEditControl) return; // Change z-index, for proper display. var parentContainer = resolveLiveEditContainer(liveEditControl); parentContainer.style.zIndex = 0; // Hide action menu for item. PGKAMMenu.elemItemMenu.style.display = 'none'; if (PGKAMMenu.elemItemMenu.parentNode) { PGKAMMenu.elemItemMenu.parentNode.removeChild(PGKAMMenu.elemItemMenu); PGKAMMenu.elemLiveEditBullpen.appendChild(PGKAMMenu.elemItemMenu); } // Hide any possibly visible tool-tip. PGHideTooltip(); // Hide KAM unless KAMs are set to always show. if (!showLiveEditControls) { liveEditControl.style.display = 'none'; } } // Hides tool-tip text for a category. function PGHideTooltip() { if (PGKAMMenu.elemTooltip.parentNode) PGKAMMenu.elemTooltip.parentNode.removeChild(PGKAMMenu.elemTooltip); PGKAMMenu.elemTooltip.style.display = 'none'; } function PGActionsInit() { // Set up state variables (they change per item). PGKAMMenu.updatePanelID = ''; PGKAMMenu.photoID = 0; PGKAMMenu.albumID = 0; PGKAMMenu.counter = 0; PGKAMMenu.order = 0; PGKAMMenu.status = 0; PGKAMMenu.rights = 0; // Get invisible bullpen (where hidden stuff is stored). PGKAMMenu.elemLiveEditBullpen = $get('PGLiveEditBullpen'); // Set up KAM tooltip. PGKAMMenu.elemTooltip = $get('PGLiveEditToolTip'); if (!showToolTip) PGKAMMenu.elemTooltip.style.display = 'none'; // Set up category action menu. PGKAMMenu.elemCatMenu = $get('PGCategoryLiveEditMoreActions'); PGKAMMenu.elemCatActionNew = $get('PGCategoryNewItem'); hookAnchorClick(PGKAMMenu.elemCatActionNew, function(sender, eventArgs) { PGCategoryHideMenu(); var updatePanel = (PGKAMMenu.updatePanelID + '').trim(); if (updatePanel == 'search' || updatePanel == '') openEditWindowPG(0, 0, 1, 0, 'search'); else openEditWindowPG(PGKAMMenu.albumID, 0, 0, 0, PGKAMMenu.updatePanelID); }); // Set up item action menu. PGKAMMenu.elemItemMenu = $get('PGItemLiveEditMoreActions'); PGKAMMenu.elemItemMoveHeading = $get('PGItemMoveHeading'); PGKAMMenu.elemItemActionMoveUpIcon = $get('PGItemMoveUpIcon'); PGKAMMenu.elemItemActionMoveDownIcon = $get('PGItemMoveDownIcon'); PGKAMMenu.elemItemActionModify = $get('PGItemModify'); PGKAMMenu.elemItemActionCommands = $get('PGItemCommands'); hookAnchorClick(PGKAMMenu.elemItemActionModify, function(sender, eventArgs) { if (!PGKAMMenu.elemItemActionModify.inactive) { PGItemHideMenu(); openEditWindowPG(PGKAMMenu.albumID, PGKAMMenu.photoID, 0, -1, PGKAMMenu.updatePanelID); } }); PGKAMMenu.elemItemActionMoveUp = $get('PGItemMoveUp'); hookAnchorClick(PGKAMMenu.elemItemActionMoveUp, function(sender, eventArgs) { if (!PGKAMMenu.elemItemActionMoveUp.inactive) { PGItemHideMenu(); PGChangeOrder(PGKAMMenu.albumID, 'up', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); } }); PGKAMMenu.elemItemActionMoveDown = $get('PGItemMoveDown'); hookAnchorClick(PGKAMMenu.elemItemActionMoveDown, function(sender, eventArgs) { if (!PGKAMMenu.elemItemActionMoveDown.inactive) { PGItemHideMenu(); PGChangeOrder(PGKAMMenu.albumID, 'down', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); } }); PGKAMMenu.elemItemActionCopyLink = $get('PGItemCopyLink'); hookAnchorClick(PGKAMMenu.elemItemActionCopyLink, function(sender, eventArgs) { PGPhotoModifyDelete(PGKAMMenu.albumID, 'Link', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); }); PGKAMMenu.elemItemActionUnpublish = $get('PGItemUnpublish'); hookAnchorClick(PGKAMMenu.elemItemActionUnpublish, function(sender, eventArgs) { PGItemHideMenu(); PGPhotoModifyDelete(PGKAMMenu.albumID, 'Unpublish', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); }); PGKAMMenu.elemItemActionPublish = $get('PGItemPublish'); hookAnchorClick(PGKAMMenu.elemItemActionPublish, function(sender, eventArgs) { PGItemHideMenu(); PGPhotoModifyDelete(PGKAMMenu.albumID, 'Publish', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); }); PGKAMMenu.elemItemActionSubmit = $get('PGItemSubmit'); hookAnchorClick(PGKAMMenu.elemItemActionSubmit, function(sender, eventArgs) { PGItemHideMenu(); PGPhotoModifyDelete(PGKAMMenu.albumID, 'Submit', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); }); PGKAMMenu.elemItemActionCopy = $get('PGItemCopy'); hookAnchorClick(PGKAMMenu.elemItemActionCopy, function(sender, eventArgs) { PGItemHideMenu(); if (PGKAMMenu.counter > 0) openEditWindowPG(PGKAMMenu.albumID, PGKAMMenu.photoID, 1, -1, PGKAMMenu.updatePanelID); else openEditWindowPG(PGKAMMenu.albumID, PGKAMMenu.photoID, 1, -1, 'search'); }); // PGKAMMenu.elemItemActionArchive = $get('PGItemArchive'); // hookAnchorClick(PGKAMMenu.elemItemActionArchive, // function(sender, eventArgs) { // PGItemHideMenu(); // PGPhotoModifyDelete(PGKAMMenu.albumID, 'archiveHidden', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); // }); PGKAMMenu.elemItemActionDelete = $get('PGItemDelete'); hookAnchorClick(PGKAMMenu.elemItemActionDelete, function(sender, eventArgs) { PGItemHideMenu(); PGPhotoModifyDelete(PGKAMMenu.albumID, 'Delete', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); }); PGKAMMenu.elemItemActionNewAnchor = $get('PGItemNewItemAnchor'); PGKAMMenu.elemItemActionNew = $get('PGItemNewItem'); hookAnchorClick(PGKAMMenu.elemItemActionNew, function(sender, eventArgs) { if (!PGKAMMenu.elemItemActionNew.inactive) { PGItemHideMenu(); openEditWindowPG(PGKAMMenu.albumID, 0, 0, PGKAMMenu.order, PGKAMMenu.updatePanelID); } }); PGKAMMenu.elemItemActionReject = $get('PGItemReject'); hookAnchorClick(PGKAMMenu.elemItemActionReject, function(sender, eventArgs) { PGItemHideMenu(); PGPhotoModifyDelete(PGKAMMenu.albumID, 'Reject', PGKAMMenu.updatePanelID, PGKAMMenu.photoID); }); } // Summons action menu for an item. function PGActionItems(photoID, updatePanelID, albumID, order, counter, status, rights, lastItem) { PGKAMMenu.updatePanelID = updatePanelID; PGKAMMenu.albumID = albumID; PGKAMMenu.photoID = photoID; PGKAMMenu.counter = counter; PGKAMMenu.order = order; PGKAMMenu.status = status; PGKAMMenu.rights = rights; PGKAMMenu.lastItem = lastItem; // Determine if modify is available. if (rights >= PUBLISHER || rights == AUTHOR && status < MIN_PUBLISHED) { PGKAMMenu.elemItemActionModify.className = 'big modify'; PGKAMMenu.elemItemActionModify.title = ''; PGKAMMenu.elemItemActionModify.inactive = false; } else { PGKAMMenu.elemItemActionModify.className = 'big modify inactive'; PGKAMMenu.elemItemActionModify.title = 'You do not have rights to modify this item.' PGKAMMenu.elemItemActionModify.inactive = true; } // Determine if move is available and how it should display. var MOVE_ACTIVE_UP = '/App_Themes/CP/Images/IconMoveUp.png'; var MOVE_ACTIVE_DOWN = '/App_Themes/CP/Images/IconMoveDown.png'; var MOVE_INACTIVE_UP = '/App_Themes/CP/Images/IconMoveUpInactive.png'; var MOVE_INACTIVE_DOWN = '/App_Themes/CP/Images/IconMoveDownInactive.png'; var moveDisplay = (rights > AUTHOR ? 'inline' : 'none') PGKAMMenu.elemItemMoveHeading.style.display = moveDisplay; PGKAMMenu.elemItemActionMoveUp.style.display = moveDisplay; PGKAMMenu.elemItemActionMoveDown.style.display = moveDisplay; var moveText; if (rights > AUTHOR) { if (counter < 0) { PGKAMMenu.elemItemActionMoveUp.className = 'moveUp inactive'; PGKAMMenu.elemItemActionMoveUp.inactive = true; PGKAMMenu.elemItemActionMoveDown.className = 'moveDown inactive'; PGKAMMenu.elemItemActionMoveDown.inactive = true; switch (counter) { case -2: moveText = 'Can only move items from module page.' break; default: // Search Screen moveText = 'Can\'t move items on the search page.'; break; } PGKAMMenu.elemItemActionMoveUpIcon.src = MOVE_INACTIVE_UP; PGKAMMenu.elemItemActionMoveDownIcon.src = MOVE_INACTIVE_DOWN; PGKAMMenu.elemItemActionMoveUpIcon.title = moveText; PGKAMMenu.elemItemActionMoveUpIcon.alt = moveText; PGKAMMenu.elemItemActionMoveDownIcon.title = moveText; PGKAMMenu.elemItemActionMoveDownIcon.alt = moveText; } else { if (counter == 1) { moveText = 'This item is first in the list and can\'t be moved any higher.'; PGKAMMenu.elemItemActionMoveUpIcon.src = MOVE_INACTIVE_UP; PGKAMMenu.elemItemActionMoveUp.className = 'moveUp inactive'; PGKAMMenu.elemItemActionMoveUp.alt = 'This item is first in the list and can\'t be moved any higher.'; PGKAMMenu.elemItemActionMoveUp.inactive = true; } else { moveText = 'Move Up'; PGKAMMenu.elemItemActionMoveUpIcon.src = MOVE_ACTIVE_UP; PGKAMMenu.elemItemActionMoveUp.className = 'moveUp'; PGKAMMenu.elemItemActionMoveUp.inactive = false; } PGKAMMenu.elemItemActionMoveUpIcon.title = moveText; PGKAMMenu.elemItemActionMoveUpIcon.alt = moveText; if (lastItem) { moveText = 'This item is last in the list and can\'t be moved any lower.'; PGKAMMenu.elemItemActionMoveDownIcon.src = MOVE_INACTIVE_DOWN; PGKAMMenu.elemItemActionMoveDown.className = 'moveDown inactive'; PGKAMMenu.elemItemActionMoveDown.inactive = true; } else { moveText = 'Move Down'; PGKAMMenu.elemItemActionMoveDownIcon.src = MOVE_ACTIVE_DOWN; PGKAMMenu.elemItemActionMoveDown.className = 'moveDown'; PGKAMMenu.elemItemActionMoveDown.inactive = false; } PGKAMMenu.elemItemActionMoveDownIcon.title = moveText; PGKAMMenu.elemItemActionMoveDownIcon.alt = moveText; } } // Determine visiblity of submit/reject/publish/unpublish. PGKAMMenu.elemItemActionSubmit.style.display = 'none'; PGKAMMenu.elemItemActionReject.style.display = 'none'; PGKAMMenu.elemItemActionPublish.style.display = 'none'; PGKAMMenu.elemItemActionUnpublish.style.display = 'none'; if (rights > AUTHOR) { if (status > MAX_DRAFT) PGKAMMenu.elemItemActionUnpublish.style.display = ''; else PGKAMMenu.elemItemActionPublish.style.display = ''; if (status == SUBMITTED) PGKAMMenu.elemItemActionReject.style.display = ''; } else if (status != SUBMITTED && status <= MAX_DRAFT) PGKAMMenu.elemItemActionSubmit.style.display = ''; // Determine visiblity of delete/archive. //PGKAMMenu.elemItemActionArchive.style.display = 'none'; PGKAMMenu.elemItemActionDelete.style.display = 'none'; if (rights > AUTHOR) { // Only publisher or higher can delete. //if (status > MAX_DRAFT) //PGKAMMenu.elemItemActionArchive.style.display = ''; //else PGKAMMenu.elemItemActionDelete.style.display = ''; } else if (status <= MAX_DRAFT) PGKAMMenu.elemItemActionDelete.style.display = ''; // Determine visiblity/behavior of new. if (counter > 0) { if (rights >= AUTHOR) { PGKAMMenu.elemItemActionNew.style.display = ''; PGKAMMenu.elemItemActionNewAnchor.title = ''; PGKAMMenu.elemItemActionNewAnchor.className = 'addItem'; PGKAMMenu.elemItemActionNew.inactive = false; } else PGKAMMenu.elemItemActionNew.style.display = 'none'; } else if (counter > -2) { PGKAMMenu.elemItemActionNew.style.display = ''; PGKAMMenu.elemItemActionNewAnchor.title = 'You cannot add item on search screen.'; PGKAMMenu.elemItemActionNewAnchor.className = 'addItem inactive'; PGKAMMenu.elemItemActionNew.inactive = true; } else PGKAMMenu.elemItemActionNew.style.display = 'none'; // Apply even/odd classes. var listItems = PGKAMMenu.elemItemActionCommands.firstChild; var lc = 0; while (listItems != null) { if (listItems.nodeType == 1 && listItems.style.display != 'none') listItems.className = (((++lc) % 2) == 0 ? 'even' : ''); listItems = listItems.nextSibling; } // Show menu. liveEditCommonItem( PGKAMMenu.elemTooltip, PGKAMMenu.elemItemMenu, $get('LiveEditControl' + photoID), 'PGItemLiveEditMoreActions', false); }; function ImageRepositoryClass() { this.loadSource = { Self: 0, Slideshow: 1, RelatedDocuments: 2, Design: 3, Content: 4, Banner: 5 }; this.$imageUploadModal = null; this.imageID = 0; this.options = { modalTitle: 'Images', targetID: 0, $target: null, callback: null, loadSource: this.loadSource.Content }; } const moduleIds = Object.freeze({ PhotoGallery: 53, NewsFlash: 1 }); function getIframeHeightInPixels(moduleId) { if ((moduleId === moduleIds.NewsFlash && window.self !== window.top) || moduleId === moduleIds.PhotoGallery) { return '475px'; } else { return '600px'; } } ImageRepositoryClass.prototype.openImageUploadModal = function (options) { var imageRepositoryInstance = window.imageRepository; imageRepositoryInstance.options = options; callbackfnDocumentCenter = options.callback; var className = 'slideShowImages'; if (window.FeatureToggles.isActive("CMS.DocumentCenter.ReplaceTelerikTreeAndGridWithReact")) { className += ' reactModal'; } imageRepositoryInstance.$imageUploadModal = openCpModal({ title: options.modalTitle, className: className, isFrontEnd: false, useIframe: true, draggable: true, iframeHeight: getIframeHeightInPixels(options.moduleID), elementID: 'mvcModal2', url: '/Admin/DocumentCenter/FolderForModal/Index?renderMode=1&loadSource=' + options.loadSource + '&requestingModuleID=' + options.moduleID }); imageRepositoryInstance.$imageUploadModal.removeClass('newCP adminWrap cpPopOver admin'); }; ImageRepositoryClass.prototype.closeImageWidgetUploadModal = function (documentID) { var imageRepositoryInstance = window.imageRepository; imageRepositoryInstance.$imageUploadModal.hide(); if (documentID > 0) { $.ajax({ url: '/ContentWidgets/ImageSave/Save?widgetID=' + imageRepositoryInstance.options.targetID + '&contentCollectionID=' + imageRepositoryInstance.options.contentCollection.ContentCollectionID, type: 'POST', data: { imageID: documentID }, success: function (response) { if (response.ErrorMessage) { alert(response.ErrorMessage); } else { if (imageRepositoryInstance.options.contentCollection.IsWorkingCopy || isWidgetUnderMegaMenu($('#divImage' + imageRepositoryInstance.options.targetID))) { $('#divImage' + imageRepositoryInstance.options.targetID).html(response); contentUpdated(); } else { var contentContainerID = $('#divImage' + imageRepositoryInstance.options.targetID).parents('.pageContent').filter(':first').data('containerid'); ContentCollectionInstance.CurrentContentContainerIDs.push(contentContainerID); imageRepositoryInstance.options.contentCollection.reloadContent(); } if (!window.isRemoveSetHeights) SetHeights(); } } }); } }; ImageRepositoryClass.prototype.closeCustomWidgetImageUploadModal = function (documentID) { var imageRepositoryInstance = window.imageRepository; imageRepositoryInstance.$imageUploadModal.hide(); if (documentID > 0) { var imagePath = '/ImageRepository/Document?documentID=' + documentID; var $input = imageRepositoryInstance.options.$target.parent().find(".input1"); var $divInputImage = imageRepositoryInstance.options.$target.parent().find(".divInputImage"); var $deleteInputImage = imageRepositoryInstance.options.$target.parent().find(".deleteInputImage"); $input.val(imagePath + '|'); $divInputImage.html(""); imageRepositoryInstance.options.$target.hide(); imageRepositoryInstance.options.$target = null; $deleteInputImage.show(); } }; ; /* * jQuery plugin to change any button into a image repository file selector. * --- * Usage: * * $('input.imageInput').imageInput({ * onChange: function(){ ... }, * onRemove: function(){ ... }, * onInit: function() { ... }, * showPreview: false, * moduleID: 123 // Required, * maximumImagePreviewWidth: 200 // in px * }); * * Notes: * URL is pulled from value attribute. Use your input just * as would use any other text based field. (JE) * * Alternative Usage: Attributes will override property defaults. imageInput function still needs to be called on the controls. * * * Terminology: * I use "Control Wrapper" to refer to the element containing the buttons, image preview, and image path display that are the UI of this plugin. */ $(function () { // I wish this weren't needed, but we are somehow pulling two jQuery initializations in some places so we have to wait and bind the plugin until all of that is done :( $.fn.imageInput = function ($) { // Shared Stuff 'use strict'; var config = { localization: { expectedNextElementToBeButtonWrapperError: 'Expected next element to be button controls (.imageSelect), and it was not. Either function was called prior to initialization or button controls were moved/malformed.', noModuleIdProvidedError: 'No module ID provided for image repository control and it is required.', defaultModalTitle: 'Content Images', chooseImageButton: 'Choose Image...', modifyButton: 'Modify', removeButton: 'Remove' }, selector: { imagePathDisplay: '.imagePathDisplay', imageDocumentId: '.imageDocumentId', imagePreview: '.imagePreview', chooseImageButton: '.button.chooseImage', modifyButton: '.button.modifyImage', removeButton: '.button.removeImage', controlWrapper: '.imageSelect' }, markup: { imagePathDisplay: '', imageDocumentId: '', imagePreview: '', button: '', controlWrapper: '' } }; // Stuff that relates to a particular instance of this plugin. return function (opts) { if (!opts.moduleID) { throw config.localization.noModuleIdProvidedError; } var noop = function () { }; var optionDefaults = { onChange: noop, onRemove: noop, onInit: noop, modalTitle: config.localization.defaultModalTitle, showPreview: false, maximumImagePreviewWidth: 200, showImagePathDisplay: !opts.showPreview, // If showPreview is on then by default lets hide the path. Otherwise it should probably be on. chooseFileText: opts.chooseFileText ? opts.chooseFileText : config.localization.chooseImageButton, useStandardButtonStyle: false, showRemoveButton: true, showInput: false, }; var $inputThisPluginIsAppliedTo = $(this); if ($inputThisPluginIsAppliedTo.length === 0) { return $inputThisPluginIsAppliedTo; // No elements to match. } else if ($inputThisPluginIsAppliedTo.length > 1) { // More than one element matches - we need to recall the plugin on each element and then return. var $setOfMatchedElements = $([]); $inputThisPluginIsAppliedTo.each(function () { $setOfMatchedElements.add($(this).imageInput(opts)); }); return $setOfMatchedElements; } var isInitialized = false; var currentImagePath = $inputThisPluginIsAppliedTo.val(); var currentDocumentId = $inputThisPluginIsAppliedTo.data('documentid'); var options = $.extend({}, optionDefaults, opts); var init = function () { if ($inputThisPluginIsAppliedTo.data('caption') && !opts.chooseFileText) { // if we have an attribute setting the caption lets use it. options.chooseFileText = $inputThisPluginIsAppliedTo.data('caption'); } if (typeof $inputThisPluginIsAppliedTo.data('showpreview') === 'boolean' && !opts.showPreview) { options.showPreview = $inputThisPluginIsAppliedTo.data('showpreview'); } if (typeof $inputThisPluginIsAppliedTo.data('showimagepath') === 'boolean' && !opts.showImagePathDisplay) { options.showImagePathDisplay = $inputThisPluginIsAppliedTo.data('showimagepath'); } if (!options.showInput) { $inputThisPluginIsAppliedTo.hide(); } createButtonsAndPreviewIfTheyDoNotExist(); updateUx(); setImage(currentImagePath, currentDocumentId); if (options.maximumImagePreviewWidth) { getControlWrapper().find(config.selector.imagePreview).css('max-width', options.maximumImagePreviewWidth + 'px'); } isInitialized = true; triggerOnInit(); }; var setImage = function (path, documentId) { var $controlWrapper = getControlWrapper(); var $imagePreview = $controlWrapper.find(config.selector.imagePreview); if (path === '') { removeImage(); return; } path = path.replace(/\\/g, "/"); // Clean up pathing - CSS doesn't like backslashes currentDocumentId = documentId; currentImagePath = path; $inputThisPluginIsAppliedTo.val(currentImagePath); $controlWrapper.find(config.selector.imagePathDisplay).text(currentImagePath); $controlWrapper.find(config.selector.imageDocumentId).val(currentDocumentId); $imagePreview.attr('src', currentImagePath); if (isInitialized) { // Since this is called on initialization we probably don't want to fire an initial on change event. triggerOnChange(); } updateUx(); }; var removeImage = function () { var $controlWrapper = getControlWrapper(); currentImagePath = ''; currentDocumentId = null; $inputThisPluginIsAppliedTo.val(currentImagePath); $controlWrapper.find(config.selector.imagePathDisplay).text(currentImagePath); $controlWrapper.find(config.selector.imageDocumentId).val(''); $controlWrapper.find(config.selector.imagePreview).attr('src', currentImagePath); if (isInitialized) { // Since this is called on initialization we probably don't want to fire an initial on change event. triggerOnChange(); triggerOnRemove(); } updateUx(); }; var createButtonsAndPreviewIfTheyDoNotExist = function () { var nextElementIsImageSelectUx = $inputThisPluginIsAppliedTo.next().is(config.selector.controlWrapper); if (nextElementIsImageSelectUx) { return; // nothing to do here. We already have the image controls. } var $controlWrapper = $inputThisPluginIsAppliedTo.after(config.markup.controlWrapper).next(); $controlWrapper .append($(config.markup.imagePreview)) .append($(config.markup.imagePathDisplay)) .append($(config.markup.imageDocumentId)) .append($(config.markup.button).addClass('chooseImage')) .append($(config.markup.button).addClass('modifyImage')) .append($(config.markup.button).addClass('removeImage')); $controlWrapper.find('.chooseImage span').text(options.chooseFileText); $controlWrapper.find('.modifyImage span').text(config.localization.modifyButton); $controlWrapper.find('.removeImage span').text(config.localization.removeButton); if (options.useStandardButtonStyle) { $controlWrapper.find(config.selector.modifyButton) .add($controlWrapper.find(config.selector.removeButton)) .add($controlWrapper.find(config.selector.chooseImageButton)) .each(function () { $(this).replaceWith($('')); }); } if (!options.showRemoveButton) { $controlWrapper.find(config.selector.removeButton).hide(); } bindUx(); // Don't forget to bind the newly created elements! }; var getControlWrapper = function () { var $elementThatShouldBeButtonWrapper = $inputThisPluginIsAppliedTo.next(); if ($elementThatShouldBeButtonWrapper.is(config.selector.controlWrapper)) { return $elementThatShouldBeButtonWrapper; } else { throw config.localization.expectedNextElementToBeButtonWrapperError; } }; var bindUx = function () { $inputThisPluginIsAppliedTo.bind('change', inputChange); var $buttonWrapper = getControlWrapper(); $buttonWrapper.find(config.selector.imagePathDisplay).click(chooseImageClick); $buttonWrapper.find(config.selector.imagePreview).click(chooseImageClick); $buttonWrapper.find(config.selector.chooseImageButton).click(chooseImageClick); $buttonWrapper.find(config.selector.modifyButton).click(modifyImageClick); $buttonWrapper.find(config.selector.removeButton).click(removeImageClick); }; var inputChange = function (e, data) { if (data && data.source !== 'imageInput' || !data) { setImage($inputThisPluginIsAppliedTo.val()); } }; var chooseImageClick = function (e) { showImageRepositoryModal(); e.preventDefault(); e.stopPropagation(); return false; }; var modifyImageClick = function (e) { showImageRepositoryModal(); e.preventDefault(); e.stopPropagation(); return false; }; var removeImageClick = function (e) { removeImage(); e.preventDefault(); e.stopPropagation(); return false; }; var showModifyAndRemoveButtons = function () { var $controlWrapper = getControlWrapper(); if (options.showRemoveButton === true) { $controlWrapper.find(config.selector.modifyButton) .add($controlWrapper.find(config.selector.removeButton)).show(); } else { $controlWrapper.find(config.selector.modifyButton).show(); } }; var hideModifyAndRemoveButtons = function () { var $controlWrapper = getControlWrapper(); $controlWrapper.find(config.selector.modifyButton) .add($controlWrapper.find(config.selector.removeButton)) .hide(); }; var showChooseImageButton = function () { getControlWrapper() .find(config.selector.chooseImageButton) .show(); }; var hideChooseImageButton = function () { getControlWrapper() .find(config.selector.chooseImageButton) .hide(); }; var showImagePathDisplay = function () { getControlWrapper() .find(config.selector.imagePathDisplay) .show(); }; var hideImagePathDisplay = function () { getControlWrapper() .find(config.selector.imagePathDisplay) .hide(); }; var showImagePreview = function () { var $controlWrapper = getControlWrapper(); var $imagePreview = $controlWrapper.find(config.selector.imagePreview); $imagePreview.show(); }; var hideImagePreview = function () { getControlWrapper() .find(config.selector.imagePreview) .hide(); }; var updateUx = function () { var weHaveAnImage = currentImagePath !== ''; if (weHaveAnImage) { showModifyAndRemoveButtons(); hideChooseImageButton(); if (options.showPreview) { showImagePreview(); } else { hideImagePreview(); } if (options.showImagePathDisplay) { showImagePathDisplay(); } else { hideImagePathDisplay(); } } else { hideModifyAndRemoveButtons(); hideImagePreview(); hideImagePathDisplay(); showChooseImageButton(); } $inputThisPluginIsAppliedTo.val(currentImagePath); $inputThisPluginIsAppliedTo.data('documentid', currentDocumentId); }; var triggerOnInit = function () { options.onInit(); }; var triggerOnChange = function () { $inputThisPluginIsAppliedTo.trigger('change', [{source: 'imageInput'}]); options.onChange(currentImagePath, currentDocumentId); }; var triggerOnRemove = function () { $inputThisPluginIsAppliedTo.trigger('change', [{source: 'imageInput'}]); options.onChange(); options.onRemove(); }; var showImageRepositoryModal = function () { var imageRepositoryOptions = { loadSource: window.imageRepository.loadSource.Content, callback: function (documentId) { $.ajax({ url: '/ImageRepository/Source', type: 'POST', data: {imageID: documentId}, success: function (response) { if (response.ErrorMessage) { alert(response.ErrorMessage); } else { // Response contains the selected path. setImage(response, documentId); } } }); window.imageRepository.$imageUploadModal.hide(); }, modalTitle: options.modalTitle, moduleID: options.moduleID }; window.imageRepository.openImageUploadModal(imageRepositoryOptions); }; init(); $inputThisPluginIsAppliedTo.setImage = setImage; $inputThisPluginIsAppliedTo.removeImage = removeImage; return $inputThisPluginIsAppliedTo; }; }($); });