/** * tiles design class */ function UGTileDesign(){ var t = this, g_objThis = jQuery(this); var g_gallery = new UniteGalleryMain(), g_objGallery; var g_functions = new UGFunctions(), g_objParentWrapper, g_objWrapper; var g_thumbs = new UGThumbsGeneral(), g_items; this.events = { TILE_CLICK: "tile_click" }; var g_options = { tile_width: 250, //in case of fixed size: tile width tile_height: 200, //in case of fixed size: tile height tile_enable_border:false, //enable border of the tile tile_border_width:3, //tile border width tile_border_color:"#F0F0F0", //tile border color tile_border_radius:0, //tile border radius (applied to border only, not to outline) tile_enable_outline: false, //enable outline of the tile (works only together with the border) tile_outline_color: "#8B8B8B", //tile outline color tile_enable_shadow:false, //enable shadow of the tile tile_shadow_h:1, //position of horizontal shadow tile_shadow_v:1, //position of vertical shadow tile_shadow_blur:3, //shadow blur tile_shadow_spread:2, //shadow spread tile_shadow_color:"#8B8B8B", //shadow color tile_enable_action: true, //enable tile action on click like lightbox tile_as_link: false, //act the tile as link, no lightbox will appear tile_link_newpage: true, //open the tile link in new page tile_enable_overlay: true, //enable tile color overlay (on mouseover) tile_overlay_opacity: 0.4, //tile overlay opacity tile_overlay_color: "#000000", //tile overlay color tile_enable_icons: true, //enable icons in mouseover mode tile_show_link_icon: false, //show link icon (if the tile has a link). In case of tile_as_link this option not enabled tile_space_between_icons: 26, //initial space between icons, (on small tiles it may change) tile_enable_image_effect:false, //enable tile image effect tile_image_effect_type: "bw", //bw, blur, sepia - tile effect type tile_image_effect_reverse: false, //reverce the image, set only on mouseover state tile_enable_textpanel: false, //enable textpanel tile_textpanel_source: "title", //title,desc,desc_title. source of the textpanel. desc_title - if description empty, put title tile_textpanel_always_on: false, //textpanel always visible tile_textpanel_appear_type: "slide" //slide, fade - appear type of the textpanel on mouseover }; var g_defaults = { thumb_color_overlay_effect: true, thumb_overlay_reverse: true, thumb_image_overlay_effect: false, thumb_text_overlay:true, tile_textpanel_enable_description: false, tile_textpanel_bg_opacity: 0.6, tile_textpanel_padding_top:8, tile_textpanel_padding_bottom: 8 }; var g_temp = { isFixedMode:false, eventSizeChange: "thumb_size_change", funcParentApproveClick: null }; /** * init the tile object */ function init(gallery, customOptions){ g_gallery = gallery; g_objGallery = jQuery(gallery); var objects = g_gallery.getObjects(); g_objWrapper = objects.g_objWrapper; g_items = g_gallery.getArrItems(); g_options = jQuery.extend(g_options, g_defaults); g_options = jQuery.extend(g_options, customOptions); modifyOptions(); g_thumbs.init(gallery, g_options); var objCustomOptions = {}; g_thumbs.setCustomThumbs(setHtmlThumb,["overlay"], objCustomOptions); //get thumb default options too: var thumbOptions = g_thumbs.getOptions(); g_options = jQuery.extend(g_options, thumbOptions); } /** * set thumb and textpanel options according tile options */ function modifyOptions(){ //set overlay related options if(g_options.tile_enable_overlay == true){ g_options.thumb_overlay_opacity = g_options.tile_overlay_opacity; g_options.thumb_overlay_color = g_options.tile_overlay_color; }else if(g_options.tile_enable_icons == false){ //if nothing on overlay - turn it off g_options.thumb_color_overlay_effect = false; }else{ //if icons enabled - make it transparent g_options.thumb_overlay_opacity = 0; } //set item as link if(g_options.tile_as_link){ g_options.thumb_wrapper_as_link = true; g_options.thumb_link_newpage = g_options.tile_link_newpage; } //outline cannot appear without border if(g_options.tile_enable_outline == true && g_options.tile_enable_border == false) g_options.tile_enable_outline = false; } /** * set thumb html */ function setHtmlThumb(objThumbWrapper, objItem){ var html = ""+objItem.title+""; objThumbWrapper.append(html); objThumbWrapper.addClass("ug-tile"); var objThumbImage = objThumbWrapper.children(".ug-thumb-image"); if(g_temp.isFixedMode == true){ objThumbWrapper.fadeTo(0,0); //turn on in thumbsGeneral g_functions.setElementSize(objThumbWrapper, g_options.tile_width, g_options.tile_height); objThumbWrapper.addClass("ug-tile-fixed"); } //---- set thumb styles ---- //set border: var objCss = {}; if(g_options.tile_enable_border == true){ objCss["border-width"] = g_options.tile_border_width+"px"; objCss["border-style"] = "solid"; objCss["border-color"] = g_options.tile_border_color; if(g_options.tile_border_radius) objCss["border-radius"] = g_options.tile_border_radius+"px"; } //set outline: if(g_options.tile_enable_outline == true){ objCss["outline"] = "1px solid " + g_options.tile_outline_color; } //set shadow if(g_options.tile_enable_shadow == true){ var htmlShadow = g_options.tile_shadow_h+"px "; htmlShadow += g_options.tile_shadow_v+"px "; htmlShadow += g_options.tile_shadow_blur+"px "; htmlShadow += g_options.tile_shadow_spread+"px "; htmlShadow += g_options.tile_shadow_color; objCss["box-shadow"] = htmlShadow; } objThumbWrapper.css(objCss); //----- add icons var htmlAdd = ""; if(g_options.tile_enable_icons){ //add zoom icon if(g_options.tile_as_link == false && g_options.tile_enable_action == true){ var iconPlayClass = "ug-button-play ug-icon-zoom"; if(objItem.type != "image") iconPlayClass = "ug-button-play ug-icon-play"; htmlAdd += "
"; } //add link icon if(objItem.link && g_options.tile_show_link_icon == true || g_options.tile_as_link == true){ if(g_options.tile_as_link == false){ var linkTarget = ""; if(g_options.tile_link_newpage == true) linkTarget = " target='_blank'"; htmlAdd += ""; }else{ htmlAdd += ""; } } var objOverlay = objThumbWrapper.children(".ug-thumb-overlay"); objOverlay.append(htmlAdd); var objButtonZoom = objOverlay.children("." + iconPlayClass); if(objButtonZoom.length == 0) objButtonZoom = null; else objButtonZoom.hide(); var objButtonLink = objOverlay.children(".ug-icon-link"); if(objButtonLink.length == 0) objButtonLink = null; else objButtonLink.hide(); //if only zoom icon, make the tile clickable for lightbox open if(!objButtonLink && g_options.tile_enable_action == true) objThumbWrapper.addClass("ug-tile-clickable"); } //if icons enabled else{ //if the icons don't enabled, set the tile clickable if(g_options.tile_enable_action == true) objThumbWrapper.addClass("ug-tile-clickable"); } //add image overlay if(g_options.tile_enable_image_effect == true){ var imageOverlayHtml = ""; objThumbWrapper.append(imageOverlayHtml); } //add text panel if(g_options.tile_enable_textpanel == true){ var objTextPanel = new UGTextPanel(); objTextPanel.init(g_gallery, g_options, "tile"); objTextPanel.appendHTML(objThumbWrapper); var panelText = objItem.title; switch(g_options.tile_textpanel_source){ case "desc": case "description": panelText = objItem.description; break; case "desc_title": if(objItem.description != "") panelText = objItem.description; break; } objTextPanel.setTextPlain(panelText, ""); if(g_options.tile_textpanel_always_on == false) objTextPanel.getElement().fadeTo(0,0); objThumbWrapper.data("objTextPanel", objTextPanel); } } /** * get item from tile */ this.getItemByTile = function(objTile){ return g_thumbs.getItemByThumb(objTile); } /** * load tile image, place the image on load */ this.loadTileImage = function(objTile){ var objImage = getTileImage(objTile); g_functions.checkImagesLoaded(objImage, null, function(objImage,isError){ onPlaceImage(null, objTile, jQuery(objImage)); }); } function _________________GETTERS________________(){}; /** * get tile image */ function getTileImage(objTile){ var objImage = objTile.children("img.ug-thumb-image"); return(objImage); } /** * get image overlay */ function getTileOverlayImage(objTile){ var objOverlayImage = objTile.children(".ug-tile-image-overlay"); return(objOverlayImage); } /** * get tile color overlay */ function getTileOverlay(objTile){ var objOverlay = objTile.children(".ug-thumb-overlay"); return(objOverlay); } /** * get image effect */ function getTileImageEffect(objTile){ var objImageEffect = objTile.find(".ug-tile-image-overlay img"); return(objImageEffect); } /** * get text panel */ function getTextPanel(objTile){ var objTextPanel = objTile.data("objTextPanel"); return(objTextPanel); } /** * get text panel element from the tile */ function getTextPanelElement(objTile){ var objTextPanel = objTile.find(".ug-textpanel"); return(objTextPanel); } /** * get button link */ function getButtonLink(objTile){ var objButton = objTile.find(".ug-icon-link"); if(objButton.length == 0) return(null); return objButton; } /** * get button zoom */ function getButtonZoom(objTile){ var objButton = objTile.find(".ug-button-play"); if(objButton.length == 0) return(null); return objButton; } /** * tells if the tile is over style */ function isOverStyle(objTile){ if(objTile.hasClass("ug-thumb-over")) return(true); return(false); } /** * check if the tile is clickable */ function isTileClickable(objTile){ return objTile.hasClass("ug-tile-clickable"); } function _________________SETTERS________________(){}; /** * position the elements */ function positionElements(objTile){ var objItem = t.getItemByTile(objTile); var objButtonZoom = getButtonZoom(objTile); var objButtonLink = getButtonLink(objTile); var sizeTile = g_functions.getElementSize(objTile); var objImageOverlay = getTileOverlayImage(objTile) var objThumbImage = getTileImage(objTile); var objImageEffect = getTileImageEffect(objTile); //set image overlay size if(g_options.tile_enable_image_effect == true){ g_functions.setElementSize(objImageOverlay, sizeTile.width, sizeTile.height); g_functions.cloneElementSizeAndPos(objThumbImage, objImageEffect); } //scale images if(g_temp.isFixedMode){ if(g_options.tile_enable_image_effect == false){ g_functions.scaleImageCoverParent(objThumbImage, objTile); }else{ //width the effect g_functions.scaleImageCoverParent(objImageEffect, objImageOverlay); g_functions.cloneElementSizeAndPos(objImageEffect, objThumbImage); setTimeout(function(){ g_functions.cloneElementSizeAndPos(objImageEffect, objThumbImage); },500); } } var objTextPanel = getTextPanel(objTile); //set text panel: if(g_options.tile_enable_textpanel == true){ objTextPanel.refresh(); } //set vertical gap for icons if(objButtonZoom || objButtonLink){ var gapVert = 0; if(g_options.tile_enable_textpanel == true){ var texPanelSize = g_functions.getElementSize(objTextPanel.getElement()); if(texPanelSize.height > 0) gapVert = Math.floor((texPanelSize.height / 2) * -1); } } if(objButtonZoom && objButtonLink){ var sizeZoom = g_functions.getElementSize(objButtonZoom); var sizeLink = g_functions.getElementSize(objButtonLink); var spaceBetween = g_options.tile_space_between_icons; var buttonsWidth = sizeZoom.width + spaceBetween + sizeLink.width; var buttonsX = Math.floor((sizeTile.width - buttonsWidth) / 2); //trace("X: "+buttonsX+" "+"space: " + spaceBetween); //if space more then padding, calc even space. if(buttonsX < spaceBetween){ spaceBetween = Math.floor((sizeTile.width - sizeZoom.width - sizeLink.width) / 3); buttonsWidth = sizeZoom.width + spaceBetween + sizeLink.width; buttonsX = Math.floor((sizeTile.width - buttonsWidth) / 2); } g_functions.placeElement(objButtonZoom, buttonsX, "middle", 0 ,gapVert); g_functions.placeElement(objButtonLink, buttonsX + sizeZoom.width + spaceBetween, "middle", 0, gapVert); }else{ if(objButtonZoom) g_functions.placeElement(objButtonZoom, "center", "middle", 0, gapVert); if(objButtonLink) g_functions.placeElement(objButtonLink, "center", "middle", 0, gapVert); } if(objButtonZoom) objButtonZoom.show(); if(objButtonLink) objButtonLink.show(); } /** * set tiles htmls */ this.setHtml = function(objParent){ g_objParentWrapper = objParent; g_thumbs.setHtmlThumbs(objParent); } /** * set the overlay effect */ function setImageOverlayEffect(objTile, isActive){ var objItem = t.getItemByTile(objTile); var objOverlayImage = getTileOverlayImage(objTile); var animationDuration = g_options.thumb_transition_duration; if(g_options.tile_image_effect_reverse == false){ var objThumbImage = getTileImage(objTile); if(isActive){ objThumbImage.fadeTo(1,1); objOverlayImage.stop(true).fadeTo(animationDuration, 0); } else objOverlayImage.stop(true).fadeTo(animationDuration, 1); }else{ if(isActive){ objOverlayImage.stop(true).fadeTo(animationDuration, 1); } else{ objOverlayImage.stop(true).fadeTo(animationDuration, 0); } } } /** * set textpanel effect */ function setTextpanelEffect(objTile, isActive){ var animationDuration = g_options.thumb_transition_duration; var objTextPanel = getTextPanelElement(objTile); if(!objTextPanel) return(true); if(g_options.tile_textpanel_appear_type == "slide"){ var panelSize = g_functions.getElementSize(objTextPanel); if(panelSize.width == 0) return(false); var startPos = -panelSize.height; var endPos = 0; if(isActive == true){ objTextPanel.fadeTo(0,1); if(objTextPanel.is(":animated") == false) objTextPanel.css("bottom",startPos+"px"); objTextPanel.stop(true).animate({"bottom":endPos+"px"}, animationDuration); }else{ objTextPanel.stop(true).animate({"bottom":startPos+"px"}, animationDuration); } }else{ //fade effect if(isActive == true){ objTextPanel.stop(true).fadeTo(animationDuration, 1); }else{ objTextPanel.stop(true).fadeTo(animationDuration, 0); } } } /** * set tile over style */ function setOverStyle(data, objTile){ objTile = jQuery(objTile); if(g_options.tile_enable_image_effect) setImageOverlayEffect(objTile, true); var objImageOverlay = objTile.children(".ug-tile-image-overlay"); objImageOverlay.show(); if(g_options.tile_enable_textpanel == true && g_options.tile_textpanel_always_on == false) setTextpanelEffect(objTile, true); } /** * set normal style */ function setNormalStyle(data, objTile){ objTile = jQuery(objTile); if(g_options.tile_enable_image_effect) setImageOverlayEffect(objTile, false); if(g_options.tile_enable_textpanel == true && g_options.tile_textpanel_always_on == false) setTextpanelEffect(objTile, false); } /** * set all tiles normal style */ function setAllTilesNormalStyle(objTileExcept){ var objTiles = g_thumbs.getThumbs().not(objTileExcept); objTiles.each(function(index, objTile){ g_thumbs.setThumbNormalStyle(jQuery(objTile)); }); } /** * on tile size change, place elements */ function onSizeChange(data, objTile, forcePosition){ objTile = jQuery(objTile); if(g_temp.isFixedMode == true && objTile.data("image_placed") !== true && forcePosition !== true) return(true); positionElements(objTile); } /** * on place image event after images loaded */ function onPlaceImage(data, objTile, objImage){ positionElements(objTile); objImage.fadeTo(0,1); objTile.data("image_placed", true); } /** * on tile click on mobile devices on normal state * set the tile over state */ function onMobileClick(objTile){ if(isTileClickable(objTile) == true){ g_objThis.trigger(t.events.TILE_CLICK, objTile); return(true); } if(isOverStyle(objTile) == false){ setAllTilesNormalStyle(objTile); g_thumbs.setThumbOverStyle(objTile); } } /** * on tile click event */ function onTileClick(event){ var objTile = jQuery(this); var tagname = objTile.prop("tagName").toLowerCase(); var isApproved = true; if(g_temp.funcParentApproveClick && g_temp.funcParentApproveClick() == false) isApproved = false; if(tagname == "a"){ if(isApproved == false) event.preventDefault(); }else{ //in case of div if(isOverStyle(objTile) == false){ //mobile click version if(isApproved == true) onMobileClick(objTile); }else{ if(isTileClickable(objTile) == false) return(true); if(isApproved == true) g_objThis.trigger(t.events.TILE_CLICK, objTile); } } } /** * click on zoom button (as tile click) */ function onZoomButtonClick(event){ event.stopPropagation(); var objTile = jQuery(this).parents(".ug-tile"); var isApproved = true; if(g_temp.funcParentApproveClick && g_temp.funcParentApproveClick() == false) isApproved = false; if(isOverStyle(objTile) == false){ onMobileClick(objTile); return(true); } if(isApproved == true){ g_objThis.trigger(t.events.TILE_CLICK, objTile); return(false); } } /** * on link icon click */ function onLinkButtonClick(event){ var objTile = jQuery(this).parents(".ug-tile"); if(g_temp.funcParentApproveClick && g_temp.funcParentApproveClick() == false) event.preventDefault(); //allow click only from over style if(isOverStyle(objTile) == false && g_options.tile_as_link == false){ event.preventDefault(); onMobileClick(objTile); } } /** * init events */ this.initEvents = function(){ g_thumbs.initEvents(); //connect the over and normal style of the regular thumbs jQuery(g_thumbs).on(g_thumbs.events.SETOVERSTYLE, setOverStyle); jQuery(g_thumbs).on(g_thumbs.events.SETNORMALSTYLE, setNormalStyle); jQuery(g_thumbs).on(g_thumbs.events.PLACEIMAGE, onPlaceImage); g_objWrapper.on(g_temp.eventSizeChange, onSizeChange); g_objParentWrapper.delegate(".ug-tile .ug-button-play", "click", onZoomButtonClick); g_objParentWrapper.delegate(".ug-tile", "click", onTileClick); g_objParentWrapper.delegate(".ug-tile .ug-icon-link", "click", onLinkButtonClick); } /** * destroy the element events */ this.destroy = function(){ jQuery(g_thumbs).off(g_thumbs.events.SETOVERSTYLE); jQuery(g_thumbs).off(g_thumbs.events.SETNORMALSTYLE); jQuery(g_thumbs).off(g_thumbs.events.PLACEIMAGE); g_objWrapper.off(g_temp.eventSizeChange); if(g_options.tile_enable_textpanel == true){ var objThumbs = g_thumbs.getThumbs(); jQuery.each(objThumbs, function(index, thumb){ var textPanel = getTextPanel(jQuery(thumb)); textPanel.destroy(); }); } g_thumbs.destroy(); } /** * external init */ this.init = function(gallery, g_thumbs, customOptions){ init(gallery, g_thumbs, customOptions); } /** * set fixed mode */ this.setFixedMode = function(){ g_temp.isFixedMode = true; } /** * set parent approve click function */ this.setApproveClickFunction = function(funcApprove){ g_temp.funcParentApproveClick = funcApprove; } /** * run the tile design */ this.run = function(){ //return(false); var objThumbs = g_thumbs.getThumbs(); //hide original image if image effect active if(g_options.tile_enable_image_effect == true && g_options.tile_image_effect_reverse == false) objThumbs.children(".ug-thumb-image").fadeTo(0,0); g_thumbs.setHtmlProperties(); if(g_temp.isFixedMode == true){ objThumbs.children(".ug-thumb-image").fadeTo(0,0); g_thumbs.loadThumbsImages(); } } /** * get thumbs general option */ this.getObjThumbs = function(){ return g_thumbs; } /** * get options */ this.getOptions = function(){ return g_options; } }