/** -------------- TextPanel class ---------------------*/ function UGTextPanel(){ var t = this; var g_objPanel, g_objParent, g_objTitle, g_objDesc; var g_objBG, g_objTextWrapper, g_gallery; var g_functions = new UGFunctions(), g_optionsPrefix = ""; var g_options = { textpanel_align:"bottom", //(top , bottom), textpanel align according the parent textpanel_margin:0, //margin from the textpanel position according the textpanel_align textpanel_text_valign:"middle", //middle, top, bottom - text vertical align textpanel_padding_top:10, //textpanel padding top textpanel_padding_bottom:10, //textpanel padding bottom textpanel_height: null, //textpanel height. if null it will be set dynamically textpanel_padding_title_description: 5, //the space between the title and the description textpanel_padding_right: 11, //cut some space for text from right textpanel_padding_left: 11, //cut some space for text from left textpanel_fade_duration: 200, //the fade duration of textpanel appear textpanel_enable_title: true, //enable the title text textpanel_enable_description: true, //enable the description text textpanel_enable_bg: true, //enable the textpanel background textpanel_bg_color:"#000000", //textpanel background color textpanel_bg_opacity: 0.4, //textpanel background opacity textpanel_title_color:null, //textpanel title color. if null - take from css textpanel_title_font_family:null, //textpanel title font family. if null - take from css textpanel_title_text_align:null, //textpanel title text align. if null - take from css textpanel_title_font_size:null, //textpanel title font size. if null - take from css textpanel_title_bold:null, //textpanel title bold. if null - take from css textpanel_css_title:{}, //textpanel additional css of the title textpanel_desc_color:null, //textpanel description font family. if null - take from css textpanel_desc_font_family:null, //textpanel description font family. if null - take from css textpanel_desc_text_align:null, //textpanel description text align. if null - take from css textpanel_desc_font_size:null, //textpanel description font size. if null - take from css textpanel_desc_bold:null, //textpanel description bold. if null - take from css textpanel_css_description:{}, //textpanel additional css of the description textpanel_bg_css:{}, //textpanel background css }; var g_temp = { isFirstTime: true }; /** * position elements from top */ function positionElementsTop(animateHeight, startY){ if(!startY) var startY = g_options.textpanel_padding_top; //place title var maxy = startY; //place title if(g_objTitle){ var titleY = maxy; g_functions.placeElement(g_objTitle, 0, titleY); var objTitleSize = g_functions.getElementSize(g_objTitle); var maxy = objTitleSize.bottom; } //place description var textDesc = ""; if(g_objDesc) textDesc = jQuery.trim(g_objDesc.text()); if(textDesc != ""){ var descY = maxy; if(g_objTitle) descY += g_options.textpanel_padding_title_description; g_functions.placeElement(g_objDesc, 0, descY); var objDescSize = g_functions.getElementSize(g_objDesc); maxy = objDescSize.bottom; } //change panel height if(!g_options.textpanel_height){ var panelHeight = maxy + g_options.textpanel_padding_bottom; setHeight(panelHeight, animateHeight); } } /** * get total text and description height */ function getTotalTextHeight(){ var totalHeight = 0; if(g_objTitle) totalHeight += g_objTitle.outerHeight(); if(g_objDesc){ var textDesc = ""; if(g_objDesc) textDesc = jQuery.trim(g_objDesc.text()); if(textDesc != ""){ if(g_objTitle) totalHeight += g_options.textpanel_padding_title_description; totalHeight += g_objDesc.outerHeight(); } } return(totalHeight); } /** * position elements to center */ function positionElementsMiddle(){ var totalTextHeight = getTotalTextHeight(); var startY = (g_objTextWrapper.height() - totalTextHeight) / 2; positionElementsTop(false, startY); } /** * position elements to bottom */ function positionElementBottom(){ var totalTextHeight = getTotalTextHeight(); var startY = g_objTextWrapper.height() - totalTextHeight - g_options.textpanel_padding_bottom; positionElementsTop(false, startY); } /** * position elements inside the panel */ this.positionElements = function(animateHeight){ //if height not set, position only top if(!g_options.textpanel_height || g_options.textpanel_text_valign == "top"){ positionElementsTop(animateHeight); return(false); } switch(g_options.textpanel_text_valign){ default: case "top": positionElementsTop(false); //no animation in this case break; case "bottom": positionElementBottom(); break; case "center": case "middle": positionElementsMiddle(); break; } } /** * set new panel height */ function setHeight(height, animateHeight){ if(!animateHeight) var animateHeight = false; if(animateHeight == true){ if(g_objBG){ //avoid background jumps var currentHeight = g_objBG.height(); if(height > currentHeight) g_objBG.height(height); } var objCss = {height: height+"px"}; g_objPanel.add(g_objTextWrapper).animate(objCss, g_options.textpanel_fade_duration); }else{ if(g_objBG) g_objBG.height(height); g_objPanel.add(g_objTextWrapper).height(height); } } /** * init the panel */ this.init = function(objGallery, customOptions, optionsPrefix){ g_gallery = objGallery; //change options by prefix if(optionsPrefix){ g_optionsPrefix = optionsPrefix; customOptions = g_functions.convertCustomPrefixOptions(customOptions,g_optionsPrefix,"textpanel"); } if(customOptions) g_options = jQuery.extend(g_options, customOptions); //validation: if(g_options.textpanel_enable_title == false && g_options.textpanel_enable_description == false) throw new Error("Textpanel Error: The title or description must be enabled"); if(g_options.textpanel_height && g_options.textpanel_height < 0) g_options.textpanel_height = null; } /** * append the bullets html to some parent */ this.appendHTML = function(objParent){ g_objParent = objParent; var html = "
"; if(g_options.textpanel_enable_bg == true) html += "
"; html += "
"; if(g_options.textpanel_enable_title == true) html += "
"; if(g_options.textpanel_enable_description == true) html += "
"; html += "
"; objParent.append(html); g_objPanel = objParent.children(".ug-textpanel"); g_objTextWrapper = g_objPanel.children(".ug-textpanel-textwrapper"); setCss(); } /** * set panel css according the options */ function setCss(){ //set background css if(g_options.textpanel_enable_bg == true){ g_objBG = g_objPanel.children(".ug-textpanel-bg"); g_objBG.fadeTo(0,g_options.textpanel_bg_opacity); var objCssBG = {"background-color":g_options.textpanel_bg_color}; objCssBG = jQuery.extend(objCssBG, g_options.textpanel_bg_css); g_objBG.css(objCssBG); } //set title css from options if(g_options.textpanel_enable_title == true){ g_objTitle = g_objTextWrapper.children(".ug-textpanel-title"); var objCssTitle = {}; if(g_options.textpanel_title_color !== null) objCssTitle["color"] = g_options.textpanel_title_color; if(g_options.textpanel_title_font_family !== null) objCssTitle["font-family"] = g_options.textpanel_title_font_family; if(g_options.textpanel_title_text_align !== null) objCssTitle["text-align"] = g_options.textpanel_title_text_align; if(g_options.textpanel_title_font_size !== null) objCssTitle["font-size"] = g_options.textpanel_title_font_size+"px"; if(g_options.textpanel_title_bold !== null){ if(g_options.textpanel_title_bold === true) objCssTitle["font-weight"] = "bold"; else objCssTitle["font-weight"] = "normal"; } //set additional css if(g_options.textpanel_css_title) objCssTitle = jQuery.extend(objCssTitle, g_options.textpanel_css_title); g_objTitle.css(objCssTitle); } //set description css if(g_options.textpanel_enable_description == true){ g_objDesc = g_objTextWrapper.children(".ug-textpanel-description"); var objCssDesc = {}; if(g_options.textpanel_desc_color !== null) objCssDesc["color"] = g_options.textpanel_desc_color; if(g_options.textpanel_desc_font_family !== null) objCssDesc["font-family"] = g_options.textpanel_desc_font_family; if(g_options.textpanel_desc_text_align !== null) objCssDesc["text-align"] = g_options.textpanel_desc_text_align; if(g_options.textpanel_desc_font_size !== null) objCssDesc["font-size"] = g_options.textpanel_desc_font_size+"px"; if(g_options.textpanel_desc_bold !== null){ if(g_options.textpanel_desc_bold === true) objCssDesc["font-weight"] = "bold"; else objCssDesc["font-weight"] = "normal"; } //set additional css if(g_options.textpanel_css_title) objCssDesc = jQuery.extend(objCssDesc, g_options.textpanel_css_description); g_objDesc.css(objCssDesc); } } /** * on item change, set the text */ function onItemChange(){ var objItem = g_gallery.getSelectedItem(); t.setText(objItem.title, objItem.description); } /** * init events */ function initEvents(){ //on item change, set the text in the slider. jQuery(g_gallery).on(g_gallery.events.ITEM_CHANGE, onItemChange); } /** * destroy the events */ this.destroy = function(){ jQuery(g_gallery).off(g_gallery.events.ITEM_CHANGE); } /** * run the text panel */ this.run = function(){ t.setSizeByParent(); initEvents(); } /** * set panel size */ this.setPanelSize = function(panelWidth){ var panelHeight = 80; //some default number if(g_options.textpanel_height) panelHeight = g_options.textpanel_height; g_objPanel.width(panelWidth); g_objPanel.height(panelHeight); //set background size if(g_objBG){ g_objBG.width(panelWidth); g_objBG.height(panelHeight); } //set textwrapper size and position var textWrapperWidth = panelWidth - g_options.textpanel_padding_left - g_options.textpanel_padding_right; var textWrapperLeft = g_options.textpanel_padding_left; g_functions.setElementSizeAndPosition(g_objTextWrapper, textWrapperLeft, 0, textWrapperWidth, panelHeight); //set text width if(g_objTitle) g_objTitle.width(textWrapperWidth); //set description height if(g_objDesc) g_objDesc.width(textWrapperWidth); if(g_temp.isFirstTime == false) t.positionElements(false); } /** * set size by parent. the height is set to default meanwhile */ this.setSizeByParent = function(){ var objSize = g_functions.getElementSize(g_objParent); t.setPanelSize(objSize.width); } /** * set plain sext without other manipulations */ this.setTextPlain = function(title, description){ if(g_objTitle) g_objTitle.html(title); if(g_objDesc) g_objDesc.html(description); } /** * set html text */ this.setText = function(title, description){ if(g_temp.isFirstTime == true){ t.setTextPlain(title, description); g_temp.isFirstTime = false; t.positionElements(false); }else{ //width animation g_objTextWrapper.stop().fadeTo(g_options.textpanel_fade_duration,0,function(){ t.setTextPlain(title, description); t.positionElements(true); jQuery(this).fadeTo(g_options.textpanel_fade_duration,1); }); } } /** * position the panel */ this.positionPanel = function(customTop, customLeft){ var objCss = {}; if(customTop !== undefined && customTop !== null){ objCss.top = customTop; }else{ switch(g_options.textpanel_align){ case "top": objCss.top = g_options.textpanel_margin + "px"; break; case "bottom": objCss.top = "auto"; objCss.bottom = g_options.textpanel_margin + "px"; break; case "middle": objCss.top = g_functions.getElementRelativePos(g_objPanel, "middle", g_options.textpanel_margin); break; } } if(customLeft !== undefined && customLeft !== null) objCss.left = customLeft; g_objPanel.css(objCss); } /** * set custom options */ this.setOptions = function(objOptions){ if(g_optionsPrefix) objOptions = g_functions.convertCustomPrefixOptions(objOptions, g_optionsPrefix, "textpanel"); g_options = jQuery.extend(g_options, objOptions); } /** * get html element */ this.getElement = function(){ return(g_objPanel); } /** * get element size */ this.getSize = function(){ var objSize = g_functions.getElementSize(g_objPanel); return(objSize); } /** * refresh panel size, position and contents */ this.refresh = function(toShow, noPosition, panelWidth){ setCss(); if(!panelWidth) t.setSizeByParent(); else t.setPanelSize(panelWidth); t.positionElements(false); if(noPosition !== true) t.positionPanel(); if(toShow === true) t.show(); } /** * hide the panel */ this.hide = function(){ g_objPanel.hide(); } /** * show the panel */ this.show = function(){ g_objPanel.show(); } /** * get options */ this.getOptions = function(){ return(g_options); } /** * get text panel option */ this.getOption = function(optionName){ if(g_options.hasOwnProperty(optionName) == false) return(null); return(g_options[optionName]); } } /** -------------- UGZoomButtonsPanel class ---------------------*/ /** * zoom buttons panel class */ function UGZoomButtonsPanel(){ var t = this; var g_objPanel, g_objParent, g_objButtonPlus, g_objButtonMinus, g_objButtonReturn; var g_slider = new UGSlider; var g_functions = new UGFunctions(); var g_options = { slider_zoompanel_skin: "" //skin of the zoom panel, if empty inherit from gallery skin }; var g_temp = { }; /** * init the panel */ this.init = function(objSlider, customOptions){ g_slider = objSlider; if(customOptions) g_options = jQuery.extend(g_options, customOptions); } /** * append the bullets html to some parent */ this.appendHTML = function(objParent){ g_objParent = objParent; var html = "
"; html += "
"; html += "
"; html += "
"; html += "
"; objParent.append(html); g_objPanel = objParent.children(".ug-zoompanel"); g_objButtonPlus = g_objPanel.children(".ug-zoompanel-plus"); g_objButtonMinus = g_objPanel.children(".ug-zoompanel-minus"); g_objButtonReturn = g_objPanel.children(".ug-zoompanel-return"); } /** * get buttons element */ this.getElement = function(){ return(g_objPanel); } /** * check if the button disabled */ function isButtonDisabled(objButton){ if(objButton.hasClass("ug-zoompanel-button-disabled")) return(true); return(false); } /** * disable some button */ function disableButton(objButton){ objButton.addClass("ug-zoompanel-button-disabled"); } /** * enable some button */ function enableButton(objButton){ objButton.removeClass("ug-zoompanel-button-disabled"); } /** * on zoom change */ function onZoomChange(){ //skip not image types if(g_slider.isCurrentSlideType("image") == false) return(true); var isFit = g_slider.isCurrentSlideImageFit(); if(isFit == true){ //if fit, disable buttons if(isButtonDisabled(g_objButtonMinus) == false){ disableButton(g_objButtonMinus); disableButton(g_objButtonReturn); } }else{ //if not fit, enable minus buttons if(isButtonDisabled(g_objButtonMinus) == true){ enableButton(g_objButtonMinus); enableButton(g_objButtonReturn); } } } /** * init zoompanel events */ t.initEvents = function(){ //add hover class on buttons g_functions.addClassOnHover(g_objButtonPlus, "ug-button-hover"); g_functions.addClassOnHover(g_objButtonMinus, "ug-button-hover"); g_functions.addClassOnHover(g_objButtonReturn, "ug-button-hover"); //set buttons click events g_functions.setButtonOnClick(g_objButtonPlus, function(){ if(isButtonDisabled(g_objButtonPlus) == true) return(true); g_slider.zoomIn(); }); g_functions.setButtonOnClick(g_objButtonMinus, function(){ if(isButtonDisabled(g_objButtonMinus) == true) return(true); g_slider.zoomOut(); }); g_functions.setButtonOnClick(g_objButtonReturn, function(){ if(isButtonDisabled(g_objButtonReturn) == true) return(true); g_slider.zoomBack(); }); //on zoom change event jQuery(g_slider).on(g_slider.events.ZOOM_CHANGE,onZoomChange); jQuery(g_slider).on(g_slider.events.ITEM_CHANGED,onZoomChange); } } /** -------------- UgBullets class ---------------------*/ function UGBullets(){ var t = this, g_numBullets = 0, g_gallery = new UniteGalleryMain(); var g_objBullets, g_objParent, g_activeIndex = -1; var g_functions = new UGFunctions(); var g_temp = { isInited:false }; var g_options = { bullets_skin: "", //bullets_skin: "" //skin of the bullets, if empty inherit from gallery skin bullets_addclass: "", //bullets object class addition bullets_space_between:-1 //set the space between bullets. If -1 then will be set default space from the skins } /** * the events */ this.events = { BULLET_CLICK : "bullet_click" }; /** * init the bullets */ this.init = function(gallery, customOptions, numBullets){ g_gallery = gallery; if(numBullets) g_numBullets = numBullets; else g_numBullets = g_gallery.getNumItems(); g_temp.isInited = true; g_options = jQuery.extend(g_options, customOptions); if(g_options.bullets_skin == "") g_options.bullets_skin = g_options.gallery_skin; } /** * add bullets to the html */ function setHtmlBullets(){ var html = ""; var addHtml = ""; if(g_options.bullets_space_between != -1) addHtml = " style='margin-left:" + g_options.bullets_space_between + "px'"; for(var i=0; i< g_numBullets; i++){ if(i == 0) html += "
"; else html += "
"; } g_objBullets.html(html); } /** * append the bullets html to some parent */ this.appendHTML = function(objParent){ g_objParent = objParent; validateInited(); var addClass = ""; if(g_options.bullets_addclass != "") addClass = " " + g_options.bullets_addclass; var html = "
"; html += "
"; g_objBullets = jQuery(html); objParent.append(g_objBullets); setHtmlBullets(); initEvents(); } /** * update number of bullets */ this.updateNumBullets = function(numBullets){ g_numBullets = numBullets; setHtmlBullets(); initEvents(); } /** * * on bullet click */ function onBulletClick(objBullet){ //filter not active only if(t.isActive(objBullet) == true) return(true); var index = objBullet.index(); jQuery(t).trigger(t.events.BULLET_CLICK, index); } /** * init the bullets events * trigger bullet click event */ function initEvents(){ var objBullets = g_objBullets.children(".ug-bullet"); g_functions.setButtonOnClick(objBullets, onBulletClick); objBullets.on("mousedown mouseup",function(event){ //event.preventDefault(); return(false); }); } /** * get the bullets element */ this.getElement = function(){ return g_objBullets; } /** * set some item active */ this.setActive = function(index){ validateInited(); validateIndex(index); var children = g_objBullets.children(".ug-bullet"); children.removeClass("ug-bullet-active"); var bullet = jQuery(children[index]); bullet.addClass("ug-bullet-active"); g_activeIndex = index; } /** * check if the bullet is active */ this.isActive = function(index){ validateIndex(index); if(typeof index != "number") var objBullet = index; else{ var objBullet = g_objBullets.children(".ug-bullet")[index]; } if(objBullet.hasClass("ug-bullet-active")) return(true); return(false); } /** * validate bullets index */ function validateIndex(index){ if(index < 0 || index >= g_numBullets) throw new Error("wrong bullet index: " + index); } /** * validate that the bullets are inited */ function validateInited(){ if(g_temp.isInited == true) return(true); throw new Error("The bullets are not inited!"); } } /** -------------- UgProgressBar class ---------------------*/ function UGProgressBar(){ var t = this, g_isInited = false; var g_percent = 0, g_objBar, g_objInner, g_functions = new UGFunctions(); var g_options = { slider_progressbar_color:"#ffffff", //progress bar color slider_progressbar_opacity: 0.6, //progress bar opacity slider_progressbar_line_width: 5 //progress bar line width } /** * put progress pie to some wrapper */ this.put = function(g_objWrapper, userOptions){ if(userOptions) g_options = jQuery.extend(g_options, userOptions); g_objWrapper.append("
"); g_objBar = g_objWrapper.children(".ug-progress-bar"); g_objInner = g_objBar.children(".ug-progress-bar-inner"); //init the objects g_objInner.css("background-color", g_options.slider_progressbar_color); g_objBar.height(g_options.slider_progressbar_line_width); g_objInner.height(g_options.slider_progressbar_line_width); g_objInner.width("0%"); //set opacity old way (because ie bug) var opacity = g_options.slider_progressbar_opacity; var objInnerHTML = g_objInner[0]; objInnerHTML.style.opacity = opacity; objInnerHTML.style.filter = 'alpha(opacity=' + opacity*100 + ')'; } /** * put the pie hidden */ this.putHidden = function(g_objWrapper, userOptions){ t.put(g_objWrapper, userOptions); g_objBar.hide(); } /** * get the bar object */ this.getElement = function(){ return(g_objBar); } /** * set progress bar size */ this.setSize = function(width){ g_objBar.width(width); g_objInner.width(width); t.draw(); } /** * set position */ this.setPosition = function(left, top, offsetLeft, offsetTop){ g_functions.placeElement(g_objBar, left, top, offsetLeft, offsetTop); } /** * draw the progress bar */ this.draw = function(){ var innerWidth = g_percent * 100; g_objInner.width(innerWidth + "%"); } /** * set and draw the progress */ this.setProgress = function(percent){ g_percent = g_functions.normalizePercent(percent); //debugLine(g_percent, true); t.draw(); } /** * get type string */ this.getType = function(){ return("bar"); } } /** -------------- UgProgressPie class ---------------------*/ function UGProgressPie(){ var t = this, g_isInited = false; var g_percent, g_objPie, g_functions = new UGFunctions(); var g_options = { slider_progresspie_type_fill: false, //false is stroke, true is fill - the progress pie type, stroke of fill slider_progresspie_color1: "#B5B5B5", //the first color of the progress pie slider_progresspie_color2: "#E5E5E5", //progress pie second color slider_progresspie_stroke_width: 6, //progress pie stroke width slider_progresspie_width: 30, //progess pie width slider_progresspie_height:30 //progress pie height } /** * put progress pie to some wrapper */ this.put = function(g_objWrapper, userOptions){ if(userOptions) g_options = jQuery.extend(g_options, userOptions); g_objWrapper.append(""); g_objPie = g_objWrapper.children(".ug-canvas-pie"); } /** * put the pie hidden */ this.putHidden = function(g_objWrapper, userOptions){ t.put(g_objWrapper, userOptions); draw(0.1); g_objPie.hide(); } /** * get jquery object */ this.getElement = function(){ return(g_objPie); } /** * set position */ this.setPosition = function(left, top){ g_functions.placeElement(g_objPie, left, top); } /** * get the height and width of the object */ this.getSize = function(){ var obj = { width: g_options.slider_progresspie_width, height: g_options.slider_progresspie_height }; return(obj); } /** * draw the progress pie */ function draw(percent){ if(!percent) var percent = 0; var radius = Math.min(g_options.slider_progresspie_width, g_options.slider_progresspie_height) / 2; var ctx = g_objPie[0].getContext('2d'); //init the context if(g_isInited == false){ g_isInited = true; ctx.rotate(Math.PI*(3/2)); ctx.translate(-2 * radius,0); } ctx.clearRect(0,0,g_options.slider_progresspie_width, g_options.slider_progresspie_height); var centerX = g_options.slider_progresspie_width / 2; var centerY = g_options.slider_progresspie_height / 2; //draw main arc var startPoint = 0; var endPoint = percent * Math.PI * 2; if(g_options.slider_progresspie_type_fill == true){ //fill ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.arc(centerX,centerY,radius,startPoint, endPoint); ctx.lineTo(centerX, centerY); ctx.fillStyle = g_options.slider_progresspie_color1; ctx.fill(); ctx.closePath(); }else{ //stroke ctx.globalCompositeOperation = "source-over"; ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.arc(centerX,centerY,radius,startPoint, endPoint); ctx.lineTo(centerX, centerY); ctx.fillStyle = g_options.slider_progresspie_color1; ctx.fill(); ctx.closePath(); ctx.globalCompositeOperation = "destination-out"; var radius2 = radius - g_options.slider_progresspie_stroke_width; ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.arc(centerX,centerY,radius2,startPoint, endPoint); ctx.lineTo(centerX, centerY); ctx.fillStyle = g_options.slider_progresspie_color1; ctx.fill(); ctx.closePath(); } //draw rest arc (only on fill type): if(g_options.slider_progresspie_type_fill == true){ startPoint = endPoint; endPoint = Math.PI * 2; ctx.beginPath(); ctx.arc(centerX,centerY,radius,startPoint, endPoint); ctx.lineTo(centerX, centerY); ctx.fillStyle = g_options.slider_progresspie_color2; ctx.fill(); ctx.closePath(); } } /** * set progress (0-1) */ this.setProgress = function(percent){ percent = g_functions.normalizePercent(percent); g_percent = percent; draw(percent); } /** * get type string */ this.getType = function(){ return("pie"); } }