{"version":3,"sources":["_layouts/core/contentviews/tilelist.js","_layouts/core/contentviews/hovermenu.js"],"names":["previewWindows","Librarian","CartDraggable","Class","Binds","dragState","onDragStart","e","target","dragStart","control","shift","preventDefault","returnValue","onDragEnd","notDragging","onDragItem","item","dragging","rightClick","stop","self","this","size","getSize","isCart","tileItem","itemClassName","indexOf","isFastLaneCart","id","parentTop","getTop","parentHeight","getHeight","parentEl","cartWindow","contentWrapperEl","$","droppables","clone","setStyles","left","page","x","top","y","bottom","right","opacity","position","zIndex","addClass","inject","document","body","cartClasses","$$","concat","makeDraggable","onEnter","draggable","droppable","i","length","className","substring","hasClass","swapClass","features","fastlane","load","FastLane","isEnabled","setStyle","underEl","onLeave","onDrop","each","el","destroy","onCancel","onDrag","scrollTop","mouseY","scrollTo","start","section","index","onItemSelect","initialDestination","fromData","toData","selectedItems","list","sort","a","b","itemIndex","selectedDivs","map","div","userCart","data","comesBeforeTheDestination","len","moveItem","fireEvent","setItemSection","Cart","onChange","contains","iterateSelectedItems","insertBefore","insertedItem","success","Utils","showCartNotification","cartNotificationTypes","added","updateAllCheckboxes","startsWith","workflowWindow","Workflow","viewWindows","addContent","renderContent","cart","canAddToCart","parentData","parentfields","Object","extrafields","addToCart","removeClass","TileList","Extends","Implements","Options","options","wrapperClass","container","noCache","allowDrag","isMainPage","itemStyle","maxSearchItems","targetList","isSection","overrideName","perPage","total","clientPagination","openPreviewToInfo","openPreviewToTab","hoverMenuOverride","disableCart","workflowData","subHeader","wrapper","items","categories","settingsWindow","contextMenu","hoverMenu","catType","file","onItemRender","lastRequest","initialize","setOptions","Element","class","injectInside","tileList","defaultCartSize","defaultSize","enableHoverMenu","HoverMenu","menuContainer","dropDownContainer","dropDownListContainer","dropDownTrigger","menuIdPrefix","isInCart","Library","getTileListMenuItems","getTileListDropDownItems","dropDownListContainerEl","hide","addEvent","deselect","clean","reset","destroyChildren","empty","innerHTML","close","viewRatingsWindow","rateWindow","searchLoadComplete","json","text","cancelAll","lockNavigation","clearRequests","itemEl","searchtime","style","forceDisplay","show","searchWindow","minimizeButtonX","loadComplete","toInt","catid","subcategories","files","groups","presentations","slides","eventgroups","events","eventGroup","eventgroupinfo","loadFromArray","pageHeader","rowCount","undefined","fromCart","contentLoader","cancel","Browser","ie","slideshow","enabled","isslideshow","expandSlideShows","itemcount","itemData","slidenumber","push","useMaxItems","maxItems","search","isSearching","maxResults","Search","prepSearchNavigation","createCategoryItem","render","subItems","noItemsNotifEl","Lang","getString","grab","j","contentType","contenttype","contentinfo","category","createTileItem","slideinfo","slideid","fileinfo","groupinfo","globalFavorite","eventid","event","presid","subset","myFavorite","prepareItemData","Math","max","updateCheckboxes","getItemStyle","fileList","ListView","updateCartCheckBoxes","bind","afterLoadComplete","html","showSearchNavigation","reload","oldSize","sizeChanged","hasSelectedClass","flags","cartCheckEl","catStyle","getCatStyle","classes","getMenuItem","window","setTimeout","showLoader","onComplete","loadFromUrl","path","getMethodUrl","isValidItem","sizeStyle","TileItem","fileid","groupid","contentid","getItem","setItem","getItemData","setItemData","useSlideIndex","slideIndex","isDataEqual","pagecount","slidecount","destroyChild","splice","getElementsWithCheckState","checkState","elements","getElements","checked","slidenum","getCheckedElements","getUnCheckedElements","getVisibleCheckboxes","removeOverflow","filter","offsetHeight","offsetWidth","coords","visibleElements","getCoordinates","elementFromPoint","width","height","selectAll","select","selectFile","sectionIndex","postAddRemoveUpdate","count","cartfull","onUpdate","notification","blockAddWhenFull","error","message","Item","makeParent","selectAllSlidesAsFile","removeFromCart","cartItem","cartcount","getCount","removeAll","callback","removeNextItem","reloadThumbnails","breakCache","imageEl","cacheId","getUrlLibraryName","Date","getTime","getItemId","url","getThumbnailUrl","thumbnailid","String","uniqueID","src","previewTimer","editWindow","allowAccess","largeIconEl","finraIconEl","getFlaggingLocation","flagging","location","clearTimeout","isVisible","elementEl","visible","parentElement","rerender","renderImage","renderData","renderCategoryItem","showOnTileList","renderFlags","currentTarget","lastSelectedItem","pop","lastSelectedItemItemIndex","selectedItemOrderIndex","direction","last","unshift","flagClasses","getFlaggingClasses","tooltip","hasExpired","title","catName","contEl","labelEl","isFavorite","type","useFavoriteCategoryIcons","useCategoryTitle","getCategoryTitle","name","prepareName","addOnClick","onItemClick","showCategoryIcon","iconEl","renderExpandedCategory","infoEl","description","trim","replaceAll","getChildren","expandImageSize","tileSize","onload","getParent","parentSize","getStyle","imageSize","getNaturalImageSize","aspectRatio","fitToMode","fitToModes","WIDTH","BOTH","HEIGHT","extensions","useNewFileTypeIcons","listView","newStyles","marginTop","ext","getExtensionFromData","sectionid","showGroupIcon","showFileTypeIcon","showLargeFileTypeIconForFiles","iconImageEl","cartSlides","isInSlideView","isInMixedView","addType","addTypes","SLIDE","showSlideIcon","isNaN","getImagesPath","getFileTypeIcon","isSourceNotAvailable","FINRAFileID","showFinra","PreviewWindow","openPreviewWindow","filename","canPreview","fileNameMode","fileNameModes","open","openCollection","virtualPresentation","href","onPreviewClick","sourceext","toLowerCase","showSlideOpenIcon","showFileOpenIcon","filetype","showGroupOpenIcon","showFavoriteOpenIcon","hasFakeSlides","isGuest","slideeditwindow","editable","onEditClick","hasedits","checkboxEl","spanEl","fileName","sourceNotAvailable","isGroup","FILE","showSlideNumber","slideNum","eventnumber","showSourceInfomation","itemnumber","slideCount","eventcount","slidecountex","useItemDataForGroups","getItemTypeString","showCartItemNumber","showSlideCount","hideSlideCount","getArgString","customTitleMeta","useSlideTitle","useFileTitle","getFileTitle","merge","groupname","cleanFileName","contentname","subTitle","showItemNumberInName","canDownload","mode","slideNameMode","nameEl","download","hideCheck","preview","customDownloadHandler","$empty","getFileSource","isMobile","appendChild","handleCartCheck","set","visibility","allowVideoStreaming","allowAudioStreaming","Request","onSuccess","isStreamable","playEl","onFailure","send","renderExpandedData","subEl","hoverMenuTypes","wasSearching","isCategory","lastSearch","outputType","getOutputType","outputTypes","FILES","SLIDES","GROUPS","MYFAVORITE","EVENTS","EVENTGROUPS","ALLCONTENT","onMouseOver","onMouseOut","rating","avgrating","ratingCount","ratingcount","avgRating","ratings","minimumRatingCount","ratingContEl","fullStars","min","floor","ratingMaxStars","halfStars","ceil","emptyStars","typeString","ViewRatingsWindow","itemType","AddRatingWindow","update","display","toggle","notify","fileClickedInCart","removed","LoadedContent","fastLaneItems","childNodes","tile","isMinimized","restore","MUI","focusWindow","windowEl","SlideEditWindow","onCloseComplete","evt","Event","isFastlaneTabOpen","folderInfo","loadFolder","treeData","tab","initializer","getTreeByType","treeView","selectFromTile","tree","prestype","catId","CatID","getSlides","parent","getSelected","root","handleTreeToggleAndLoad","loadTreeItem","cattype","uploads","getPath","selectTreeNodeByPath","loadListItem","loadWorkspaceTab","loadLibraryTab","children","found","selected","isOpen","filetypeextension","hash","changeHash","loadItemView","openToInfo","openToTab","openSlideShow","clickDelay","previewItem","textLengths","getMaxLabelLengths","showExtensionInName","maxLineLength","oneLineNoCheck","oneLine","labelLength","wrapCharacters","charAt","dotIndex","lastIndexOf","large","normal","openExtraLarge","toUpperCase","openURLOnClick","openURLFile","atIndex","underscoreIndex","extend","fileTitleAttribute","contenttitle","catAttribute","categoryTitleAttribute","catTitle","menuStylePrefix","containerStylePrefix","dropDownStylePrefix","showSearchOptions","dropDownItems","menuContainerEl","dropDownContainerEl","dropDownTriggerEl","bodyEl","isMenuShown","menuType","menuItemsEl","removeDisabledIcons","imgClass","toolTip","onClickFn","onClick","onItemClicked","grabTop","getFirst","contId","listId","newIdBase","getLast","onDropDownMouseOver","shown","getDropDownMenuItem","group","slideShowName","groupName","updateSubscriptionState","mopen","buttonEl","get","wrapperEl","upload","eventToolTip","slideShowToolTip","groupToolTip","borderLeftWidth","injectTop","buttonEls","split","join","menuItemEls","content","getStandardContent","subscribeRequest","JSON","subscription","sourceItem","contentRule","hasgfpdf","hasGFPDF","hasgfpptx","hasGFPPTX","customGFDownload","canDownloadFromSlide","allowDownloadFromSlide","isDeepLinkAllowed","canShare","canShowInfo","isSlideShow","canShowView","isSearch","presType","canAddFromDropdown","isSlide","slide","canDeleteFile","isowner","isuserfile","ownerid","sessionInfo","UserInfo","UserId","canSubscribe","subscriptions","tagName","getElement"],"mappings":"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","file":"tilelist.bundle.min.js","sourcesContent":["var previewWindows = [];\r\n\r\nLibrarian.CartDraggable = new Class({\r\n Binds: [\"onDragStart\", \"onDragEnd\", \"onDragItem\", \"onDrop\"],\r\n dragState: null,\r\n\r\n onDragStart: function (e) {\r\n var item = e.target;\r\n item.dragState = Librarian.dragState.dragStart;\r\n\r\n // Propagate event to the parent div that would handle multi-selection \r\n // if either control or shift is pressed\r\n if (!e.control && !e.shift) {\r\n e.preventDefault();\r\n e.returnValue = false;\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n onDragEnd: function (e) {\r\n var item = e.target;\r\n item.dragState = Librarian.dragState.notDragging;\r\n e.preventDefault();\r\n },\r\n\r\n onDragItem: function (e) {\r\n var item = e.target;\r\n if (item.dragState != Librarian.dragState.dragStart)\r\n return;\r\n\r\n item.dragState = Librarian.dragState.dragging;\r\n\r\n if (e.rightClick)\r\n return;\r\n\r\n e.stop();\r\n\r\n // `this` refers to the element with the .tile-list-item-image class\r\n var self = this,\r\n size = item.getSize(),\r\n isCart = item.tileItem.itemClassName.indexOf(\"cart\") >= 0,\r\n isFastLaneCart = item.id.indexOf(\"fastlane\") >= 0,\r\n // Get the position, size, and scroll position of the element\r\n parentTop = item.getTop(),\r\n parentHeight = item.getHeight(),\r\n parentEl = null;\r\n\r\n // If we're in the cart and there is a cart window, get it's content wrapper as the parent\r\n if (isCart && !isFastLaneCart && Librarian.cartWindow) {\r\n parentEl = Librarian.cartWindow.contentWrapperEl;\r\n } else if (isCart && isFastLaneCart) {\r\n parentEl = $(\"fastlaneCartList\");\r\n }\r\n\r\n if (parentEl) {\r\n parentTop = parentEl.getTop();\r\n parentHeight = parentEl.getHeight();\r\n }\r\n\r\n var clone = item.clone().setStyles({\r\n // Make sure the image is centered on the mouse position.\r\n left: e.page.x - (size.x / 2),\r\n top: e.page.y - (size.y / 2),\r\n bottom: \"auto\",\r\n right: \"auto\",\r\n opacity: 0.7,\r\n position: \"absolute\",\r\n zIndex: 1500\r\n }).addClass(\"drag-drop-clone\").inject(document.body),\r\n cartClasses = [\".tile-list-item-cart\", \".tile-list-item-cart-lg\", \".tile-list-item-cart-expand\"];\r\n\r\n // If we're not in the cart, add the cartArea link, the cart window, and each cart item as a droppable so we can drag things into the cart\r\n // \"[id^=WorkflowViewWindow].mocha\" = all elements whose ID ends with WorkflowViewWindow and has the \"mocha\" class, IE: All workflow view windows\r\n var droppables;\r\n if (!isCart)\r\n droppables = [\"#cartArea\", \"#cartArea li\", \"#cartArea li a\", \".tile-list-wrapper-cart\", \"[id^=WorkflowViewWindow].mocha\", \".section-cart-ontainer\", \"#fastlaneCartListWrapper\"].concat(cartClasses);\r\n // Otherwise, get all items of this same style\r\n else\r\n droppables = $$('.' + item.tileItem.itemClassName + \", .section-cart-container\");\r\n\r\n var drag = clone.makeDraggable({\r\n droppables: droppables,\r\n onEnter: function (draggable, droppable) {\r\n for (var i = 0; i < cartClasses.length; i++) {\r\n var className = cartClasses[i].substring(1);\r\n if (droppable.hasClass(className))\r\n droppable.swapClass(className, className + \"-sel\");\r\n }\r\n\r\n // show dropzone glow for fastlane\r\n if (Librarian.features.fastlane.load && Librarian.FastLane.isEnabled) {\r\n $(\"fastlaneCartList\").setStyle(\"background-color\", \"#F7F8F9\");\r\n $(\"fastlaneCartList\").setStyle(\"border\", \"1px solid #1b75bc\");\r\n }\r\n\r\n this.underEl = droppable;\r\n },\r\n onLeave: function (draggable, droppable) {\r\n\r\n // hide dropzone glow for fastlane\r\n if (Librarian.features.fastlane.load && Librarian.FastLane.isEnabled) {\r\n $(\"fastlaneCartList\").setStyle(\"background-color\", null);\r\n $(\"fastlaneCartList\").setStyle(\"border\", null);\r\n }\r\n\r\n for (var i = 0; i < cartClasses.length; i++) {\r\n var className = cartClasses[i].substring(1);\r\n if (droppable.hasClass(className + \"-sel\"))\r\n droppable.swapClass(className + \"-sel\", className);\r\n }\r\n\r\n this.underEl = null;\r\n },\r\n onDrop: function (dragging) {\r\n\r\n // hide dropzone glow for fastlane\r\n if (Librarian.features.fastlane.load && Librarian.FastLane.isEnabled) {\r\n $(\"fastlaneCartList\").setStyle(\"background-color\", null);\r\n $(\"fastlaneCartList\").setStyle(\"border\", null);\r\n }\r\n\r\n this.droppables.each(function (el) {\r\n for (var i = 0; i < cartClasses.length; i++) {\r\n var className = cartClasses[i].substring(1);\r\n if (el.hasClass(className + \"-sel\"))\r\n el.swapClass(className + \"-sel\", className);\r\n }\r\n });\r\n dragging.destroy();\r\n\r\n self.onDrop(item, isCart, this.underEl);\r\n },\r\n onCancel: function (dragging) {\r\n dragging.destroy();\r\n },\r\n onDrag: function (dragging, e) {\r\n if (!parentEl)\r\n return;\r\n\r\n // Number of pixels to scroll\r\n var scrollAmount = 20,\r\n // Number of pixels different before scrolling starts\r\n scrollThresh = 50,\r\n // Scroll position of the parent item\r\n scrollTop = parentEl.scrollTop;\r\n // Y position of the mouse\r\n var mouseY = e.page.y;\r\n\r\n // Scroll up if the mouse is above the top and the threshhold\r\n if (mouseY < (parentTop + scrollThresh))\r\n scrollTop -= scrollAmount;\r\n // Scroll down if the mouse is below the bottom and the threshhold\r\n else if (mouseY > ((parentTop + parentHeight) - scrollThresh))\r\n scrollTop += scrollAmount;\r\n\r\n // Only scroll if something actually changed\r\n if (scrollTop != parentEl.scrollTop)\r\n parentEl.scrollTo(0, scrollTop);\r\n }\r\n });\r\n\r\n drag.start(e);\r\n },\r\n\r\n onDrop: function (item, isCart, underEl) {\r\n if ((typeof underEl == \"undefined\") || (underEl == null))\r\n return;\r\n\r\n var section = null;\r\n // If this is a section contianer, get its index\r\n if (underEl.hasClass(\"section-cart-container\"))\r\n section = underEl.index;\r\n\r\n // Get selected items that would be dragged along the item being dragged\r\n // If there are no selected items, select the item being dragged.\r\n item.tileItem.onItemSelect({}, item.tileItem, true);\r\n // Sort items by item index to preserve the order\r\n var selectedItems = item.tileItem.list.selectedItems.sort(function (a, b) {\r\n return a.itemIndex - b.itemIndex;\r\n });\r\n var selectedDivs = selectedItems.map(function (item) {\r\n return item.div;\r\n });\r\n var initialDestination, fromData, toData;\r\n\r\n // If we're in the cart...\r\n if (isCart && Librarian.userCart) {\r\n // And we didn't drop on a section, reorder it\r\n if (section == null) {\r\n initialDestination = underEl.tileItem;\r\n toData = initialDestination.data;\r\n var comesBeforeTheDestination = selectedItems[0].itemIndex < initialDestination.itemIndex;\r\n\r\n for (var i = 0, len = selectedItems.length; i < len; i++) {\r\n fromData = selectedItems[i].data;\r\n\r\n Librarian.userCart.moveItem(fromData, toData);\r\n\r\n // To preserve order of selected items:\r\n // If the item comes before the target destination, the target destination becomes the newly moved item\r\n // that way the following items would be moved to the right of the previously moved item\r\n // otherwise use the initial target destination so that the following items would be moved to\r\n // the right of the previously moved item.\r\n toData = comesBeforeTheDestination ? fromData : initialDestination.data;\r\n }\r\n\r\n // if fastlane is enabled, tell fastlane cart module to re-render cart module items\r\n if (Librarian.features.fastlane.load && Librarian.FastLane.isEnabled) {\r\n Librarian.FastLane.fireEvent(\"fastlane-cart-module-update\");\r\n }\r\n\r\n }\r\n // Otherwise add the items to the section\r\n else {\r\n for (var i = 0, len = selectedItems.length; i < len; i++) {\r\n fromData = selectedItems[i].data;\r\n\r\n Librarian.userCart.setItemSection(fromData, section);\r\n }\r\n }\r\n\r\n Librarian.Cart.onChange();\r\n }\r\n // If we're not in the cart but we're dropping on a cart item, insert these items before that location in the cart\r\n else if (Librarian.userCart && underEl.className.contains(\"tile-list-item-cart\")) {\r\n initialDestination = underEl.tileItem;\r\n toData = initialDestination.data;\r\n\r\n\r\n var iterateSelectedItems = function (i) {\r\n if (i >= selectedItems.length) {\r\n return;\r\n }\r\n\r\n fromData = selectedItems[i].data;\r\n\r\n // Try to insert the new data before the old data\r\n // If succeeeds, let the user know and update the checkboxes\r\n Librarian.userCart.insertBefore(fromData, toData, function (insertedItem, success) {\r\n if (success === false) {\r\n iterateSelectedItems(++i);\r\n return;\r\n }\r\n \r\n Librarian.Utils.showCartNotification(insertedItem, Librarian.cartNotificationTypes.added, true);\r\n Librarian.Utils.updateAllCheckboxes();\r\n iterateSelectedItems(++i);\r\n });\r\n }\r\n\r\n iterateSelectedItems(0);\r\n }\r\n // If this was dropped on a workflow window\r\n else if (underEl.id.startsWith(\"WorkflowViewWindow\")) {\r\n // Try to get the object for this window\r\n var workflowWindow = Librarian.Workflow.viewWindows[underEl.id];\r\n if (!workflowWindow)\r\n return;\r\n\r\n for (var i = 0, len = selectedItems.length; i < len; i++) {\r\n fromData = selectedItems[i].data;\r\n\r\n // And then try to add the content to it\r\n if ((typeof workflowWindow.addContent == \"function\") && workflowWindow.addContent(fromData))\r\n workflowWindow.renderContent();\r\n }\r\n }\r\n // Otherwise we're dropping something into the cart\r\n else if (Librarian.userCart) {\r\n for (var i = 0, len = selectedItems.length; i < len; i++) {\r\n // Make sure we can add it\r\n if (Librarian.cart.canAddToCart(selectedItems[i].data)) {\r\n // Save the parent's extra fields if there is a parent\r\n var data = selectedItems[i].data;\r\n if (selectedItems[i].parentData)\r\n data.parentfields = Object.clone(selectedItems[i].parentData.extrafields);\r\n\r\n // If it adds successfully, do the updates\r\n if (Librarian.userCart.addToCart(data, null, null, section)) {\r\n Librarian.Utils.showCartNotification(selectedItems[i].data, Librarian.cartNotificationTypes.added, true);\r\n\r\n Librarian.Utils.updateAllCheckboxes();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Deselect selected items after dragging finished\r\n $$(selectedDivs).removeClass(\"selected\");\r\n if (item.tileItem.list) {\r\n item.tileItem.list.selectedItems = [];\r\n }\r\n }\r\n});\r\n\r\nLibrarian.TileList = new Class({\r\n Extends: Librarian.CartDraggable,\r\n Implements: [Options],\r\n Binds: [\"loadFromArray\",\r\n \"loadComplete\", \"searchLoadComplete\", \"deselect\"],\r\n\r\n options: {\r\n id: \"tileListWrapper\",\r\n wrapperClass: null,\r\n container: '',\r\n noCache: false,\r\n allowDrag: false,\r\n isMainPage: true,\r\n size: null,\r\n itemStyle: \"tile-list-item\",\r\n maxSearchItems: null,\r\n targetList: null,\r\n isSection: false,\r\n overrideName: null,\r\n page: 1,\r\n perPage: 10,\r\n total: null,\r\n clientPagination: false,\r\n openPreviewToInfo: false,\r\n openPreviewToTab: null,\r\n hoverMenuOverride: null,\r\n disableCart: false,\r\n workflowData: null,\r\n subHeader: false\r\n },\r\n\r\n wrapper: null,\r\n items: null,\r\n categories: null,\r\n settingsWindow: null,\r\n contextMenu: null,\r\n hoverMenu: null,\r\n catType: Librarian.catType.file,\r\n onItemRender: null,\r\n // Only used by code outside this class to\r\n // keep track if requests if more than one are running at a time\r\n lastRequest: null,\r\n\r\n selectedItems: [],\r\n\r\n initialize: function(options) {\r\n this.setOptions(options);\r\n\r\n this.wrapper = new Element(\"div\", {\r\n \"class\": \"tile-list-wrapper\",\r\n \"id\": this.options.id\r\n }).injectInside($(this.options.container));\r\n if ((typeof this.options.wrapperClass == \"string\") && (this.options.wrapperClass.length > 0))\r\n this.wrapper.addClass(this.options.wrapperClass);\r\n\r\n if (this.options.size == null) {\r\n // Set the size to the default, depending on whether this is the cart or not\r\n if (this.options.itemStyle.contains(\"-cart\"))\r\n this.options.size = Librarian.tileList.defaultCartSize;\r\n else\r\n this.options.size = Librarian.tileList.defaultSize;\r\n }\r\n\r\n this.items = [];\r\n this.categories = [];\r\n\r\n if ((this.options.hoverMenuOverride !== false) && Librarian.tileList.enableHoverMenu) {\r\n this.hoverMenu = new Librarian.HoverMenu({\r\n menuContainer: this.options.id + \"_tileMenu\",\r\n dropDownContainer: \"tileMenuDropDown\",\r\n dropDownListContainer: \"tileMenuList\",\r\n dropDownTrigger: \"cogDropDown\",\r\n menuIdPrefix: this.options.id + \"_tileMenu\",\r\n isInCart: this.options.itemStyle.contains(\"-cart\")\r\n }, Library.getTileListMenuItems(), Library.getTileListDropDownItems(), this);\r\n //force hide the drop down menu to prevent a bug where it can stay visible when using the view in library button\r\n if(this.hoverMenu.dropDownListContainerEl)\r\n this.hoverMenu.dropDownListContainerEl.hide();\r\n }\r\n\r\n // Deselect selected items when user clicks outside the thumbnail\r\n var self = this;\r\n this.options.container.addEvent(\"click\", function(e) {\r\n // Do not deselect if shift or control button is pressed\r\n if (!e.shift && !e.control)\r\n self.deselect();\r\n });\r\n },\r\n\r\n clean: function() {\r\n if (this.hoverMenu)\r\n this.hoverMenu.reset();\r\n\r\n this.destroyChildren();\r\n },\r\n\r\n reset: function() {\r\n // Deselect selected items\r\n this.deselect();\r\n this.clean();\r\n if (this.wrapper) {\r\n $(this.wrapper).empty();\r\n this.wrapper.innerHTML = '';\r\n\r\n /* HACK: These fix the hover menu getting cut off the last item in an expanded view TileList */\r\n $(this.wrapper).removeClass(\"tile-list-spacer\");\r\n }\r\n },\r\n\r\n destroy: function() {\r\n this.reset();\r\n\r\n if (this.wrapper) {\r\n this.wrapper.destroy();\r\n this.wrapper = null;\r\n }\r\n\r\n if (this.hoverMenu) {\r\n this.hoverMenu.destroy();\r\n this.hoverMenu = null;\r\n }\r\n\r\n if (this.settingsWindow) {\r\n this.settingsWindow.close();\r\n this.settingsWindow = null;\r\n }\r\n\r\n if (this.viewRatingsWindow) {\r\n this.viewRatingsWindow.close();\r\n this.viewRatingsWindow = null;\r\n }\r\n\r\n if (this.rateWindow) {\r\n this.rateWindow.close();\r\n this.rateWindow = null;\r\n }\r\n },\r\n\r\n searchLoadComplete: function(json, text, catType, cancelAll, lockNavigation) {\r\n // This needs a special function\r\n // because we need to stop all other requests\r\n // before processing the data.\r\n Librarian.Utils.clearRequests(cancelAll);\r\n\r\n var itemEl = $(\"searchTime\");\r\n if (itemEl)\r\n itemEl.innerHTML = json.searchtime / 1000.0;\r\n\r\n itemEl = $(\"searchCount\");\r\n if (itemEl)\r\n itemEl.innerHTML = json.total;\r\n\r\n itemEl = $(\"searchTimeTitle\");\r\n if (itemEl) {\r\n if ((typeof itemEl.style.forceDisplay == \"undefined\") || (itemEl.style.forceDisplay != \"none\"))\r\n itemEl.show();\r\n }\r\n\r\n itemEl = $(\"searchAgain\");\r\n // After the window is created, checking the minimize button position is the\r\n // only surefire way to see if it has been closed or not. \"isMinimized\" isn't\r\n // consistent, but minimizeButtonX will always be 0 when the window is closed,\r\n // but not destroyed.\r\n if (itemEl) {\r\n if (Librarian.searchWindow && (Librarian.searchWindow.minimizeButtonX != 0))\r\n itemEl.show(\"inline\");\r\n else\r\n itemEl.hide();\r\n }\r\n\r\n this.loadComplete(json, null, catType, lockNavigation);\r\n\r\n json = null;\r\n text = null;\r\n },\r\n\r\n loadComplete: function(json, text, catType, lockNavigation) {\r\n if (!json)\r\n return;\r\n if ((typeof catType != \"undefined\") && (catType != null))\r\n this.catType = catType.toInt();\r\n\r\n var items = json.data,\r\n categories = [];\r\n\r\n // If this is a list with just 1 item in it, and the item has a category ID\r\n // This is some category\r\n if (items.length == 1) {\r\n if (typeof items[0].catid != \"undefined\") {\r\n if (items[0].subcategories)\r\n categories = items[0].subcategories;\r\n\r\n // Combine files and groups into one array\r\n var files = items[0].files || [],\r\n groups = items[0].groups || [],\r\n presentations = items[0].presentations || [],\r\n slides = items[0].slides || [],\r\n eventgroups = items[0].eventgroups || [],\r\n events = items[0].events || [],\r\n catid = items[0].catid;\r\n\r\n // If we have events, save the parent data as the event group info for each event\r\n if (events.length > 0) {\r\n var eventGroup = items[0];\r\n eventGroup.events = null;\r\n delete eventGroup.events;\r\n\r\n for (var i = events.length; i--;)\r\n events[i].eventgroupinfo = eventGroup;\r\n }\r\n\r\n items = files.concat(groups).concat(presentations).concat(slides).concat(eventgroups).concat(events);\r\n\r\n // If we got a cat ID, save it in every item\r\n if (catid != null) {\r\n for (var i = 0; i < items.length; i++)\r\n items[i].catid = catid;\r\n }\r\n }\r\n }\r\n\r\n this.loadFromArray(items, categories, json.total, lockNavigation);\r\n\r\n if (this.options.isMainPage && (typeof Librarian.pageHeader != \"undefined\") && (Librarian.pageHeader != null))\r\n Librarian.pageHeader.load(json);\r\n\r\n json = null;\r\n },\r\n\r\n loadFromArray: function(items, categories, rowCount, lockNavigation) {\r\n\r\n if(items === undefined) { items = []; }\r\n\r\n if ((rowCount == undefined) || (rowCount == null) || (rowCount <= 0))\r\n rowCount = items.length;\r\n if ((lockNavigation == undefined) || (lockNavigation == null))\r\n lockNavigation = false;\r\n // Set the categories to an empty list if it wasn't provided\r\n if ((categories == null) || (typeof categories == \"undefined\"))\r\n categories = [];\r\n\r\n // Clear out anything that may be still lingering.\r\n this.reset();\r\n\r\n var fromCart = this.options.itemStyle.contains(\"cart\");\r\n // If we already have a request running, stop it.\r\n if (!fromCart && this.options.isMainPage && Librarian.contentLoader && Librarian.contentLoader.lastRequest) {\r\n Librarian.contentLoader.lastRequest.cancel();\r\n Librarian.contentLoader.lastRequest = null;\r\n }\r\n if (!fromCart && this.options.isMainPage) {\r\n Librarian.Utils.clearRequests();\r\n // HACK: This class fixes the hover menu getting cut off the last item in an expanded view TileList\r\n if (Browser.ie && (this.hoverMenu != null))\r\n $(this.wrapper).addClass(\"tile-list-spacer\");\r\n }\r\n\r\n // If this is a slideshow, we handle things differently\r\n if ((items.length == 1) && Librarian.slideshow.enabled && items[0].isslideshow) {\r\n if (Librarian.tileList.expandSlideShows) {\r\n // Save the item as the base data\r\n var data = items[0];\r\n // Remove all \"items\"\r\n data.items = null;\r\n delete data.items;\r\n\r\n items = [];\r\n // Add an entry for each slide in the slideshow, increasing the slide number by 1 for each\r\n for (var i = 0, length = data.itemcount; i < length; i++) {\r\n var itemData = Object.clone(data);\r\n itemData.slidenumber = i + 1;\r\n items.push(itemData);\r\n }\r\n }\r\n else {\r\n // Remove the items from the first element in the array\r\n items[0].items = null;\r\n delete items[0].items;\r\n }\r\n }\r\n\r\n // Check if we actually have content to display\r\n if ((items.length == 0) && (categories.length == 0)) {\r\n // The message is different in the cart\r\n if (fromCart) {\r\n new Element(\"span\", {\r\n \"class\": \"tile-list-empty-string\",\r\n \"html\": this.options.isSection ? Librarian.Lang.getString(\"section_empty\") : Librarian.Lang.getString(\"cart_empty\")\r\n }).injectInside(this.wrapper);\r\n }\r\n // and the search page\r\n else if (Librarian.search.isSearching && this.options.isMainPage) {\r\n // Hide the navigation buttons\r\n if (!lockNavigation)\r\n Librarian.Search.showSearchNavigation(false);\r\n } else {\r\n var noItemsNotifEl = new Element(\"span\", {\r\n \"text\": Librarian.Lang.getString(\"noitems\"),\r\n \"class\": \"tilelist-notif\"\r\n });\r\n this.wrapper.grab(noItemsNotifEl);\r\n }\r\n\r\n return;\r\n }\r\n\r\n var item,\r\n useMaxItems = false,\r\n maxItems = items.length;\r\n\r\n // If we're doing a search and this tilelist isn't in the cart\r\n if (Librarian.search.isSearching && this.options.isMainPage && !fromCart) {\r\n // And we have a maxSearchItems number, use it\r\n if (this.options.maxSearchItems && (this.options.maxSearchItems < items.length)) {\r\n maxItems = this.options.maxSearchItems;\r\n useMaxItems = true;\r\n }\r\n else\r\n maxItems = Librarian.search.maxResults;\r\n\r\n if (typeof Librarian.Search.prepSearchNavigation == \"function\")\r\n Librarian.Search.prepSearchNavigation(maxItems, rowCount, lockNavigation);\r\n\r\n var itemEl = $(\"selectAll\");\r\n if (itemEl) {\r\n if ((typeof itemEl.style.forceDisplay == \"undefined\") || (itemEl.style.forceDisplay != \"none\"))\r\n itemEl.show(\"inline\");\r\n\r\n itemEl = $(\"selectAllSpacer\");\r\n if (itemEl) {\r\n if ((typeof itemEl.style.forceDisplay == \"undefined\") || (itemEl.style.forceDisplay != \"none\"))\r\n itemEl.show(\"inline\");\r\n }\r\n }\r\n\r\n itemEl = null;\r\n }\r\n\r\n // Display all the sub categories, if there are any\r\n for (var i = 0; i < categories.length; i++) {\r\n item = this.createCategoryItem(categories[i]);\r\n if (item) {\r\n item.render();\r\n this.categories.push(item);\r\n }\r\n }\r\n\r\n var start = 0,\r\n subItems;\r\n\r\n // Allow for client-side pagination\r\n if (this.options.clientPagination) {\r\n start = (this.options.page - 1) * this.options.perPage;\r\n maxItems = this.options.perPage;\r\n useMaxItems = true;\r\n }\r\n\r\n for (var i = start; (i < items.length) && (!useMaxItems || (this.items.length < maxItems)); i++) {\r\n // File / Group Slides\r\n if (items[i].slides)\r\n subItems = items[i].slides;\r\n // Virtual Presentation Slides\r\n else if (items[i].items && items[i].items.length > 0 && !fromCart && (typeof items[i].catid != \"number\")) {\r\n subItems = items[i].items;\r\n\r\n // Need this for when adding from featured content thing. no freaking idea why this is needed\r\n if (subItems.items)\r\n subItems = subItems.items;\r\n }\r\n // File / Group Category\r\n else {\r\n subItems = [];\r\n subItems.push(items[i]);\r\n }\r\n\r\n // If this is an object with no subitems, it's an empty category\r\n // Don't show the empty selection message unless we aren't rendering categories too\r\n if ((items.length == 1) && (subItems.length == 0) && (categories.length == 0)) {\r\n var noItemsNotifEl = new Element(\"span\", {\r\n \"text\": Librarian.Lang.getString(\"noitems\"),\r\n \"class\": \"tilelist-notif\"\r\n });\r\n this.wrapper.grab(noItemsNotifEl);\r\n return;\r\n }\r\n\r\n for (var j = 0; (j < subItems.length) && (!useMaxItems || (this.items.length < maxItems)) ; j++) {\r\n var contentType = subItems[j].contenttype;\r\n // Use the event content info, if there is any\r\n if (subItems[j].contentinfo)\r\n subItems[j] = subItems[j].contentinfo;\r\n\r\n if ((subItems[j].catid > 0) && (contentType == Librarian.contentType.category)) {\r\n item = this.createCategoryItem(subItems[i]);\r\n if (item) {\r\n item.render();\r\n this.categories.push(item);\r\n }\r\n }\r\n else {\r\n item = this.createTileItem(subItems[j]);\r\n if (item) {\r\n var parentData = null,\r\n catType = this.catType;\r\n\r\n // This is a slide only if a slide id is provided\r\n if (items[i].slideinfo && (items[i].slideinfo.slideid > 0))\r\n parentData = Object.clone(items[i].slideinfo);\r\n // This is a file\r\n if (items[i].fileinfo)\r\n parentData = Object.clone(items[i].fileinfo);\r\n // This is a content group\r\n if (items[i].groupinfo) {\r\n parentData = Object.clone(items[i].groupinfo);\r\n catType = Librarian.catType.globalFavorite;\r\n }\r\n // This is an event group\r\n if (items[i].eventgroupinfo && !items[i].eventid) {\r\n parentData = Object.clone(items[i].eventgroupinfo);\r\n catType = Librarian.catType.event;\r\n }\r\n if (items[i].eventid) {\r\n parentData = Object.clone(items[i]);\r\n catType = Librarian.catType.event;\r\n }\r\n // This is a virtual presentation\r\n if (items[i].presid /*&& items[i].items*/ && (typeof items[i].catid != \"number\")) {\r\n parentData = Object.subset(items[i], [\"name\", \"description\", \"presid\", \"slidecount\", \"createddate\", \"lastmoddate\", \"prestype\"]);\r\n catType = Librarian.catType.myFavorite;\r\n }\r\n // Save any extra data we may have\r\n if (!item.data.extrafields && items[i].extrafields)\r\n item.data.extrafields = Object.clone(items[i].extrafields);\r\n // Save any extra parent data sent (usually from the cart)\r\n if (items[i].parentfields) {\r\n if (!parentData)\r\n parentData = {};\r\n\r\n parentData.extrafields = items[i].parentfields;\r\n }\r\n\r\n // Store the parent data for this item to be referenced later\r\n if (item.data != parentData)\r\n item.parentData = parentData;\r\n\r\n // Set the cat type of this item for use later\r\n if (typeof item.data.catType != \"number\")\r\n item.data.catType = catType;\r\n\r\n // Clean up the item data\r\n Librarian.Utils.prepareItemData(item.data, j, item.parentData, Math.max(subItems.length, rowCount), i + j);\r\n\r\n item.render();\r\n this.items.push(item);\r\n }\r\n }\r\n }\r\n }\r\n\r\n Librarian.Utils.updateCheckboxes(this.getItemStyle());\r\n if ((typeof fileList != \"undefined\") && (fileList != null))\r\n Librarian.ListView.updateCartCheckBoxes.bind(fileList)();\r\n\r\n items = null;\r\n categories = null;\r\n\r\n this.afterLoadComplete();\r\n },\r\n\r\n\r\n afterLoadComplete: function() {\r\n return;\r\n },\r\n\r\n reload: function (size) {\r\n // Small thumbnail does not use a modifier\r\n if (size == \"sm\")\r\n size = \"\";\r\n\r\n var oldSize = this.options.size;\r\n var sizeChanged = false;\r\n if ((typeof size != \"undefined\") && (size != null)) {\r\n this.options.size = size;\r\n sizeChanged = (size != oldSize);\r\n }\r\n\r\n if (sizeChanged) {\r\n var style = this.getItemStyle();\r\n for (var i = 0; i < this.items.length; i++) {\r\n // Clear the old class name to ensure that the item gets rerendered, otherwise switching from large to small or small to large will break styles\r\n // but preserve the selected state and new style\r\n var hasSelectedClass = this.items[i].div.hasClass(\"selected\") ? \" selected\" : \"\";\r\n this.items[i].div.className = style + hasSelectedClass;\r\n\r\n if (oldSize.length > 0) {\r\n this.items[i].wrapper.removeClass(\"tile-list-items-wrapper-\" + oldSize);\r\n this.items[i].flags.removeClass(\"tile-list-flags-wrapper-\" + oldSize);\r\n }\r\n if (size.length > 0) {\r\n this.items[i].wrapper.addClass(\"tile-list-items-wrapper-\" + size);\r\n this.items[i].flags.addClass(\"tile-list-flags-wrapper-\" + size);\r\n }\r\n\r\n this.items[i].size = this.options.size;\r\n this.items[i].itemClassName = style;\r\n\r\n // Remove the cart checks so they can be reset\r\n if (this.hoverMenu && this.items[i].cartCheckEl) {\r\n this.items[i].cartCheckEl.destroy();\r\n this.items[i].cartCheckEl = null;\r\n }\r\n\r\n this.items[i].render();\r\n }\r\n\r\n var catStyle = this.getCatStyle();\r\n for (var i = 0; i < this.categories.length; i++) {\r\n if (oldSize.length > 0)\r\n this.categories[i].wrapper.removeClass(\"tile-list-items-wrapper-\" + oldSize);\r\n if (size.length > 0)\r\n this.categories[i].wrapper.addClass(\"tile-list-items-wrapper-\" + size);\r\n\r\n this.categories[i].size = this.options.size;\r\n this.categories[i].div.className = catStyle;\r\n this.categories[i].itemClassName = catStyle;\r\n this.categories[i].render();\r\n }\r\n }\r\n\r\n // Update the checkboxes on the main page\r\n Librarian.Utils.updateAllCheckboxes();\r\n\r\n if (this.hoverMenu) {\r\n // Get the class name for this size\r\n var className = (this.options.size == '') ? \"ico-slides-small\" : ((this.options.size == \"lg\") ? \"ico-slides-large\" : \"ico-detailed-list-view\"),\r\n classes = [\"ico-slides-small\", \"ico-slides-large\", \"ico-detailed-list-view\"],\r\n itemEl = null;\r\n\r\n // Find whichever class is already being used\r\n for (var i = 0; (i < classes.length) && (itemEl == null) ; i++)\r\n itemEl = this.hoverMenu.getMenuItem(classes[i]);\r\n\r\n // Switch it out\r\n if (itemEl)\r\n itemEl.className = className;\r\n }\r\n\r\n // When swithing from small to large or large to small, the elements don't get completely redrawn for some reason. \r\n // This forces a redraw that will fix it. You need the timeout or it won't work, I don't really know why. (Maybe it happens too fase or the JS can realize it isn't doing anything)\r\n this.wrapper.hide();\r\n var self = this;\r\n window.setTimeout(function() {\r\n self.wrapper.show();\r\n }, 0);\r\n\r\n },\r\n\r\n showLoader: function() {\r\n $(this.wrapper).empty();\r\n new Element(\"div\", {\r\n \"html\": Librarian.Lang.getString(\"loading\")\r\n }).injectInside(this.wrapper);\r\n },\r\n\r\n search: function(text) {\r\n if (text && text.length) {\r\n Librarian.contentLoader.onComplete = this.loadComplete;\r\n Librarian.contentLoader.loadFromUrl(Librarian.path.getMethodUrl(\"search\") + \"&q=\" + text + \"&out=dgrid\");\r\n }\r\n },\r\n\r\n createCategoryItem: function(data) {\r\n if (data && data.catid && Librarian.TileList.isValidItem(data)) {\r\n var sizeStyle = '';\r\n if (this.options.size.length > 0)\r\n sizeStyle = '-' + this.options.size;\r\n\r\n return new Librarian.TileList.TileItem(this, data, this.options.itemStyle + sizeStyle + \"-cat\", this.options.targetList);\r\n }\r\n return null;\r\n },\r\n\r\n createTileItem: function(data) {\r\n var extrafields = data.extrafields;\r\n // This is a slide only if a slide id is provided\r\n if (data.slideinfo && (data.slideinfo.slideid > 0))\r\n data = data.slideinfo;\r\n // This is a file\r\n if (data.fileinfo)\r\n data = data.fileinfo;\r\n // This is a content group\r\n if (data.groupinfo)\r\n data = data.groupinfo;\r\n // This is an event group\r\n if (data.eventgroupinfo && ! data.eventid)\r\n data = data.eventgroupinfo;\r\n // Pass in extrafields for search results\r\n if (extrafields)\r\n data.extrafields = extrafields;\r\n // If this is something valid, create a tile out of it\r\n if ((data.fileid || data.groupid || data.presid || data.slideid || data.eventid || data.contentid) && Librarian.TileList.isValidItem(data, this.options.itemStyle.contains(\"-cart\")))\r\n return new Librarian.TileList.TileItem(this, data, this.getItemStyle(), this.options.targetList, this.items.length);\r\n\r\n return null;\r\n },\r\n\r\n getItem: function(index) {\r\n if (!this.items)\r\n return null;\r\n\r\n if ((index < 0) || (index >= this.getSize()))\r\n return null;\r\n\r\n return this.items[index];\r\n },\r\n\r\n setItem: function(index, data) {\r\n if (!this.items)\r\n return;\r\n\r\n if ((index < 0) || (index >= this.getSize()))\r\n return;\r\n\r\n this.items[index] = data;\r\n },\r\n\r\n getItemData: function(index) {\r\n var item = this.getItem(index);\r\n\r\n if (item)\r\n return item.data;\r\n\r\n return null;\r\n },\r\n\r\n setItemData: function(index, data) {\r\n var item = this.getItem(index);\r\n\r\n if (item) {\r\n item.data = data;\r\n this.setItem(index, item);\r\n }\r\n },\r\n\r\n getItemStyle: function() {\r\n return this.options.itemStyle + ((this.options.size.length > 0) ? '-' + this.options.size : '');\r\n },\r\n\r\n getCatStyle: function() {\r\n return this.getItemStyle() + \"-cat\";\r\n },\r\n\r\n getSize: function() {\r\n if (!this.items)\r\n return 0;\r\n\r\n return this.items.length;\r\n },\r\n\r\n indexOf: function(data, useSlideIndex) {\r\n var slideIndex = 0;\r\n\r\n for (var i = 0, length = this.getSize(); i < length; i++) {\r\n if (Librarian.Utils.isDataEqual(this.items[i].data, data))\r\n return (useSlideIndex === true) ? slideIndex : i;\r\n\r\n slideIndex += (this.items[i].data.slideid <= 0) ? (this.items[i].data.pagecount || this.items[i].data.slidecount) || 1 : 1;\r\n }\r\n\r\n return -1;\r\n },\r\n\r\n destroyChild: function(item) {\r\n var index = this.items.indexOf(item);\r\n\r\n if (index >= 0) {\r\n this.items.splice(index, 1);\r\n }\r\n\r\n if (this.hoverMenu)\r\n this.hoverMenu.reset();\r\n \r\n item.destroy();\r\n },\r\n\r\n destroyChildren: function() {\r\n for (var i = 0; i < this.items.length; i++) {\r\n this.items[i].destroy();\r\n this.items[i] = null;\r\n }\r\n\r\n for (var j = 0; j < this.categories.length; j++) {\r\n this.categories[j].destroy();\r\n this.categories[j] = null;\r\n }\r\n\r\n this.items.length = 0;\r\n this.categories.length = 0;\r\n },\r\n\r\n getElementsWithCheckState: function(checkState) {\r\n if (!this.wrapper)\r\n return [];\r\n\r\n var elements = $(this.wrapper).getElements('.' + this.getItemStyle()),\r\n checked = [];\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n if (elements[i].tileItem.checked == checkState)\r\n checked.push({ fileid: elements[i].tileItem.data.fileid, slidenum: elements[i].tileItem.data.slidenumber, slidecount: elements[i].tileItem.data.slidecount });\r\n }\r\n\r\n return checked;\r\n },\r\n\r\n getCheckedElements: function() {\r\n return this.getElementsWithCheckState(true);\r\n },\r\n\r\n getUnCheckedElements: function() {\r\n return this.getElementsWithCheckState(false);\r\n },\r\n\r\n getVisibleCheckboxes: function(removeOverflow) {\r\n // If we aren't told whether or not to remove overflow elements, assume not.\r\n if ((typeof removeOverflow == \"undefined\") || (removeOverflow == null))\r\n removeOverflow = false;\r\n\r\n var elements = $$('.' + this.getItemStyle()).filter(\r\n // Filter out hidden elements\r\n function(item) {\r\n return !!(!item || item.offsetHeight || item.offsetWidth);\r\n });\r\n\r\n // If we want to remove the elements hidden by overflow...\r\n if (removeOverflow) {\r\n var visibleElements = [];\r\n\r\n // Check every element to make sure that it is physically visible on the page.\r\n // This is for elements that are hidden inside an overflowed div, or something similar.\r\n var coords;\r\n for (var i = 0; i < elements.length; i++) {\r\n coords = elements[i].getCoordinates();\r\n if (document.elementFromPoint(coords.left + (coords.width / 2), coords.top + (coords.height / 2)) == elements[i])\r\n visibleElements.push(elements[i]);\r\n }\r\n\r\n return visibleElements;\r\n }\r\n\r\n return elements;\r\n },\r\n\r\n selectAll: function(select, selectFile, sectionIndex) {\r\n if (!Librarian.userCart)\r\n return;\r\n\r\n var postAddRemoveUpdate = function(count, cartfull) {\r\n if (count > 0) {\r\n Librarian.Utils.updateCheckboxes(this.getItemStyle());\r\n if (typeof fileList != \"undefined\")\r\n Librarian.ListView.updateCartCheckBoxes.bind(fileList)();\r\n\r\n if (Librarian.userCart && (typeof Librarian.userCart.onUpdate == \"function\"))\r\n Librarian.userCart.onUpdate();\r\n\r\n Librarian.Cart.onChange();\r\n Librarian.Utils.notification(Librarian.Lang.getString(\"cart_updated\"), $(\"cartArea\"));\r\n }\r\n\r\n if (cartfull) {\r\n if (Librarian.cart.blockAddWhenFull) {\r\n Librarian.Utils.error(Librarian.Lang.getString(\"cart_full\"));\r\n }\r\n else {\r\n Librarian.Utils.message(Librarian.Lang.getString(\"cart_full_warning\"), null, 5000);\r\n }\r\n \r\n }\r\n \r\n }.bind(this);\r\n\r\n var count = 0,\r\n cartfull = false,\r\n // Get the first item in the list\r\n item = this.getItem(0),\r\n data = null;\r\n // And, if it exists, get its data too\r\n if (item)\r\n data = item.data;\r\n\r\n var parentData = null;\r\n // Make sure there is some data or parent data to use\r\n if (data || (item && item.parentData)) {\r\n // If there is data, try to turn it into a parent\r\n if (data)\r\n parentData = Librarian.Cart.Item.makeParent(data);\r\n // Try to get the parent data from the tile item, if it exists\r\n if (item && item.parentData)\r\n parentData = item.parentData;\r\n // Save the number of children\r\n parentData.slidecount = this.items.length;\r\n }\r\n\r\n // If we're not searching and the first item is a slide, we're in slide view\r\n // If we're told to, add/remove the entire file rather than each slide\r\n if (((selectFile === true) || ((selectFile !== false) && Librarian.tileList.selectAllSlidesAsFile)) && parentData && data && !Librarian.search.isSearching &&\r\n (data.fileid > 0) && (data.slideid > 0) && Librarian.userCart.canAddToCart(parentData, false)) {\r\n if (select) {\r\n // Don't add items that are a already in the cart\r\n if (!Librarian.userCart.isInCart(parentData)) {\r\n if (Librarian.userCart.addToCart(parentData, false, false, sectionIndex))\r\n count++;\r\n postAddRemoveUpdate(count, cartfull);\r\n }\r\n }\r\n else {\r\n Librarian.userCart.removeFromCart(parentData, false, false, false, false, function(cartItem) {\r\n if (cartItem != null)\r\n count++;\r\n postAddRemoveUpdate(count, cartfull);\r\n });\r\n }\r\n }\r\n else {\r\n // Get the current cart count.\r\n // The select all can run faster than the cart update on some systems\r\n // so this function needs to maintain its own running cart count\r\n // or else the maximum limit can be surpassed.\r\n var cartcount = Librarian.userCart.getCount(true, true);\r\n\r\n // Otherwise go through the entire list and add/remove each item\r\n // Add Items\r\n if (select) {\r\n for (var i = 0; i < this.items.length; i++) {\r\n // Get how many items are going to be added\r\n var slidecount = (this.items[i].data.slideid > 0) ? 1 : this.items[i].data.pagecount || this.items[i].data.slidecount || 1;\r\n\r\n // Don't continue if we're trying to add and the count is over the cart's max limit and the setting to block adding when full is on\r\n if (!(Librarian.cart.maxItems > 0) || ((slidecount + cartcount) <= Librarian.cart.maxItems) || !Librarian.cart.blockAddWhenFull) {\r\n // Save the parent's extra fields if there is a parent\r\n var data = this.items[i].data;\r\n if (this.items[i].parentData)\r\n data.parentfields = Object.clone(this.items[i].parentData.extrafields);\r\n\r\n //Check if cart full\r\n cartfull = ((slidecount + cartcount) >= Librarian.cart.maxItems);\r\n\r\n // Don't add items that are a already in the cart or have disabled the ability to add to cart\r\n // Use the checkbox as a shortcut so we don't have to check the actual cart every time\r\n if (this.items[i].cartCheckEl && (!this.items[i].checked || !Librarian.userCart.isInCart(data))) {\r\n if (Librarian.userCart.addToCart(data, false, false, sectionIndex)) {\r\n cartcount += slidecount;\r\n count++;\r\n }\r\n }\r\n }\r\n else\r\n cartfull = true;\r\n }\r\n postAddRemoveUpdate(count, cartfull);\r\n }\r\n // Remove Items\r\n else\r\n this.removeAll(postAddRemoveUpdate);\r\n }\r\n },\r\n\r\n removeAll: function(callback) {\r\n var items = this.items,\r\n count = 0,\r\n index = 0;\r\n\r\n var removeNextItem = function(cartItem) {\r\n if (cartItem != null)\r\n count++;\r\n\r\n if (items.length > index)\r\n Librarian.userCart.removeFromCart(items[index++].data, false, false, false, false, removeNextItem, removeNextItem);\r\n // After everything is removed, update the checkboxes\r\n else\r\n callback(count, false);\r\n };\r\n\r\n // Recursively remove items\r\n removeNextItem();\r\n },\r\n\r\n reloadThumbnails: function(breakCache) {\r\n if (typeof breakCache != \"boolean\")\r\n breakCache = false;\r\n\r\n // Update the cacheId and reload the visible thumbnails\r\n Librarian.cacheId = Librarian.path.getUrlLibraryName() + '-' + (new Date().getTime());\r\n\r\n var imageEl, item;\r\n for (var i = 0; i < this.items.length; i++) {\r\n item = this.items[i];\r\n imageEl = $(item.getItemId());\r\n\r\n if (imageEl) {\r\n var url = Librarian.Utils.getThumbnailUrl(this.options.size, item.data);\r\n if (this.options.noCache && (!item.data.thumbnailid || breakCache))\r\n url += '&' + String.uniqueID();\r\n imageEl.src = url;\r\n }\r\n }\r\n },\r\n\r\n // Deselect selected items\r\n deselect: function(e) {\r\n var selectedDivs = this.selectedItems.map(function(item, index) {\r\n return item.div;\r\n });\r\n\r\n $$(selectedDivs).removeClass(\"selected\");\r\n this.selectedItems = [];\r\n }\r\n});\r\n\r\nLibrarian.TileList.TileItem = new Class({\r\n Binds: [\"onPreviewClick\", \"onEditClick\", \"onItemClick\", \"destroy\", \"handleCartCheck\", \"render\", \"renderFlags\", \"onItemSelect\"],\r\n\r\n list: null,\r\n targetList: null,\r\n previewTimer: null,\r\n editWindow: null,\r\n\r\n parentData: null,\r\n data: null,\r\n size: null,\r\n\r\n allowAccess: true,\r\n checked: false,\r\n\r\n itemClassName: '',\r\n\r\n wrapper: null,\r\n div: null,\r\n flags: null,\r\n cartCheckEl: null,\r\n largeIconEl: null,\r\n finraIconEl: null,\r\n\r\n itemIndex: -1,\r\n\r\n initialize: function(list, data, className, targetList, index) {\r\n this.list = list;\r\n this.targetList = targetList || list;\r\n this.data = data;\r\n this.size = list.options.size;\r\n this.itemIndex = index;\r\n this.wrapper = new Element(\"div\", { \"class\": \"tile-list-items-wrapper\" }).injectInside(list.wrapper);\r\n this.flags = new Element(\"div\", { \"class\": \"tile-list-flags-wrapper \" + Librarian.Utils.getFlaggingLocation(Librarian.flagging.location) }).injectInside(this.wrapper);\r\n if (this.size.length > 0) {\r\n this.wrapper.addClass(\"tile-list-items-wrapper-\" + this.size);\r\n this.flags.addClass(\"tile-list-flags-wrapper-\" + this.size);\r\n }\r\n\r\n this.div = new Element(\"div\").addClass(className).injectInside(this.wrapper);\r\n this.div.tileItem = this;\r\n // Add select event\r\n this.div.addEvent(\"mousedown\", this.onItemSelect.bind(this));\r\n\r\n // Prevent div's event from propagating to parent container so that it won't trigger the deselect event\r\n this.div.addEvent(\"click\", function (e) {\r\n if (!e.shift)\r\n e.preventDefault();\r\n e.returnValue = false;\r\n return false;\r\n });\r\n this.itemClassName = className;\r\n },\r\n\r\n destroy: function() {\r\n this.parentData = null;\r\n this.list = null;\r\n this.data = null;\r\n this.flags = null;\r\n this.div.tileItem = null;\r\n\r\n if (this.cartCheckEl) {\r\n $(this.cartCheckEl).destroy();\r\n this.cartCheckEl = null;\r\n }\r\n\r\n if (this.previewTimer) {\r\n clearTimeout(this.previewTimer);\r\n this.previewTimer = null;\r\n }\r\n\r\n if (this.editWindow) {\r\n this.editWindow.close();\r\n this.editWindow = null;\r\n }\r\n\r\n if (this.largeIconEl) {\r\n $(this.largeIconEl).destroy();\r\n this.largeIconEl = null;\r\n }\r\n\r\n // In IE8, storing the new Element in the init apparently doesn't store it as a MooTools object\r\n // By doing the $(..) on the div, we ensure that it is a MooTools object and thus has the destroy method\r\n $(this.div).destroy();\r\n this.div = null;\r\n $(this.wrapper).destroy();\r\n this.wrapper = null;\r\n },\r\n\r\n isVisible: function() {\r\n // Get the location of this div\r\n var coords = this.div.getCoordinates(),\r\n // Get the element at the center of this div's location\r\n elementEl = document.elementFromPoint(coords.left + (coords.width / 2), coords.top + (coords.height / 2)),\r\n // If the element is this div, or the parent element is this div, or the parent's parent is this div, this tile is visible\r\n visible = (elementEl != null) && ((elementEl == this.div) ||\r\n ((elementEl.parentElement != null) && ((elementEl.parentElement == this.div) ||\r\n ((elementEl.parentElement.parentElement != null) && (elementEl.parentElement.parentElement == this.div)))));\r\n\r\n coords = null;\r\n elementEl = null;\r\n\r\n return visible;\r\n },\r\n\r\n render: function(rerender) {\r\n if ((typeof rerender == \"undefined\") || (rerender == null))\r\n rerender = false;\r\n\r\n // Make sure the div is empty first\r\n $(this.div).empty();\r\n\r\n // Render the file/group/slide, if it is one unless it is a category\r\n if ((this.data.fileid || this.data.groupid || this.data.presid || this.data.slideid || this.data.eventid || this.data.contentid)\r\n && this.data.contenttype !== Librarian.contentType.category) {\r\n this.renderImage();\r\n this.renderData();\r\n\r\n if (!rerender && (typeof this.list.onItemRender == \"function\"))\r\n this.list.onItemRender(this);\r\n }\r\n // Otherwise, it's a category\r\n else\r\n this.renderCategoryItem();\r\n\r\n if (Librarian.flagging.enabled && Librarian.flagging.showOnTileList)\r\n this.renderFlags();\r\n },\r\n\r\n onItemSelect: function (e, tileItem, dragging) {\r\n if (!this.list.options.allowDrag)\r\n return false;\r\n\r\n var cartItem = tileItem ? tileItem : e.event.currentTarget.tileItem,\r\n index = this.list.selectedItems.indexOf(cartItem),\r\n selectedDivs = this.list.selectedItems.map(function(item) {\r\n return item.div;\r\n });\r\n\r\n if (!cartItem)\r\n return false;\r\n\r\n // Multi select a range of items\r\n if (e.shift) {\r\n // If nothing selected, start the selection from the first item\r\n var lastSelectedItem = this.list.selectedItems.pop() || this.list.items[0],\r\n lastSelectedItemItemIndex = lastSelectedItem.itemIndex,\r\n selectedItemOrderIndex = cartItem.itemIndex,\r\n direction = selectedItemOrderIndex - lastSelectedItemItemIndex;\r\n\r\n // Do not reset the selected items if control button is pressed together with shift button\r\n if (!e.control) {\r\n // Reset selected items \r\n $$(selectedDivs).removeClass(\"selected\");\r\n this.list.selectedItems = [];\r\n }\r\n else {\r\n // Skip items that were already selected\r\n if (index != -1) {\r\n // Target comes before the last selected item\r\n if (direction < 0) {\r\n selectedItemOrderIndex = selectedItemOrderIndex + 1;\r\n }\r\n // Target comes after the last selected item\r\n else if (direction > 0) {\r\n selectedItemOrderIndex = selectedItemOrderIndex - 1;\r\n\r\n }\r\n }\r\n }\r\n\r\n // Get all items between the last selected item and the target selected item\r\n if (lastSelectedItem) { \r\n lastSelectedItem.div.addClass(\"selected\");\r\n this.list.selectedItems.push(lastSelectedItem);\r\n\r\n // Target comes before the last selected item\r\n if (direction < 0) {\r\n for (var i = selectedItemOrderIndex, last = lastSelectedItemItemIndex; i < last; i++) {\r\n this.list.items[i].div.addClass(\"selected\");\r\n this.list.selectedItems.unshift(this.list.items[i]);\r\n }\r\n }\r\n // Target comes after the last selected item\r\n else if (direction > 0) {\r\n for (var i = selectedItemOrderIndex, last = lastSelectedItemItemIndex; i > last; i--) {\r\n this.list.items[i].div.addClass(\"selected\");\r\n this.list.selectedItems.unshift(this.list.items[i]);\r\n }\r\n }\r\n }\r\n }\r\n // Multi select cart items\r\n else if (e.control) {\r\n // Select the item if it is not yet selected\r\n if (index == -1) {\r\n cartItem.div.addClass(\"selected\");\r\n this.list.selectedItems.push(cartItem);\r\n }\r\n // Deslect the item if it is already selected\r\n else {\r\n cartItem.div.removeClass(\"selected\");\r\n this.list.selectedItems.splice(index, 1);\r\n }\r\n }\r\n // If the item being dragged is not yet selected treat it as a single select\r\n else if (dragging) {\r\n if (index == -1) {\r\n $$(selectedDivs).removeClass(\"selected\");\r\n cartItem.div.addClass(\"selected\");\r\n this.cartCheckEl.show();\r\n this.checked = true;\r\n this.list.selectedItems = [cartItem];\r\n }\r\n }\r\n // Single select\r\n else {\r\n $$(selectedDivs).removeClass(\"selected\");\r\n cartItem.div.addClass(\"selected\");\r\n this.list.selectedItems = [cartItem];\r\n }\r\n\r\n return false;\r\n },\r\n\r\n renderFlags: function() {\r\n if (this.flags)\r\n this.flags.empty();\r\n\r\n var flagClasses = Librarian.Utils.getFlaggingClasses(this.data.extrafields);\r\n for (var i = 0, len = flagClasses.length; i < len; i++) {\r\n var tooltip = null;\r\n if (flagClasses[i].contains(\"expired-flag\")) {\r\n hasExpired = true;\r\n tooltip = Librarian.Lang.getString(\"expired_content\");\r\n }\r\n if (flagClasses[i].contains(\"viewonly-flag\")) {\r\n tooltip = Librarian.Lang.getString(\"viewonly_content\");\r\n }\r\n new Element(\"div\", {\r\n \"class\": flagClasses[i] + \" content-flag\",\r\n \"title\": tooltip\r\n }).injectInside(this.flags);\r\n }\r\n },\r\n\r\n renderCategoryItem: function() {\r\n var contEl = new Element(\"div\").injectInside(this.div),\r\n labelEl = new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-label\"\r\n }).injectInside(this.div);\r\n\r\n var isFavorite = ((this.data.type == Librarian.catType.myFavorite) || (this.data.type == Librarian.catType.globalFavorite));\r\n\r\n if (isFavorite && Librarian.tileList.useFavoriteCategoryIcons)\r\n contEl.addClass(this.itemClassName + \"-fav-image-cont\");\r\n else\r\n contEl.addClass(this.itemClassName + \"-image-cont\");\r\n\r\n var catName;\r\n\r\n if (Librarian.tileList.useCategoryTitle) {\r\n catName = Librarian.TileList.getCategoryTitle(this.data);\r\n } else {\r\n catName = this.data.name;\r\n }\r\n\r\n new Element(\"span\", {\r\n \"text\": this.prepareName(catName, '', true),\r\n \"title\": catName,\r\n \"class\": this.itemClassName + \"-label-span pointer\"\r\n }).injectInside(labelEl);\r\n\r\n labelEl.addOnClick(this.onItemClick, this);\r\n this.div.addOnClick(this.onItemClick, this);\r\n\r\n if (Librarian.tileList.showCategoryIcon) {\r\n var iconEl = new Element(\"div\").injectInside(this.div);\r\n if (isFavorite && Librarian.tileList.useFavoriteCategoryIcons)\r\n iconEl.addClass(this.itemClassName + \"-fav-icon\");\r\n else\r\n iconEl.addClass(this.itemClassName + \"-icon\");\r\n }\r\n\r\n if (this.size == \"expand\")\r\n this.renderExpandedCategory(labelEl, this.div);\r\n\r\n labelEl = null;\r\n },\r\n\r\n renderExpandedCategory: function(labelEl, parentEl) {\r\n if (!labelEl || !parentEl)\r\n return;\r\n\r\n var infoEl = new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-info\"\r\n }).injectInside(labelEl);\r\n\r\n // Add the description\r\n var description = this.data.description || '';\r\n description = description.trim().replaceAll('\\n', \"
\");\r\n\r\n new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-descrip\",\r\n \"html\": description\r\n }).injectInside(infoEl);\r\n\r\n // Remove the category icon from the title\r\n parentEl.getChildren('.' + this.itemClassName + \"-icon, .\" + this.itemClassName + \"-fav-icon\").destroy();\r\n },\r\n\r\n renderImage: function() {\r\n var contEl = new Element(\"div\").addClass(this.itemClassName + \"-image-cont\").injectInside(this.div),\r\n imageEl = new Element(\"img\").addClass(this.itemClassName + \"-image\").injectInside(contEl),\r\n // Use the large image for expand view\r\n size = (this.size == \"expand\") ? Librarian.tileList.expandImageSize : this.size;\r\n\r\n imageEl.id = this.getItemId();\r\n imageEl.tileItem = this;\r\n imageEl.tileSize = this.size;\r\n imageEl.onload = function() {\r\n var parentEl = this.getParent();\r\n // Scale this item's width to match the parent if it's not the right size\r\n if (parentEl) {\r\n // Can't use getSize here because when the tile list isn't visible, the size becomes 0\r\n var parentSize = {\r\n x: parentEl.getStyle(\"width\").toInt(),\r\n y: parentEl.getStyle(\"height\").toInt()\r\n },\r\n imageSize = Librarian.Utils.getNaturalImageSize(this),\r\n aspectRatio = imageSize.y / imageSize.x;\r\n\r\n // If the width is wider than the parent and we're resizing by width, do it\r\n if (((Librarian.tileList.fitToMode == Librarian.tileList.fitToModes.WIDTH) || (Librarian.tileList.fitToMode == Librarian.tileList.fitToModes.BOTH)) && (imageSize.x > parentSize.x)) {\r\n imageSize.x = parentSize.x;\r\n imageSize.y = (parentSize.x * aspectRatio);\r\n }\r\n\r\n // If the height is taller than the parent and we're resizing by height, do it\r\n if (((Librarian.tileList.fitToMode == Librarian.tileList.fitToModes.HEIGHT) || (Librarian.tileList.fitToMode == Librarian.tileList.fitToModes.BOTH)) && (imageSize.y > parentSize.y)) {\r\n imageSize.y = parentSize.y;\r\n imageSize.x = (parentSize.y / aspectRatio);\r\n }\r\n\r\n // If we're using new file type icons and this is showing an icon, add the class to it which will make it display correctly\r\n if (Librarian.extensions.useNewFileTypeIcons && (imageSize.y == 32) && (imageSize.x == 32))\r\n this.addClass(this.tileItem.itemClassName + \"-image-icon\");\r\n else {\r\n // If this isn't an expanded view and the height is too small, center the image by using top margin\r\n if ((Librarian.listView.newStyles || (this.tileSize != \"expand\")) && (imageSize.y < parentSize.y))\r\n this.style.marginTop = ((parentSize.y - imageSize.y) / 2.0) + \"px\";\r\n }\r\n\r\n this.setStyles({\r\n width: imageSize.x + \"px\",\r\n height: imageSize.y + \"px\"\r\n });\r\n }\r\n\r\n parentEl = null;\r\n };\r\n\r\n var url = Librarian.Utils.getThumbnailUrl(size, this.data);\r\n if (this.list && this.list.options.noCache && !this.data.thumbnailid)\r\n url += '&' + String.uniqueID();\r\n imageEl.src = url;\r\n\r\n // Show the source file icon for files, items in sections, and items in groups (if the setting is disabled)\r\n var ext = Librarian.Utils.getExtensionFromData(this.data, (this.data.sectionid > 0) || !Librarian.tileList.showGroupIcon),\r\n isInCart = this.itemClassName.contains(\"-cart\");\r\n\r\n if ((ext.length > 0) && (Librarian.tileList.showFileTypeIcon || Librarian.tileList.showLargeFileTypeIconForFiles)) {\r\n if (Librarian.tileList.showFileTypeIcon) {\r\n var iconEl = new Element(\"div\").addClass(this.itemClassName + \"-icon\").injectInside(this.div),\r\n iconImageEl = new Element(\"img\").injectInside(iconEl),\r\n // Check whether the cart exists, we're in the cart, is in slide mode, or is in mixed mode and this was added as a slide\r\n cartSlides = isInCart && Librarian.userCart && (Librarian.userCart.isInSlideView() || (Librarian.userCart.isInMixedView() && (this.data.addType == Librarian.Cart.addTypes.SLIDE)));\r\n\r\n // If we should show the slide icon\r\n if (Librarian.tileList.showSlideIcon &&\r\n // And this extension has slide icons\r\n (ext.startsWith(\"pdf\") || ext.startsWith(\"ppt\") || ext.startsWith(\"pps\") || ext.startsWith(\"pot\")) &&\r\n // And this is a cart slide or this is, itself, a slide, show the slide icon\r\n (cartSlides || (!isNaN(this.data.slideid) && (this.data.slideid > 0)))) {\r\n if (ext.startsWith(\"pdf\"))\r\n iconImageEl.src = Librarian.path.getImagesPath() + ext + \"_page.gif\";\r\n else\r\n iconImageEl.src = Librarian.path.getImagesPath() + ext + \"_slide.gif\";\r\n }\r\n // Otherwise, show the file icon\r\n else\r\n iconImageEl.src = Librarian.Utils.getFileTypeIcon(ext);\r\n\r\n iconEl = null;\r\n iconImageEl = null;\r\n }\r\n\r\n // If we want to show a large file type icon for files, do that\r\n if (Librarian.tileList.showLargeFileTypeIconForFiles && ((typeof this.data.slidenumber == \"undefined\") || (this.data.slidenumber <= 0)) && !Librarian.Utils.isSourceNotAvailable(this.data) && (typeof this.data.eventid != \"number\")) {\r\n // Remove the previous one, if there is one\r\n if (this.largeIconEl) {\r\n $(this.largeIconEl).destroy();\r\n this.largeIconEl = null;\r\n }\r\n\r\n this.largeIconEl = new Element(\"div\").addClass(this.itemClassName + \"-icon-large\").injectInside(this.wrapper);\r\n var iconImageEl = new Element(\"img\").injectInside(this.largeIconEl);\r\n if(Librarian.Utils.getFileTypeIcon(ext, 32) != \"/webclient/_layouts/img/32_wiz.gif\")\r\n iconImageEl.src = Librarian.Utils.getFileTypeIcon(ext, 32);\r\n iconImageEl = null;\r\n }\r\n\r\n if (this.data.extrafields && (this.data.extrafields.FINRAFileID > 0) && Librarian.event.showFinra) {\r\n if (this.finraIconEl) {\r\n $(this.finraIconEl).destroy();\r\n this.finraIconEl = null;\r\n }\r\n\r\n this.finraIconEl = new Element(\"div\").addClass(this.itemClassName + \"-icon-finra pointer\").injectInside(this.div);\r\n var iconImageEl = new Element(\"img\").injectInside(this.finraIconEl);\r\n iconImageEl.src = Librarian.path.getImagesPath() + \"32_FINRA.gif\";\r\n iconImageEl.addOnClick(\r\n function() {\r\n Librarian.PreviewWindow.openPreviewWindow({ fileid: this.data.extrafields.FINRAFileID, name: \"FINRA \" + (this.data.filename || this.data.name) });\r\n }.bind(this)\r\n );\r\n iconImageEl = null;\r\n }\r\n }\r\n\r\n // Add the drag handlers to this image if we're allowed to drag\r\n if (this.list.options.allowDrag) {\r\n imageEl.addEvent(\"mousedown\", this.list.onDragStart)\r\n .addEvent(\"touchstart\", this.list.onDragStart)\r\n .addEvent(\"mouseup\", this.list.onDragEnd)\r\n .addEvent(\"touchend\", this.list.onDragEnd)\r\n .addEvent(\"mouseout\", this.list.onDragItem)\r\n .addEvent(\"touchmove\", this.list.onDragItem);\r\n }\r\n\r\n if (Librarian.TileList.TileItem.canPreview(this.data, this.parentData)) {\r\n if ((this.data.slideid <= 0) && (Librarian.tileList.fileNameMode == Librarian.fileNameModes.open || \r\n (Librarian.tileList.fileNameMode == Librarian.fileNameModes.openCollection && this.data.contenttype == Librarian.contentType.virtualPresentation))) {\r\n imageEl.href = '#';\r\n imageEl.addOnClick(this.onItemClick, this);\r\n } \r\n else {\r\n imageEl.addOnClick(this.onPreviewClick, this);\r\n }\r\n imageEl.addClass(\"pointer\");\r\n }\r\n\r\n // Get this item's source extension, if it has one\r\n var sourceext = this.data.sourceext || '';\r\n if (sourceext.startsWith('.'))\r\n sourceext = sourceext.substring(1);\r\n sourceext = sourceext.toLowerCase();\r\n\r\n // If this isn't in the cart\r\n if (!isInCart) {\r\n // If slide open icons are enabled and this is a slide and we're searching\r\n if ((Librarian.search.isSearching && Librarian.tileList.showSlideOpenIcon && (this.data.slideid > 0)) ||\r\n // Or file open icons are enabled and this really is a file\r\n (Librarian.tileList.showFileOpenIcon && (this.data.slideid <= 0) && (typeof this.data.filetype != \"undefined\") && (this.data.presid <= 0)) ||\r\n // Or group open icons are enabled and this is a group\r\n (Librarian.tileList.showGroupOpenIcon && (this.data.groupid > 0) && (this.data.slideid <= 0)) ||\r\n // Or favorite open icons are enabled and this is a favorite item\r\n // Make sure that if the slide id is -1, this isn't just a file pretending to be a fake slide\r\n (Librarian.tileList.showFavoriteOpenIcon && (this.data.presid > 0) && (this.data.slideid == 0) && !Librarian.extensions.hasFakeSlides(sourceext))) {\r\n var iconEl = new Element(\"div\").addClass(this.itemClassName + \"-open\").injectInside(this.div),\r\n iconImageEl = new Element(\"img\").injectInside(iconEl);\r\n iconImageEl.src = Librarian.path.getImagesPath() + \"slideView.gif\";\r\n iconEl.addOnClick(this.onItemClick);\r\n\r\n iconEl = null;\r\n iconImageEl = null;\r\n }\r\n }\r\n\r\n // If we have an editor and this item is editable, add the icon\r\n if (!Librarian.isGuest && Librarian.features.slideeditwindow.load && this.data.editable) {\r\n imageEl = new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-editable ico-editable\"\r\n }).injectInside(this.div);\r\n\r\n // If we're in the cart or this is a virtual presentation, use the \"Edit\" title and make it clickable\r\n if (this.itemClassName.contains(\"-cart\") || (this.data.presid > 0)) {\r\n imageEl.title = Librarian.Lang.getString(\"edit\");\r\n imageEl.addClass(\"pointer\");\r\n imageEl.addOnClick(this.onEditClick);\r\n }\r\n // Otherwise, set it to \"Editable\"\r\n else\r\n imageEl.title = Librarian.Lang.getString(\"editable\");\r\n\r\n // If this already has edits, add the \"(Edited)\" tag to the end of the title\r\n if (this.data.hasedits)\r\n imageEl.title += \" (\" + Librarian.Lang.getString(\"edited\") + ')';\r\n }\r\n\r\n contEl = null;\r\n imageEl = null;\r\n },\r\n\r\n renderData: function() {\r\n var contEl = new Element(\"div\").addClass(this.itemClassName + \"-label\"),\r\n checkboxEl = new Element(\"input\").addClass(this.itemClassName + \"-label-checkbox\"),\r\n spanEl = new Element(\"span\").addClass(this.itemClassName + \"-label-span\"),\r\n isInCart = this.itemClassName.contains(\"-cart\"),\r\n fileName = '',\r\n // Get the file extension, wherever it is\r\n ext = Librarian.Utils.getExtensionFromData(this.data, true),\r\n sourceNotAvailable = Librarian.Utils.isSourceNotAvailable(this.data);\r\n\r\n // Only use slide titling if this is a slide or this is a file inside a group but not a group that was added to the cart as a file\r\n if (((this.data.slideid > 0) || (this.isGroup() && ((this.data.fileid > 0) && ((this.data.slidenumber > 0) || (this.data.slideid > 0)))) || (this.data.eventid > 0)) && (!isInCart || (this.data.addType != Librarian.Cart.addTypes.FILE))) {\r\n if (Librarian.tileList.showSlideNumber) {\r\n // Get the correct slide number\r\n var slideNum = this.data.eventnumber || (!Librarian.tileList.showSourceInfomation ? this.data.itemnumber : 0) || this.data.slidenumber || 1,\r\n slideCount = this.data.eventcount || this.data.slidecount || 1,\r\n type = '';\r\n // Use the parent's slide count if there is one, but not for favorites\r\n if (this.parentData && this.parentData.contenttype != Librarian.contentType.globalFavorite &&(this.data.presid <= 0))\r\n slideCount = this.parentData.slidecountex || this.parentData.slidecount || slideCount;\r\n // Use \"Item\" for group items\r\n if (this.isGroup())\r\n slideNum = (this.data.itemnumber == 0 ? this.data.slidenumber : this.data.itemnumber);\r\n if (!Librarian.tileList.showSourceInfomation && this.isGroup() && !Librarian.tileList.useItemDataForGroups) {\r\n type = Librarian.Lang.getString(\"item\");\r\n } else {\r\n type = Librarian.Utils.getItemTypeString(this.data);\r\n }\r\n\r\n // So the current slide index if we are in the cart and that setting is turned on\r\n if (isInCart && Librarian.tileList.showCartItemNumber && Librarian.userCart) {\r\n slideNum = this.itemIndex + 1;\r\n slideCount = Librarian.userCart.getCount(Librarian.cart.showSlideCount, true);\r\n }\r\n\r\n // Show \"Slide/Page X of N\"\r\n var name = \"tilelist_slidetitle\";\r\n // If we're told to show the source information of the group, show \"Slide/Page X\" because we don't know the source slide count\r\n if (Librarian.tileList.hideSlideCount || (Librarian.tileList.showSourceInfomation && this.isGroup()))\r\n name = \"tilelist_slidetitle_nocount\";\r\n\r\n fileName = Librarian.Lang.getArgString(name, [type, slideNum, slideCount]);\r\n\r\n var title = this.data.title;\r\n // If we have a custom meta-based override, use that\r\n if ((this.data.extrafields != null) && (Librarian.tileList.customTitleMeta != null) && ((this.data.extrafields[Librarian.tileList.customTitleMeta] || '').trim().length > 0))\r\n title = (this.data.extrafields[Librarian.tileList.customTitleMeta] || '').trim();\r\n\r\n // Try to get the correct name for whatever situation we're in\r\n if (Librarian.tileList.useSlideTitle && title)\r\n name = title;\r\n else if (!Librarian.tileList.showSourceInfomation && this.isGroup() && this.data.name && !Librarian.tileList.useItemDataForGroups)\r\n name = this.data.name;\r\n else if (Librarian.tileList.useFileTitle && this.parentData)\r\n name = Librarian.TileList.getFileTitle(Object.merge({}, Object.subset(this.data, [\"extrafields\", \"title\"]), this.parentData));\r\n else if (Librarian.tileList.useFileTitle)\r\n name = Librarian.TileList.getFileTitle(this.data);\r\n else if (this.data.filename)\r\n name = this.data.filename;\r\n else if (this.parentData && this.parentData.filename)\r\n name = this.parentData.filename;\r\n else if (this.data.eventid > 0)\r\n name = (this.data.groupname || this.data.name);\r\n\r\n // If we have a name, use it\r\n if (name != null) {\r\n name = this.cleanFileName(name);\r\n // If the slide number is \"-1\", that means this is a file\r\n if (slideNum == -1)\r\n fileName = name;\r\n // Add \": FileName\" if there is one\r\n else\r\n fileName += \": \" + name;\r\n }\r\n\r\n // Files pretending to be slides by themselves don't need \"Page 1 of 1: FileName\"\r\n if ((this.list.catType == Librarian.catType.file) && Librarian.extensions.hasFakeSlides(ext))\r\n fileName = null;\r\n }\r\n else if (Librarian.tileList.useSlideTitle && this.data.title)\r\n fileName = this.data.title;\r\n }\r\n\r\n // If this is a file or group or the slide has no title, use the name\r\n if ((typeof fileName == \"undefined\") || (fileName == null) || (fileName.length == 0)) {\r\n // If this is a group but not an item in a group, prioritize the group name first\r\n if (this.isGroup() && ((typeof this.data.itemnumber != \"number\") || (this.data.itemnumber <= 0)))\r\n fileName = this.data.name || this.data.filename;\r\n else if (Librarian.tileList.useFileTitle && this.parentData)\r\n fileName = Librarian.TileList.getFileTitle(Object.merge({}, Object.subset(this.data, [\"extrafields\", \"title\"]), this.parentData));\r\n else if (Librarian.tileList.useFileTitle)\r\n fileName = Librarian.TileList.getFileTitle(this.data);\r\n else\r\n fileName = this.data.filename || this.data.name || this.data.contentname;\r\n }\r\n\r\n // If we still haven't gotten a file name yet and we have parent data,\r\n // just use the parent name.\r\n if ((!fileName || (fileName.length == 0)) && this.parentData) {\r\n // Get the Global or My Favorite name\r\n if (this.isGroup())\r\n fileName = this.parentData.name;\r\n // Get the File title\r\n else if (this.data.fileid > 0)\r\n fileName = this.parentData.title;\r\n }\r\n\r\n // Set a blank extension rather than a null one, for size purposes.\r\n if (!ext || this.isGroup())\r\n ext = '';\r\n\r\n // If this is a presentation with a -1 slide id and an invalid file type,\r\n // let the user know that the source file is no longer available\r\n if (sourceNotAvailable) {\r\n var sourceext = this.data.sourceext || '';\r\n if (sourceext.startsWith('.'))\r\n sourceext = sourceext.substring(1);\r\n sourceext = sourceext.toLowerCase();\r\n\r\n if (!Librarian.extensions.hasFakeSlides(sourceext)) {\r\n fileName = Librarian.Lang.getString(\"nosource\");\r\n this.data.name = '';\r\n this.allowAccess = false;\r\n }\r\n }\r\n\r\n if (this.list.options.overrideName)\r\n fileName = this.list.options.overrideName;\r\n\r\n this.cleanFileName(fileName);\r\n\r\n var title = fileName;\r\n if (Librarian.tileList.showItemNumberInName) {\r\n var subTitle;\r\n\r\n // Make sure the Slide # label is showing the correct number.\r\n if (this.data.itemnumber > 0)\r\n subTitle = Librarian.Lang.getString(\"slide\") + \" #\" + this.data.itemnumber;\r\n else if (this.data.slidenumber > 0)\r\n subTitle = Librarian.Lang.getString(\"slide\") + \" #\" + this.data.slidenumber;\r\n else if (!this.itemClassName.contains(\"-cart\"))\r\n subTitle = Librarian.Lang.getString(\"item\") + \" #\" + (this.list.items.length + 1);\r\n\r\n // If the file name and sub name aren't the same, and there IS a sub name\r\n // add the sub name after the file name to form the full title.\r\n if ((subTitle != null) && (title != subTitle) && (subTitle.length > 0))\r\n title += \" - \" + subTitle;\r\n }\r\n\r\n // Only items that have an extension and are allowed to\r\n // download through Librarian settings will get a download link\r\n var canDownload = Librarian.Utils.canDownload(this.data, this.parentData);\r\n\r\n // Get the current label mode\r\n var mode = Librarian.tileList.fileNameMode;\r\n // If this is a slide, get the slide mode\r\n if (this.data.slideid > 0)\r\n mode = Librarian.tileList.slideNameMode;\r\n\r\n // If this can't be downloaded but we're trying to download it,\r\n // make it text instead to show that it isn't clickable.\r\n var nameEl = new Element(canDownload || (mode != Librarian.fileNameModes.download) ? 'a' : \"span\");\r\n\r\n // Set the title so the user can read the full file name\r\n // when they hover the mouse over the text.\r\n nameEl.title = title;\r\n\r\n // Hide the check box if this can't be added to the cart\r\n var hideCheck = !this.allowAccess || !Librarian.cart.canAddToCart(this.data) || this.list.options.disableCart;\r\n\r\n // Set the displayed text to the prepared file name.\r\n // If the check is hidden, we have more space so the length is different.\r\n spanEl.innerHTML = this.prepareName(fileName, (this.data.slideid > 0) ? '' : ext.toLowerCase(), hideCheck);\r\n\r\n // Only add an action link if the user is allowed to access this item\r\n if (this.allowAccess) {\r\n // If this is a slide sent from a deep link (it has no parent) then don't let it be downloaded\r\n if (!this.parentData && (this.data.slideid > 0) && Librarian.isGuest)\r\n mode = Librarian.fileNameModes.preview;\r\n\r\n // Only add a download link if the user is allowed to download this item\r\n if (canDownload && (mode == Librarian.fileNameModes.download)) {\r\n // If a custom download handler is available, use it\r\n if (typeof Library.customDownloadHandler == \"function\") {\r\n nameEl.addOnClick(function() {\r\n Library.customDownloadHandler($empty, \"download\", this.data);\r\n return false;\r\n }, this);\r\n }\r\n else {\r\n nameEl.href = Librarian.Utils.getFileSource(this.data.fileid);\r\n nameEl.target = Browser.isMobile ? ('_' + (new Date()).getTime()) : \"_download\";\r\n }\r\n }\r\n // Open a preview window\r\n else if ((mode == Librarian.fileNameModes.preview || (Librarian.tileList.fileNameMode == Librarian.fileNameModes.openCollection && this.data.contenttype != Librarian.contentType.virtualPresentation)) && Librarian.TileList.TileItem.canPreview(this.data, this.parentData)) {\r\n nameEl.href = '#';\r\n // Prevent triggering the select event\r\n nameEl.addEvent(\"mousedown\", function (e) {\r\n if (!e.control && !e.shift) {\r\n e.preventDefault();\r\n e.returnValue = false;\r\n return false;\r\n }\r\n });\r\n nameEl.addOnClick(this.onPreviewClick, this);\r\n }\r\n // Only allow opening a file if this is actually a file\r\n else if ((this.data.slideid <= 0) && (mode == Librarian.fileNameModes.open || \r\n (Librarian.tileList.fileNameMode == Librarian.fileNameModes.openCollection && this.data.contenttype == Librarian.contentType.virtualPresentation))) {\r\n nameEl.href = '#';\r\n nameEl.addOnClick(this.onItemClick, this);\r\n }\r\n }\r\n\r\n nameEl.appendChild(spanEl);\r\n\r\n // create cartCheck Element\r\n if (Librarian.tileList.enableHoverMenu && !Librarian.isGuest && (this.cartCheckEl == null)) {\r\n if (Librarian.HoverMenu.canAddToCart(this.data, null, ((this.parentData == null) && (this.data.slidenumber == 0)), this, null, Librarian.search.isSearching, this.parentData)) {\r\n this.cartCheckEl = new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-in-cart ico-cart-added\"\r\n }).injectInside(this.wrapper);\r\n }\r\n }\r\n else {\r\n checkboxEl.type = \"checkbox\";\r\n checkboxEl.title = Librarian.Lang.getString(\"cart_add\");\r\n checkboxEl.data = this.data;\r\n\r\n this.cartCheckEl = checkboxEl;\r\n }\r\n\r\n if (this.cartCheckEl) {\r\n this.cartCheckEl.addOnClick(this.handleCartCheck);\r\n\r\n // If we need to hide the check, change the classes to reflect as well\r\n if (hideCheck) {\r\n if (Librarian.tileList.enableHoverMenu && !Librarian.isGuest) {\r\n this.cartCheckEl.hide();\r\n this.cartCheckEl.set(\"enabled\", false);\r\n }\r\n else {\r\n checkboxEl.style.visibility = \"hidden\";\r\n checkboxEl.enabled = false;\r\n checkboxEl.addClass(this.itemClassName + \"-label-checkbox-hidden\");\r\n contEl.addClass(this.itemClassName + \"-label-nopad\");\r\n }\r\n }\r\n // If this is already in the cart, make the box checked\r\n else if (Librarian.userCart && Librarian.userCart.isInCart(this.data)) {\r\n if (Librarian.tileList.enableHoverMenu && !Librarian.isGuest)\r\n this.cartCheckEl.show();\r\n else\r\n checkboxEl.set(\"checked\", true);\r\n }\r\n\r\n if (!Librarian.tileList.enableHoverMenu && !Librarian.isGuest)\r\n checkboxEl.injectInside(contEl);\r\n }\r\n\r\n nameEl.injectInside(contEl);\r\n\r\n // If this is a video add a play button thing\r\n if (Librarian.preview.allowVideoStreaming || Librarian.preview.allowAudioStreaming) {\r\n ext = Librarian.Utils.getExtensionFromData(this.data, true);\r\n if ((ext == \"vpres\") || (ext == \"favg\")) {\r\n var url = Librarian.path.getMethodUrl(\"getext\") + \"&out=text&snum=0\";\r\n if (this.data.presid > 0)\r\n url += \"&pid=\" + this.data.presid;\r\n else if (this.data.groupid > 0)\r\n url += \"&gid=\" + this.data.groupid;\r\n\r\n var request = new Librarian.Request({\r\n url: url,\r\n onSuccess: function(ext) {\r\n if (!ext)\r\n return;\r\n\r\n if (ext.startsWith('.'))\r\n ext = ext.substring(1);\r\n\r\n if (Librarian.extensions.isStreamable(ext)) {\r\n var playEl = new Element(\"div\", { \"class\": this.itemClassName + \"-play-button\" });\r\n playEl.grab(new Element(\"img\", { src: Librarian.path.getImagesPath() + \"/play_button.png\" }));\r\n // Prevent triggering the select event\r\n playEl.addEvent(\"mousedown\", function (e) {\r\n if (!e.control && !e.shift) {\r\n e.preventDefault();\r\n e.returnValue = false;\r\n return false;\r\n }\r\n });\r\n playEl.addOnClick(this.onPreviewClick, this);\r\n if (this.div)\r\n this.div.grab(playEl);\r\n }\r\n\r\n }.bind(this),\r\n onFailure: Librarian.Utils.onFailure\r\n });\r\n request.send();\r\n }\r\n else if (Librarian.extensions.isStreamable(ext)) {\r\n var playEl = new Element(\"div\", { \"class\": this.itemClassName + \"-play-button\" });\r\n playEl.grab(new Element(\"img\", { src: Librarian.path.getImagesPath() + \"/play_button.png\" }));\r\n\r\n // Prevent triggering the select event\r\n playEl.addEvent(\"mousedown\", function (e) {\r\n if (!e.control && !e.shift) {\r\n e.preventDefault();\r\n e.returnValue = false;\r\n return false;\r\n }\r\n });\r\n playEl.addOnClick(this.onPreviewClick, this);\r\n if (this.div)\r\n this.div.grab(playEl);\r\n }\r\n }\r\n\r\n if (Librarian.slideshow.enabled && this.data.isslideshow) {\r\n var playEl = new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-play-button\"\r\n });\r\n new Element(\"img\", {\r\n src: Librarian.path.getImagesPath() + \"/play_button.png\"\r\n }).injectInside(playEl);\r\n \r\n // Prevent triggering the select event\r\n playEl.addEvent(\"mousedown\", function (e) {\r\n if (!e.control && !e.shift) {\r\n e.preventDefault();\r\n e.returnValue = false;\r\n return false;\r\n }\r\n });\r\n playEl.addOnClick(this.onPreviewClick, this);\r\n if (this.div)\r\n this.div.grab(playEl);\r\n }\r\n\r\n // Show the extra information if we are in expanded view\r\n if (this.size == \"expand\")\r\n this.renderExpandedData(contEl, this.div);\r\n\r\n contEl.injectInside(this.div);\r\n\r\n if (this.list.options.subHeader && typeof this.list.options.subHeader == \"function\") {\r\n var subEl = this.list.options.subHeader(this);\r\n if (subEl)\r\n subEl.injectInside(this.div);\r\n }\r\n\r\n if (this.list.hoverMenu && !sourceNotAvailable && (ext != \"wiz\")) {\r\n $(this.wrapper).addEvent(\"mouseover\", function() {\r\n // Get the index of the hovermenu and set it in the\r\n // instance of the object so we don't have to search the DOM to find item data\r\n this.list.hoverMenu.index = this.list.indexOf(this.data);\r\n\r\n // Get the correct type of hover menu\r\n var type = Librarian.hoverMenuTypes.file,\r\n wasSearching = ((typeof Librarian.pageHeader == \"object\") && Librarian.pageHeader.wasSearching),\r\n isCategory = ((this.parentData == null) && (this.data.slidenumber == 0));\r\n if ((this.parentData && this.parentData.presid == this.data.presid) && this.data.slidenumber == 0)\r\n isCategory = true;\r\n if (this.data.presid > 0 && this.data.contenttype == Librarian.contentType.myFavorite)\r\n type = Librarian.hoverMenuTypes.myFavorite;\r\n if (Librarian.search.isSearching && Librarian.lastSearch) {\r\n var outputType = Librarian.lastSearch.getOutputType();\r\n if (outputType == Librarian.Search.outputTypes.FILES) {\r\n type = Librarian.hoverMenuTypes.file;\r\n isCategory = true;\r\n }\r\n else if (outputType == Librarian.Search.outputTypes.SLIDES)\r\n type = Librarian.hoverMenuTypes.file;\r\n else if (outputType == Librarian.Search.outputTypes.GROUPS) {\r\n type = Librarian.hoverMenuTypes.globalFavorite;\r\n isCategory = (this.data.slidenumber == 0);\r\n }\r\n else if (outputType == Librarian.Search.outputTypes.MYFAVORITE)\r\n type = Librarian.hoverMenuTypes.myFavorite;\r\n else if (outputType == Librarian.Search.outputTypes.EVENTS || outputType == Librarian.Search.outputTypes.EVENTGROUPS)\r\n type = Librarian.hoverMenuTypes.event;\r\n else if (outputType == Librarian.Search.outputTypes.ALLCONTENT) {\r\n if (this.data.groupid > 0) {\r\n if (typeof this.data.eventcount == \"number\")\r\n type = Librarian.hoverMenuTypes.event;\r\n else\r\n type = Librarian.hoverMenuTypes.globalFavorite;\r\n }\r\n else if (this.data.presid > 0)\r\n type = Librarian.hoverMenuTypes.myFavorite;\r\n else if (this.data.eventid > 0)\r\n type = Librarian.hoverMenuTypes.event;\r\n else\r\n type = Librarian.hoverMenuTypes.file;\r\n\r\n isCategory = true;\r\n }\r\n }\r\n else if (this.list.catType === Librarian.catType.globalFavorite)\r\n type = Librarian.hoverMenuTypes.globalFavorite;\r\n else if (this.list.catType === Librarian.catType.myFavorite)\r\n type = Librarian.hoverMenuTypes.myFavorite;\r\n else if (this.list.catType === Librarian.catType.event)\r\n type = Librarian.hoverMenuTypes.event;\r\n\r\n this.list.hoverMenu.onMouseOver(this.wrapper, isCategory, type, this.data, wasSearching, this.parentData);\r\n }.bind(this));\r\n\r\n $(this.wrapper).addEvent(\"mouseout\", this.list.hoverMenu.onMouseOut.bind(this));\r\n }\r\n\r\n contEl = null;\r\n checkboxEl = null;\r\n spanEl = null;\r\n nameEl = null;\r\n },\r\n\r\n renderExpandedData: function(contEl, parentEl) {\r\n if (!contEl || !parentEl)\r\n return;\r\n\r\n var infoEl = new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-info\"\r\n }).injectInside(contEl);\r\n\r\n // Add the description\r\n var description = this.data.description || '';\r\n description = description.trim().replaceAll('\\n', \"
\");\r\n\r\n new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-descrip\",\r\n \"html\": description\r\n }).injectInside(infoEl);\r\n\r\n // \"Rating\"\r\n var rating = this.data.avgrating || 0,\r\n ratingCount = this.data.ratingcount || 0;\r\n if (this.data.extrafields) {\r\n if (rating <= 0) {\r\n var avgRating = (this.data.extrafields[\"AvgRating\"] || '').toInt();\r\n if (!isNaN(avgRating))\r\n rating = avgRating;\r\n }\r\n\r\n if (ratingCount <= 0) {\r\n var ratings = (this.data.extrafields[\"RatingCount\"] || '').toInt();\r\n if (!isNaN(ratings))\r\n ratingCount = ratings;\r\n }\r\n }\r\n\r\n // Don't continue if we have a minimum number set and we don't have that many ratings\r\n if (Librarian.features.ratings.load && ((typeof Librarian.preview.minimumRatingCount != \"number\") || (ratingCount >= Librarian.preview.minimumRatingCount))) {\r\n var ratingContEl = new Element(\"div\", {\r\n \"class\": this.itemClassName + \"-meta-value\"\r\n }).injectInside(contEl);\r\n new Element(\"span\", {\r\n \"text\": Librarian.Lang.getString(\"rating\") + \": \",\r\n \"class\": this.itemClassName + \"-meta-label\"\r\n }).injectInside(ratingContEl);\r\n\r\n var fullStars = Math.min(Math.floor(rating), Librarian.preview.ratingMaxStars),\r\n halfStars = Math.ceil(Math.min(Math.floor(rating), Librarian.preview.ratingMaxStars)) - fullStars,\r\n emptyStars = Librarian.preview.ratingMaxStars - fullStars - halfStars;\r\n\r\n for (var i = fullStars; i--;) {\r\n new Element(\"span\", {\r\n \"class\": this.itemClassName + \"-rating-on\"\r\n }).injectInside(ratingContEl);\r\n }\r\n\r\n if (halfStars > 0) {\r\n new Element(\"span\", {\r\n \"class\": this.itemClassName + \"-rating-half\"\r\n }).injectInside(ratingContEl);\r\n }\r\n\r\n for (var i = emptyStars; i--;) {\r\n new Element(\"span\", {\r\n \"class\": this.itemClassName + \"-rating-off\"\r\n }).injectInside(ratingContEl);\r\n }\r\n\r\n var type = (this.data.slidenumber <= 0) ? \"file\" : \"slide\",\r\n viewEl = new Element(\"a\", {\r\n href: \"javascript:void(0)\",\r\n \"class\": this.itemClassName + \"-ratings-view\",\r\n \"text\": Librarian.Lang.getString(\"rating_view\")\r\n }).injectInside(ratingContEl);\r\n viewEl.addOnClick(function() {\r\n if (this.viewRatingsWindow) {\r\n this.viewRatingsWindow.close();\r\n this.viewRatingsWindow = null;\r\n }\r\n\r\n this.viewRatingsWindow = new Librarian.ViewRatingsWindow({\r\n itemType: type,\r\n itemData: this.data\r\n });\r\n this.viewRatingsWindow.show();\r\n\r\n return false;\r\n }, this);\r\n\r\n new Element(\"span\", {\r\n \"class\": this.itemClassName + \"-ratings-spacer\",\r\n \"text\": '|'\r\n }).injectInside(ratingContEl);\r\n\r\n var typeString;\r\n if ((type != \"slide\") && ((this.data.presid > 0) || (this.data.groupid > 0)))\r\n typeString = Librarian.Lang.getString((typeof this.data.eventcount == \"number\") ? \"eventgroup\" : \"group\");\r\n else\r\n typeString = (type == \"file\") && (this.data.fileid > 0) ? Librarian.Lang.getString(\"file\") : Librarian.Utils.getItemTypeString(this.data);\r\n var rateEl = new Element(\"a\", {\r\n href: \"javascript:void(0)\",\r\n \"class\": this.itemClassName + \"-ratings-rate\",\r\n \"text\": Librarian.Lang.getArgString(\"rating_rate\", typeString)\r\n }).injectInside(ratingContEl);\r\n rateEl.addOnClick(function() {\r\n if (this.rateWindow) {\r\n this.rateWindow.close();\r\n this.rateWindow = null;\r\n }\r\n\r\n this.rateWindow = new Librarian.AddRatingWindow({\r\n itemType: type,\r\n itemData: this.data\r\n });\r\n this.rateWindow.show();\r\n return false;\r\n }, this);\r\n }\r\n\r\n // Remove the file type icon from the title\r\n parentEl.getChildren('.' + this.itemClassName + \"-icon\").destroy();\r\n\r\n infoEl = null;\r\n },\r\n\r\n handleCartCheck: function(e, update) {\r\n if (!Librarian.userCart)\r\n return;\r\n\r\n var checkState;\r\n // Get the display style if we're using a hover menu\r\n if (Librarian.tileList.enableHoverMenu && !Librarian.isGuest)\r\n checkState = (this.cartCheckEl.style.display != \"block\");\r\n // Or the actual check state if we're using a checkbox\r\n else\r\n checkState = this.cartCheckEl.checked;\r\n\r\n if (Librarian.tileList.enableHoverMenu && !Librarian.isGuest)\r\n this.cartCheckEl.toggle();\r\n\r\n var fromCart = this.div.className.contains(\"cart\");\r\n // If we aren't told whether to or not, assume yes.\r\n if ((typeof update == \"undefined\") || (update == null))\r\n update = true;\r\n\r\n var isInCart = Librarian.userCart.isInCart(this.data, this.checked == false),\r\n notify = true,\r\n type = null,\r\n fileClickedInCart = this.data.fileid;\r\n\r\n // Make sure this checked state matches the visual check state\r\n if (!this.checked && checkState)\r\n this.checked = true;\r\n else if (this.checked && checkState && !isInCart) {\r\n this.checked = true;\r\n } else\r\n this.checked = false;\r\n\r\n if (isInCart && (this.checked == false)) {\r\n Librarian.userCart.removeFromCart(this.data, fromCart, null, update, null, function() {\r\n type = Librarian.cartNotificationTypes.removed;\r\n if (Librarian.tileList.enableHoverMenu && !Librarian.isGuest && this.cartCheckEl) {\r\n this.cartCheckEl.hide();\r\n }\r\n\r\n // force reload cart if fastlane enabled\r\n if (Librarian.features.fastlane.load && Librarian.FastLane.isEnabled) {\r\n Librarian.FastLane.fireEvent(\"fastlane-cart-update\");\r\n //remove Check from main page in FastLane\r\n if (Librarian.FastLane.LoadedContent != null) {\r\n var fastLaneItems = Librarian.FastLane.LoadedContent.items,\r\n fastLaneDiv = $(\"module_fastLaneTileList\").childNodes[2].childNodes,\r\n count = 0,\r\n checkCart,\r\n fastLaneItemDiv;\r\n\r\n fastLaneItems.each(function (tile) {\r\n if (tile.fileid == fileClickedInCart) {\r\n if ($(\"module_fastLaneTileList\").childNodes[2].childNodes[count].childNodes.length == 5) {\r\n checkCart = $(\"module_fastLaneTileList\").childNodes[2].childNodes[count].childNodes[4];\r\n } else checkCart = $(\"module_fastLaneTileList\").childNodes[2].childNodes[count].childNodes[3];\r\n\r\n checkCart.hide();\r\n }\r\n count++;\r\n });\r\n }\r\n }\r\n\r\n }.bind(this));\r\n\r\n }\r\n\r\n // Add back to cart if added from cart or not in cart\r\n else if ((!isInCart || fromCart) && (this.checked == true)) {\r\n var data = Object.clone(this.data);\r\n // If this has parent data, save it's fields as the parent fields before adding to the cart\r\n if (this.parentData)\r\n data.parentfields = Object.clone(this.parentData.extrafields);\r\n\r\n var added = Librarian.userCart.addToCart(data, fromCart, update);\r\n\r\n type = Librarian.cartNotificationTypes.added;\r\n if (!added) {\r\n if (Librarian.tileList.enableHoverMenu && !Librarian.isGuest)\r\n this.cartCheckEl.hide();\r\n else\r\n this.cartCheckEl.show();\r\n this.cartCheckEl.set(\"checked\", false);\r\n\r\n this.checked = false;\r\n notify = false;\r\n }\r\n }\r\n\r\n if (update && !fromCart) {\r\n Librarian.Cart.onChange();\r\n\r\n // Don't display this notification if we're in the cart, that's just annoying.\r\n if (notify)\r\n Librarian.Utils.showCartNotification(this.data, type, true);\r\n }\r\n },\r\n\r\n onEditClick: function() {\r\n // If the window already exists\r\n if (this.editWindow) {\r\n // And it's minmized, restore it\r\n if (this.editWindow.isMinimized)\r\n this.editWindow.restore();\r\n // Otherwise just focus to it\r\n else\r\n MUI.focusWindow(this.editWindow.windowEl);\r\n return;\r\n }\r\n\r\n // Open a slide edit window for this item\r\n // NOTE: DO NOT UNLINK DATA BETWEEN HERE AND CART\r\n // The slide edit window saves the changes directly\r\n // into the javascript object in the cart.\r\n this.editWindow = new Librarian.SlideEditWindow({\r\n onCloseComplete: function() {\r\n this.editWindow = null;\r\n }.bind(this),\r\n isInCart: this.itemClassName.contains(\"-cart\")\r\n }, this.data);\r\n this.editWindow.show();\r\n },\r\n\r\n onItemClick: function(e, data) {\r\n if (e) {\r\n var evt = new Event(e);\r\n evt.stop();\r\n evt = null;\r\n }\r\n var data = data || this.data;\r\n\r\n var itemEl = $(\"searchTimeTitle\");\r\n // If there is a search time title, hide it when we are going to the item details\r\n if (itemEl) {\r\n itemEl.hide();\r\n itemEl = null;\r\n }\r\n\r\n // if in fastlane, load catagory in fast lane content view\r\n if (Librarian.features.fastlane.load && Librarian.FastLane.isEnabled && Librarian.FastLane.isFastlaneTabOpen) {\r\n var folderInfo = {\r\n catid: data.catid,\r\n title: data.name\r\n };\r\n Librarian.FastLane.loadFolder(folderInfo);\r\n return false;\r\n }\r\n\r\n // Default to category navigation\r\n var treeData = \"catid\", itemData = \"catid\";\r\n // If this is a file, however\r\n if (data.fileid || data.groupid || data.presid) {\r\n // Look at a the tree's fileid\r\n treeData = \"fileid\";\r\n\r\n // And the correct item id, based on its type\r\n if (data.fileid) {\r\n itemData = \"fileid\";\r\n data.type = Librarian.catType.file;\r\n }\r\n if (data.groupid) {\r\n itemData = \"groupid\";\r\n data.type = Librarian.catType.globalFavorite;\r\n }\r\n if (data.presid) {\r\n itemData = \"presid\";\r\n data.type = Librarian.catType.myFavorite;\r\n }\r\n }\r\n\r\n if (typeof data.type == \"undefined\")\r\n data.type = this.list.catType;\r\n\r\n var tab = initializer ? initializer.tab : null;\r\n // Force the tree to load the selected data, if it's available\r\n if (typeof Library.getTreeByType == \"function\") {\r\n // Handle loading on the mobile version differently\r\n if (Browser.isMobile) {\r\n Librarian.treeView.selectFromTile(data.type, data.catid, data.name);\r\n return false;\r\n }\r\n\r\n // Send favorite type if we're currently looking at a SlideShow type\r\n var tree = Library.getTreeByType(data.type, tab, data.prestype);\r\n\r\n // If there is no tree, bail\r\n if (!tree)\r\n return false;\r\n\r\n // If this data doesn't already have a cat ID, try to get it from a different place\r\n if ((typeof data.catid == \"undefined\") || (data.catid == null)) {\r\n if ((typeof data.catId != \"undefined\") && (data.catId != null))\r\n data.catid = data.catId.toInt();\r\n else if ((typeof data.extrafields != \"undefined\") && (data.extrafields != null) &&\r\n (typeof data.extrafields.CatID != \"undefined\") && (data.extrafields.CatID != null)) {\r\n data.catid = data.extrafields.CatID.toInt();\r\n }\r\n }\r\n\r\n var getSlides = function() {\r\n var parent = tree.getSelected();\r\n // If there is no selected node, try the root\r\n if (!parent)\r\n parent = tree.root;\r\n\r\n // Make sure the tree has loaded to this point\r\n Librarian.Utils.handleTreeToggleAndLoad(parent, function() {\r\n this.loadTreeItem(tree, treeData, itemData, data.type, data.name);\r\n }.bind(this));\r\n }.bind(this);\r\n\r\n if (data.cattype == Librarian.catType.uploads) {\r\n getSlides();\r\n }\r\n else {\r\n Librarian.Utils.getPath(data, function(path) {\r\n if (path != null)\r\n Librarian.Utils.selectTreeNodeByPath(tree, path);\r\n // If the path wasn't found, fall back\r\n else {\r\n getSlides();\r\n }\r\n }.bind(this));\r\n }\r\n }\r\n // Don't try to load this item if the list is null, for whatever reason\r\n else if (this.list)\r\n this.loadListItem(treeData, itemData, data.type, data.name);\r\n if (data.type == Librarian.catType.myFavorite)\r\n Library.loadWorkspaceTab();\r\n else if (!tab || [\"search\", \"workspace\", \"myworkspace\"].contains(tab))\r\n Library.loadLibraryTab();\r\n\r\n return false;\r\n },\r\n\r\n loadTreeItem: function(tree, treeData, itemData, type, name) {\r\n // If there is no tree, bail\r\n if (!tree || !this.data)\r\n return;\r\n\r\n var parent = tree.getSelected();\r\n // If there is no selected node, try the root\r\n if (!parent)\r\n parent = tree.root;\r\n\r\n // Get the children for this node\r\n var children = parent.getChildren();\r\n // If there aren't any, bail\r\n if (!children)\r\n return;\r\n\r\n var found = false;\r\n\r\n // Check every child\r\n for (var i = 0; i < children.length; i++) {\r\n // If there is data and the catid matches\r\n if (children[i].data && (children[i].data[treeData] == this.data[itemData])) {\r\n // Select this node in the tree\r\n tree.select(children[i]);\r\n tree.selected = children[i];\r\n children[i].select(true);\r\n\r\n // And open it, if it isn't already\r\n if (!children[i].isOpen())\r\n children[i].toggle();\r\n\r\n found = true;\r\n\r\n // Then stop searching\r\n break;\r\n }\r\n }\r\n\r\n if (!found)\r\n this.loadListItem(treeData, itemData, type, name);\r\n },\r\n\r\n loadListItem: function(treeData, itemData, type, name) {\r\n if (!this.data)\r\n return;\r\n\r\n // Build the data object using the correct type of information\r\n var data = {};\r\n data[treeData] = this.data[itemData];\r\n data.ext = this.data.ext || this.data.filetypeextension;\r\n // And then load it\r\n Librarian.contentLoader.onComplete = this.targetList.loadComplete;\r\n Librarian.contentLoader.load(data, type);\r\n\r\n // Set the hash for the data being loaded\r\n var hash = itemData + \"=\" + this.data[itemData] + \"&type=\" + type;\r\n if (this.data.prestype > 0)\r\n hash += \"&prestype=\" + this.data.prestype;\r\n\r\n Librarian.Utils.changeHash(hash);\r\n\r\n if (typeof Library.loadItemView == \"function\")\r\n Library.loadItemView(data, name, this.data.description, type, this.targetList);\r\n },\r\n\r\n onPreviewClick: function(e) {\r\n // Let the event propagate to the parent div which would handle multi-selection\r\n if (e.control || e.shift)\r\n return true;\r\n\r\n var evt = new Event(e);\r\n evt.stop();\r\n \r\n // Don't let the user open a preview for a nonexistant item\r\n if (!this.allowAccess)\r\n return false;\r\n\r\n var openToInfo = false,\r\n openToTab = null;\r\n\r\n if (this.list) {\r\n openToInfo = this.list.options.openPreviewToInfo;\r\n openToTab = this.list.options.openPreviewToTab;\r\n }\r\n\r\n if (this.data.isslideshow)\r\n Librarian.Utils.openSlideShow(this.data, \"player\");\r\n else if (Librarian.preview.clickDelay) {\r\n // First click\r\n if (!this.previewTimer) {\r\n this.previewTimer = setTimeout(function() {\r\n this.previewItem(false, openToInfo, openToTab);\r\n }.bind(this), Librarian.preview.clickDelay);\r\n }\r\n // Second click\r\n else {\r\n this.previewItem(true, openToInfo, openToTab);\r\n }\r\n }\r\n else\r\n this.previewItem(false, openToInfo, openToTab);\r\n\r\n return false;\r\n },\r\n\r\n getItemId: function() {\r\n var id = '';\r\n if (this.list)\r\n id = this.list.options.id + '_';\r\n\r\n if (this.data.fileid)\r\n id += 'F' + this.data.fileid;\r\n else if (this.data.groupid)\r\n id += 'G' + this.data.groupid;\r\n else if (this.data.presid)\r\n id += 'P' + this.data.presid;\r\n else if (this.data.catid)\r\n id += 'C' + this.data.catid;\r\n\r\n if (this.data.slideid)\r\n id += \"_S\" + this.data.slideid;\r\n\r\n if (this.data.slidenumber > 0)\r\n id += \"_SN\" + this.data.slidenumber;\r\n\r\n return id;\r\n },\r\n\r\n prepareName: function(fileName, ext, hideCheck) {\r\n var textLengths = this.getMaxLabelLengths();\r\n\r\n if (textLengths == null)\r\n return fileName;\r\n\r\n var count = 0;\r\n\r\n // Don't add the extension back if we're supposed to hide them or they are fake ones like for events and groups\r\n if (Librarian.tileList.useFileTitle || !Librarian.tileList.showExtensionInName || [\"evtg\", \"evt\", \"vpres\", \"favg\"].contains(ext))\r\n ext = '';\r\n\r\n var maxLineLength = (hideCheck ? textLengths.oneLineNoCheck : textLengths.oneLine);\r\n\r\n if (typeof maxLineLength == \"number\") {\r\n // Force the file name to be broken if it has been\r\n // more than Librarian.labelLength.oneline characters\r\n // since we saw the last break-inducing character.\r\n for (var i = 0; i < fileName.length; i++) {\r\n if (Librarian.labelLength) {\r\n if (Librarian.labelLength.wrapCharacters && Librarian.labelLength.wrapCharacters.contains(fileName.charAt(i)))\r\n count = 0;\r\n }\r\n else if (fileName.charAt(i) == ' ')\r\n count = 0;\r\n count++;\r\n\r\n if (count > maxLineLength) {\r\n fileName = fileName.substring(0, i) + \"
\" + fileName.substring(i, fileName.length);\r\n count = 1;\r\n }\r\n }\r\n }\r\n\r\n // If the file name is too long, shorten it\r\n if (fileName.length > textLengths.text)\r\n fileName = fileName.substring(0, textLengths.text - 3 - ext.length).trim() + \"...\" + ext.toLowerCase();\r\n else if (!Librarian.tileList.showExtensionInName) {\r\n var dotIndex = fileName.lastIndexOf('.');\r\n if (dotIndex >= 0)\r\n fileName = fileName.substring(0, dotIndex);\r\n }\r\n\r\n return fileName;\r\n },\r\n\r\n getMaxLabelLengths: function() {\r\n if (!Librarian.labelLength)\r\n return null;\r\n\r\n if (this.size) {\r\n if (this.size == \"lg\")\r\n return Librarian.labelLength.large;\r\n else if (this.size == \"expand\")\r\n return null;\r\n }\r\n\r\n return Librarian.labelLength.normal;\r\n },\r\n\r\n previewItem: function(openExtraLarge, openToInfo, openToTab) {\r\n clearTimeout(this.previewTimer);\r\n this.previewTimer = null;\r\n\r\n var ext = Librarian.Utils.getExtensionFromData(this.data, true);\r\n\r\n if ((ext.toUpperCase() == \"URL\") && Librarian.tileList.openURLOnClick)\r\n Librarian.Utils.openURLFile(this.data);\r\n else {\r\n var options = {\r\n itemStyle: this.itemClassName, \r\n openToInfo: openToInfo, \r\n openToTab: openToTab,\r\n size: openExtraLarge ? \"xl\" : \"lg\"\r\n }\r\n \r\n Librarian.PreviewWindow.openPreviewWindow(this.data, this.parentData, this.list, options);\r\n }\r\n },\r\n\r\n isGroup: function() {\r\n return (this.data.groupid > 0) || (this.data.presid > 0);\r\n },\r\n\r\n cleanFileName: function(fileName) {\r\n var name = fileName;\r\n\r\n // If the file name has a @ symbol, it's probably prefixed with an e-mail\r\n if ((this.data.catType == Librarian.catType.file) && fileName && fileName.contains('@')) {\r\n // Get the index of the @\r\n var atIndex = fileName.indexOf('@');\r\n // Find the _ that separates the e-mail from the file name\r\n var underscoreIndex = fileName.indexOf('_', atIndex);\r\n // If it exists, chop everything up to that point\r\n if (underscoreIndex >= 0)\r\n name = fileName.substring(underscoreIndex + 1, fileName.length);\r\n }\r\n\r\n return name;\r\n }\r\n});\r\n\r\nLibrarian.TileList.extend({\r\n isValidItem: function(data) {\r\n return true;\r\n },\r\n getFileTitle: function(data) {\r\n return data.extrafields[Librarian.tileList.fileTitleAttribute] || data.title || data.contenttitle || data.filename || data.name || data.contentname;\r\n },\r\n getCategoryTitle: function(data) {\r\n if (!data)\r\n return null;\r\n\r\n var name = data.name;\r\n var catAttribute = Librarian.treeView.categoryTitleAttribute;\r\n if (catAttribute) {\r\n var catTitle = data.extrafields && data.extrafields[catAttribute];\r\n if (catTitle && catTitle.length > 0)\r\n name = catTitle;\r\n }\r\n\r\n return name;\r\n }\r\n});\r\n\r\nLibrarian.TileList.TileItem.extend({\r\n canPreview: function(/*data, parentData*/) {\r\n return true;\r\n }\r\n});","Librarian.hoverMenuTypes = {\r\n file: 0,\r\n globalFavorite: 1,\r\n myFavorite: 2,\r\n cart: 4,\r\n event: 5\r\n};\r\n\r\nLibrarian.HoverMenu = new Class({\r\n Implements: Options,\r\n Binds: [\"render\", \"onMouseOver\", \"onMouseOut\", \"onDropDownMouseOver\"],\r\n\r\n options: {\r\n menuContainer: null,\r\n dropDownContainer: null,\r\n dropDownListContainer: null,\r\n dropDownTrigger: null,\r\n menuStylePrefix: \"tile-list-\",\r\n containerStylePrefix: null,\r\n dropDownStylePrefix: \"tile-list-dropdown-item-menu-\",\r\n menuIdPrefix: \"tileMenu\",\r\n id: null,\r\n isInCart: false,\r\n showSearchOptions: true\r\n },\r\n\r\n items: [],\r\n dropDownItems: [],\r\n\r\n menuContainerEl: null,\r\n dropDownContainerEl: null,\r\n dropDownListContainerEl: null,\r\n dropDownTriggerEl: null,\r\n bodyEl: null,\r\n\r\n isMenuShown: false,\r\n wasSearching: false,\r\n list: null,\r\n index: -1,\r\n menuType: null,\r\n isCategory: null,\r\n\r\n initialize: function(options, items, dropDownItems, list) {\r\n this.setOptions(options);\r\n\r\n this.items = items;\r\n this.dropDownItems = dropDownItems;\r\n this.list = list;\r\n\r\n if (!this.options.containerStylePrefix)\r\n this.options.containerStylePrefix = this.options.menuStylePrefix;\r\n\r\n if (!this.menuContainerEl) {\r\n this.menuContainerEl = new Element(\"div\", {\r\n id: ((this.options.id != null) ? this.options.id + '_' : '') + this.options.menuContainer,\r\n \"class\": this.options.containerStylePrefix + \"menu-container\"\r\n });\r\n }\r\n\r\n this.dropDownContainerEl = $(this.options.dropDownContainer);\r\n this.dropDownListContainerEl = $(this.options.dropDownListContainer);\r\n this.dropDownTriggerEl = $(this.options.dropDownTrigger);\r\n this.bodyEl = $(document.body);\r\n\r\n this.render();\r\n },\r\n\r\n render: function() {\r\n var menuItemsEl = null;\r\n // Don't render the menu if the container doesn't exist or there are already items in it\r\n if (this.menuContainerEl && (this.menuContainerEl.getChildren().length == 0)) {\r\n menuItemsEl = new Element(\"ul\", {\r\n \"class\": this.options.menuStylePrefix + \"menu \"\r\n });\r\n\r\n var itemEl, iconEl;\r\n\r\n for (var i = 0; i < this.items.length; i++) {\r\n if (Librarian.hoverMenu.removeDisabledIcons && (this.items[i].enabled === false))\r\n continue;\r\n\r\n var className = '';\r\n if (typeof this.items[i].imgClass == \"function\")\r\n className = this.items[i].imgClass();\r\n else\r\n className = this.items[i].imgClass;\r\n\r\n iconEl = new Element(\"span\", {\r\n \"id\": this.options.menuIdPrefix + '_' + (this.items[i].id ? this.items[i].id : \"item\" + i),\r\n \"class\": className\r\n });\r\n\r\n itemEl = new Element(\"li\", {\r\n \"class\": this.options.menuStylePrefix + \"menu-item\" + \" ico-divider\",\r\n \"title\": Librarian.Lang.getString(this.items[i].toolTip)\r\n }).grab(iconEl);\r\n\r\n if (this.items[i].enabled === false) {\r\n iconEl.addClass(\"disabled\");\r\n itemEl.set(\"disabled\", true);\r\n }\r\n else {\r\n itemEl.onClickFn = this.items[i].onClick.bind(this);\r\n itemEl.addOnClick(this.onItemClicked);\r\n }\r\n\r\n menuItemsEl.grab(itemEl);\r\n }\r\n\r\n this.menuContainerEl.grab(menuItemsEl);\r\n this.menuContainerEl.hide();\r\n this.bodyEl.grabTop(this.menuContainerEl);\r\n\r\n itemEl = null;\r\n iconEl = null;\r\n }\r\n // If the menu container exists and there are already items in it, get the items list so that we can add the dropdown menu below\r\n else if (this.menuContainerEl)\r\n menuItemsEl = this.menuContainerEl.getFirst();\r\n\r\n if (this.dropDownContainerEl && this.dropDownListContainerEl) {\r\n // If someone is already using this list, create a copy of it\r\n if (this.dropDownListContainerEl.getChildren().length > 0) {\r\n // Save the original IDs and create a unique base\r\n var contId = this.dropDownContainerEl.id,\r\n listId = this.dropDownListContainerEl.id,\r\n newIdBase = ((this.options.id != null) ? this.options.id : (new Date().getTime())) + '_';\r\n\r\n // Clone each element and give it a unique ID\r\n this.dropDownContainerEl = this.dropDownContainerEl.clone();\r\n this.dropDownContainerEl.id = newIdBase + contId;\r\n\r\n this.dropDownListContainerEl = this.dropDownContainerEl.getFirst().getLast();\r\n this.dropDownListContainerEl.id = newIdBase + listId;\r\n // Clear out any menu items\r\n this.dropDownListContainerEl.empty();\r\n\r\n // Save the trigger\r\n this.dropDownTriggerEl = this.dropDownContainerEl.getFirst().getFirst();\r\n }\r\n\r\n var itemEl;\r\n for (var i = 0; i < this.dropDownItems.length; i++) {\r\n // If this item isn't enabled, skip it\r\n if (this.dropDownItems[i].enabled === false)\r\n continue;\r\n\r\n itemEl = new Element('a', {\r\n \"class\": this.options.dropDownStylePrefix + this.dropDownItems[i][\"class\"],\r\n \"text\": Librarian.Lang.getString(this.dropDownItems[i].name)\r\n });\r\n\r\n itemEl.onClickFn = this.dropDownItems[i].onClick.bind(this);\r\n itemEl.addOnClick(this.onItemClicked);\r\n this.dropDownListContainerEl.grab(itemEl);\r\n }\r\n\r\n // If we created the hover menu already, we don't need to copy this element into it agian\r\n if (menuItemsEl) {\r\n // This is kind of hacky need to think of a better way to do this\r\n menuItemsEl.getLast().empty().grab(this.dropDownContainerEl);\r\n }\r\n\r\n menuItemsEl = null;\r\n itemEl = null;\r\n\r\n if (this.dropDownTriggerEl)\r\n this.dropDownTriggerEl.addEvent(\"mouseover\", this.onDropDownMouseOver);\r\n }\r\n },\r\n\r\n onDropDownMouseOver: function() {\r\n if (!this.dropDownListContainerEl)\r\n return;\r\n\r\n var menuType = (typeof this.menuType == \"number\") ? this.menuType : -1,\r\n isCategory = (typeof this.isCategory == \"boolean\") ? this.isCategory : null,\r\n shown = 0;\r\n\r\n // If we know whether this was a category or not\r\n if ((menuType > 0) || (isCategory != null)) {\r\n // Go through each menu item\r\n for (var i = 0; i < this.dropDownItems.length; i++) {\r\n var itemEl = this.getDropDownMenuItem(this.dropDownItems[i][\"class\"]);\r\n if (itemEl) {\r\n var show = false;\r\n\r\n // Check if this item should be shown for the current menu type\r\n if (menuType === Librarian.hoverMenuTypes.file)\r\n show = (this.dropDownItems[i].file !== false);\r\n else if ((menuType === Librarian.hoverMenuTypes.globalFavorite) || (menuType === Librarian.hoverMenuTypes.myFavorite))\r\n show = (this.dropDownItems[i].group !== false);\r\n else if (menuType == Librarian.hoverMenuTypes.event)\r\n show = (this.dropDownItems[i].events === true);\r\n\r\n // Don't show this item unless the category parameter matches or doesn't exist\r\n if (show && (isCategory != null))\r\n show = (typeof this.dropDownItems[i].category == \"undefined\") || (this.dropDownItems[i].category === isCategory);\r\n\r\n // Override the \"show\" if we're in the cart and cart is explicitly true\r\n if (this.options.isInCart)\r\n show = show || (this.dropDownItems[i].cart === true);\r\n\r\n // If we're searching, show all \"search\" items\r\n if (Librarian.search.isSearching && !this.wasSearching)\r\n show = show || (this.dropDownItems[i].search === true);\r\n\r\n // If this is a function, hide if it returns false\r\n if ((typeof this.dropDownItems[i].enabled == \"function\") && (this.dropDownItems[i].enabled(this.data, menuType, isCategory, this.list ? (this.list.items[0] || null) : null, this.options, Librarian.search.isSearching && !this.wasSearching, this.parentData) === false))\r\n show = false;\r\n\r\n if (this.data.isslideshow && (this.dropDownItems[i].slideshow === false))\r\n show = false;\r\n\r\n var name = null;\r\n if (show) {\r\n // If this is a group, use a special name\r\n if (this.data && ((this.data.groupid > 0) || (this.data.presid > 0))) {\r\n // If it's a SlideShow and we have a SlideShow name, use that\r\n if ((typeof this.dropDownItems[i].slideShowName == \"string\") && this.data.isslideshow)\r\n name = this.dropDownItems[i].slideShowName;\r\n // Otherwise, use the group name, if we have one\r\n else if (typeof this.dropDownItems[i].groupName == \"string\")\r\n name = this.dropDownItems[i].groupName;\r\n }\r\n }\r\n\r\n if (name == null)\r\n name = this.dropDownItems[i].name;\r\n\r\n itemEl.set(\"text\", Librarian.Lang.getString(name));\r\n\r\n if (show && this.dropDownItems[i].show !== false) {\r\n itemEl.show();\r\n shown++;\r\n }\r\n else\r\n itemEl.hide();\r\n\r\n if (show && (this.dropDownItems[i][\"class\"] == \"subscribe\" || this.dropDownItems[i][\"class\"] == \"unsubscribe\")) {\r\n this.updateSubscriptionState(this.data, itemEl);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (shown > 0)\r\n mopen(this.dropDownListContainerEl.id);\r\n },\r\n\r\n onItemClicked: function(e) {\r\n var evt = new Event(e),\r\n buttonEl = $(evt.target);\r\n // Not-existant and disabled buttons can't get clicked\r\n if (!buttonEl || buttonEl.get(\"disabled\"))\r\n return false;\r\n\r\n if (typeof this.onClickFn == \"function\")\r\n this.onClickFn(e);\r\n return false;\r\n },\r\n\r\n onMouseOver: function(wrapperEl, isCategory, menuType, data, wasSearching, parentData) {\r\n if (this.isMenuShown || !wrapperEl)\r\n return;\r\n\r\n this.data = data ? Object.clone(data) : null;\r\n this.parentData = parentData ? Object.clone(parentData) : null;\r\n this.isCategory = isCategory;\r\n this.menuType = menuType;\r\n this.wasSearching = wasSearching;\r\n if (this.menuContainerEl) {\r\n // If we were told whether this was a category or not\r\n if (typeof this.menuType == \"number\") {\r\n var shown = 0;\r\n // Go through each menu item\r\n for (var i = 0; i < this.items.length; i++) {\r\n var className;\r\n if (typeof this.items[i].imgClass == \"function\")\r\n className = this.items[i].imgClass();\r\n else\r\n className = this.items[i].imgClass;\r\n\r\n var itemEl = this.getMenuItem(className);\r\n if (itemEl) {\r\n var show;\r\n\r\n // Check if this item should be shown for the current menu type\r\n if (menuType === Librarian.hoverMenuTypes.file)\r\n show = (this.items[i].file !== false);\r\n else if ((menuType === Librarian.hoverMenuTypes.globalFavorite) || (menuType === Librarian.hoverMenuTypes.myFavorite))\r\n show = (this.items[i].group !== false);\r\n else if (menuType == Librarian.hoverMenuTypes.event)\r\n show = (this.items[i].events === true);\r\n\r\n // Don't show this item unless the category parameter matches or doesn't exist\r\n if (show && (isCategory != null))\r\n show = (typeof this.items[i].category == \"undefined\") || (this.items[i].category === isCategory);\r\n\r\n // Override the \"show\" if we're in the cart and cart is explicitly true\r\n if (this.options.isInCart)\r\n show = show || (this.items[i].cart === true);\r\n\r\n // If we're searching, show all \"search\" items\r\n if (Librarian.search.isSearching && !this.wasSearching)\r\n show = show || (this.items[i].search === true);\r\n\r\n // If this is an uploaded item and uploads are disabled for this item, don't show it\r\n if ((data.catType === Librarian.catType.uploads) && (this.items[i].upload === false))\r\n show = false;\r\n\r\n var enabled = true;\r\n // Get whether this button is enabled from the property, whether it's a function or a boolean\r\n if (typeof this.items[i].enabled == \"function\")\r\n enabled = this.items[i].enabled(data, menuType, isCategory, this.list ? (this.list.items[0] || null) : null, this.options, Librarian.search.isSearching && !this.wasSearching, this.parentData);\r\n else if (typeof this.items[i].enabled == \"boolean\")\r\n enabled = this.items[i].enabled;\r\n\r\n // If enabled is explicitly false, and we're supposed to hide disabled items, hide it\r\n if (Librarian.hoverMenu.removeDisabledIcons && (enabled === false))\r\n show = false;\r\n\r\n if (data.isslideshow && (this.items[i].slideshow === false))\r\n show = false;\r\n\r\n if (show) {\r\n var title = Librarian.Lang.getString(this.items[i].toolTip);\r\n // If this is an event, check for the event tooltip and use it if it exists\r\n if (menuType == Librarian.hoverMenuTypes.event) {\r\n if (typeof this.items[i].eventToolTip == \"string\")\r\n title = Librarian.Lang.getString(this.items[i].eventToolTip);\r\n }\r\n // If this is a group, use the right group tooltip\r\n else if (data && ((data.groupid > 0) || (data.presid > 0))) {\r\n // SlideShow tooltip for SlideShows, if there is one\r\n if ((typeof this.items[i].slideShowToolTip == \"string\") && data.isslideshow)\r\n title = Librarian.Lang.getString(this.items[i].slideShowToolTip);\r\n // Regular ggroup tooltip, otherwise\r\n else if (typeof this.items[i].groupToolTip == \"string\")\r\n title = Librarian.Lang.getString(this.items[i].groupToolTip);\r\n }\r\n\r\n itemEl.title = title;\r\n }\r\n\r\n var parentEl = itemEl.getParent();\r\n if (parentEl) {\r\n if (show) {\r\n // If this is the first item shown, remove the left border just to make sure\r\n // This is a workaround for :first-child ignoring visibility\r\n if (shown == 0)\r\n parentEl.style.borderLeftWidth = \"0\";\r\n parentEl.show(\"inline-block\");\r\n shown++;\r\n\r\n parentEl[(enabled ? \"remove\" : \"add\") + \"Class\"](\"disabled\");\r\n parentEl.set(\"disabled\", !enabled);\r\n\r\n }\r\n else\r\n parentEl.hide();\r\n }\r\n\r\n // Update the disabled state of the button\r\n itemEl[(enabled ? \"remove\" : \"add\") + \"Class\"](\"disabled\");\r\n itemEl.set(\"disabled\", !enabled);\r\n }\r\n }\r\n\r\n if (shown == 0)\r\n return;\r\n }\r\n this.menuContainerEl.injectTop(wrapperEl);\r\n this.menuContainerEl.show();\r\n }\r\n\r\n if (this.dropDownContainerEl)\r\n this.dropDownContainerEl.show();\r\n\r\n this.isMenuShown = true;\r\n },\r\n\r\n onMouseOut: function() {\r\n if (!this.isMenuShown)\r\n return;\r\n\r\n if (this.menuContainerEl)\r\n this.menuContainerEl.hide();\r\n\r\n if (this.dropDownContainerEl)\r\n this.dropDownContainerEl.hide();\r\n\r\n this.isMenuShown = false;\r\n },\r\n\r\n reset: function() {\r\n this.isMenuShown = false;\r\n\r\n if (this.bodyEl) {\r\n if (this.menuContainerEl)\r\n this.bodyEl.grab(this.menuContainerEl);\r\n }\r\n },\r\n\r\n destroy: function() {\r\n if (this.menuContainerEl) {\r\n $(this.menuContainerEl).destroy();\r\n this.menuContainerEl = null;\r\n }\r\n\r\n if (this.dropDownContainerEl) {\r\n $(this.dropDownContainerEl).destroy();\r\n this.dropDownContainerEl = null;\r\n }\r\n\r\n if (this.dropDownListContainerEl) {\r\n $(this.dropDownListContainerEl).destroy();\r\n this.dropDownListContainerEl = null;\r\n }\r\n\r\n this.bodyEl = null;\r\n this.list = null;\r\n this.data = null;\r\n\r\n if (this.items)\r\n this.items.length = 0;\r\n\r\n if (this.dropDownItems)\r\n this.dropDownItems.length = 0;\r\n },\r\n\r\n getMenuItem: function(name) {\r\n if (!this.menuContainerEl)\r\n return null;\r\n\r\n var buttonEls = this.menuContainerEl.getChildren(\"ul > li .\" + name.split(' ').join('.'));\r\n if (!buttonEls || (buttonEls.length == 0))\r\n return null;\r\n\r\n return buttonEls[0];\r\n },\r\n\r\n getDropDownMenuItem: function(name) {\r\n if (!this.dropDownListContainerEl)\r\n return null;\r\n\r\n var menuItemEls = this.dropDownListContainerEl.getChildren('.' + this.options.dropDownStylePrefix + name);\r\n if (!menuItemEls || (menuItemEls.length == 0))\r\n return null;\r\n\r\n return menuItemEls[0];\r\n },\r\n\r\n updateSubscriptionState: function(data, itemEl) {\r\n var content = data.fileinfo || data;\r\n content = Librarian.Utils.getStandardContent(content);\r\n\r\n if ((content.contentid > 0) && (content.contenttype != Librarian.contentType.undefined)) {\r\n // Check whether user is subscribed already\r\n this.subscribeRequest = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getcsfc\") + \"&cntid=\" + content.contentid + \"&cnttype=\" + content.contenttype + \"&out=cjson\",\r\n onSuccess: function (subscription) {\r\n if (subscription) {\r\n if (itemEl.className.contains(\"unsubscribe\")) {\r\n itemEl.show();\r\n } else {\r\n itemEl.hide();\r\n }\r\n } else {\r\n if (itemEl.className.contains(\"unsubscribe\")) {\r\n itemEl.hide();\r\n } else {\r\n itemEl.show();\r\n }\r\n }\r\n }.bind(this),\r\n onFailure: Librarian.Utils.onFailure\r\n });\r\n this.subscribeRequest.send();\r\n }\r\n }\r\n});\r\n\r\n(function() {\r\n Librarian.HoverMenu.extend({\r\n canDownload: function(data, menuType, isCategory, sourceItem) {\r\n if (!Librarian.Utils.canDownload(data))\r\n return false;\r\n\r\n if (!Librarian.contentRule.canDownload(data, menuType, isCategory, sourceItem)) {\r\n return false;\r\n }\r\n\r\n // Favorites don't get this because we don't know the file types\r\n // inside the favorite at this point and it causes undesired results on output\r\n if (((data.groupid > 0) && !(data.hasgfpdf && Librarian.tileList.hasGFPDF) && !(data.hasgfpptx && Librarian.tileList.hasGFPPTX) && !Librarian.tileList.customGFDownload) || (data.presid > 0))\r\n return false;\r\n\r\n return true;\r\n },\r\n canDownloadFromSlide: function() {\r\n return Librarian.hoverMenu.allowDownloadFromSlide;\r\n },\r\n isDeepLinkAllowed: function(data, menuType, isCategory, sourceItem) {\r\n // Don't allow sending slides in eComm\r\n if (!isCategory && initializer && (initializer.tab == \"ecomm\"))\r\n return false;\r\n\r\n if (Librarian.extensions.hasFakeSlides(Librarian.Utils.getExtensionFromData(data)) && !isCategory)\r\n return false;\r\n\r\n if (!Librarian.contentRule.canShare(data, menuType, isCategory, sourceItem)) {\r\n return false;\r\n }\r\n\r\n var ext = Librarian.Utils.getExtensionFromData(data);\r\n if (ext == \"wiz\")\r\n return false;\r\n\r\n return Library.canShare(data, sourceItem.parentData);\r\n },\r\n canShowInfo: function(data /*, menuType, isCategory*/) {\r\n return !Librarian.Utils.isSlideShow(data) && Librarian.TileList.TileItem.canPreview(data);\r\n },\r\n canShowView: function(data, menuType, isCategory, tileItem, options, isSearch) {\r\n\r\n // do not show if in fastlane\r\n if (Librarian.features.fastlane.load && Librarian.FastLane.isFastlaneTabOpen) {\r\n return false;\r\n }\r\n\r\n // If this isn't coming from the cart, search, or category, it's from a group so pretend this is a file menu to know where to search.\r\n if (!options.isInCart && !isSearch && !isCategory)\r\n menuType = Librarian.hoverMenuTypes.file;\r\n\r\n if (initializer && (initializer.tab == \"ecomm\"))\r\n return false;\r\n\r\n if (data.catType == Librarian.catType.uploads)\r\n return false;\r\n\r\n var tree;\r\n if (typeof Library.getTreeByType == \"function\") {\r\n var catType = null;\r\n switch (menuType) {\r\n case Librarian.hoverMenuTypes.file:\r\n catType = Librarian.catType.file;\r\n break;\r\n case Librarian.hoverMenuTypes.globalFavorite:\r\n catType = Librarian.catType.globalFavorite;\r\n break;\r\n case Librarian.hoverMenuTypes.myFavorite:\r\n catType = Librarian.catType.myFavorite;\r\n break;\r\n case Librarian.hoverMenuTypes.event:\r\n catType = Librarian.catType.event;\r\n break;\r\n }\r\n\r\n if (catType == null)\r\n return false;\r\n tree = Library.getTreeByType(catType, null, data.prestype || data.presType);\r\n }\r\n else\r\n tree = treeView;\r\n\r\n // Only show the \"View Slides\"/\"View Events\" button if there is a tree\r\n return (typeof tree != \"undefined\") && (tree != null);\r\n },\r\n canAddFromDropdown: function (data, menuType, isCategory, sourceItem, options, isSearching, parentData) {\r\n return Librarian.HoverMenu.canAddToCart(data, menuType, isCategory, sourceItem, options, isSearching, parentData);\r\n },\r\n canAddToCart: function(data, menuType, isCategory, sourceItem, options, isSearching, parentData) {\r\n // Don't allow adding slides to the cart in eComm\r\n var isSlide = data.contenttype === Librarian.contentType.slide;\r\n if (isSlide && initializer && (initializer.tab == \"ecomm\"))\r\n return false;\r\n\r\n if (!Librarian.contentRule.canAddToCart(data, menuType, isCategory, sourceItem, parentData)) {\r\n return false;\r\n }\r\n\r\n return Librarian.cart.canAddToCart(data, data.contenttype === Librarian.contentType.file, isSlide, parentData);\r\n },\r\n canDeleteFile: function(data) {\r\n if (data.contenttype == 11 && data.isowner)\r\n return true;\r\n\r\n if (data.isuserfile) {\r\n if (data.ownerid === Librarian.sessionInfo.UserInfo.UserId) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n canSubscribe: function (data) {\r\n if (data.groupid > 0) {\r\n return false;\r\n }\r\n if (data.presid > 0) {\r\n return false;\r\n }\r\n if (data.eventid > 0) {\r\n return false;\r\n }\r\n if ((typeof data.eventcount == \"number\")) {\r\n return false;\r\n }\r\n\r\n return !Librarian.isGuest && Librarian.features.subscriptions.load;\r\n },\r\n getMenuItem: function(buttonEl) {\r\n if (buttonEl && (buttonEl.tagName != \"SPAN\")) {\r\n var iconEl = buttonEl.getElement(\"span\");\r\n if (iconEl)\r\n return iconEl;\r\n }\r\n return buttonEl;\r\n }\r\n });\r\n})();"]}