ZuluPro/myblog

View on GitHub
myblog/photos/static/themes/tiles/ug-theme-tiles.js

Summary

Maintainability
F
1 wk
Test Coverage

if(typeof g_ugFunctions != "undefined")
    g_ugFunctions.registerTheme("tiles");
else 
    jQuery(document).ready(function(){g_ugFunctions.registerTheme("tiles")});


/**
 * Grid gallery theme
 */
function UGTheme_tiles(){

    var t = this;
    var g_gallery = new UniteGalleryMain(), g_objGallery, g_objects, g_objWrapper; 
    var g_tiles = new UGTiles(), g_lightbox = new UGLightbox(), g_objPreloader, g_objTilesWrapper;
    var g_functions = new UGFunctions(), g_objTileDesign = new UGTileDesign();
    
    var g_options = {
            theme_enable_preloader: true,        //enable preloader circle
            theme_preloading_height: 200,        //the height of the preloading div, it show before the gallery
            theme_preloader_vertpos: 100,        //the vertical position of the preloader
            theme_gallery_padding: 0,            //the horizontal padding of the gallery from the sides
            theme_appearance_order: "normal",    //normal, shuffle, keep - the appearance order of the tiles. applying only to columns type
            theme_auto_open:null                //auto open lightbox at start
    };
    
    var g_defaults = {
            gallery_width: "100%"
    };
    
    //temp variables
    var g_temp = {
            showPreloader: false
    };
    
    
    /**
     * Init the theme
     */
    function initTheme(gallery, customOptions){
        
        g_gallery = gallery;
        
        //set default options
        g_options = jQuery.extend(g_options, g_defaults);
        
        //set custom options
        g_options = jQuery.extend(g_options, customOptions);
        
        modifyOptions();
        
        //set gallery options
        g_gallery.setOptions(g_options);
        
        g_gallery.setFreestyleMode();
        
        g_objects = gallery.getObjects();
        
        //get some objects for local use
        g_objGallery = jQuery(gallery);        
        g_objWrapper = g_objects.g_objWrapper;
        
        //init objects
        g_tiles.init(gallery, g_options);
        g_lightbox.init(gallery, g_options);
        
        g_objTileDesign = g_tiles.getObjTileDesign();

        
    }
    
    
    /**
     * modift options
     */
    function modifyOptions(){
        
        if(g_options.theme_enable_preloader == true)
            g_temp.showPreloader = true;
        
        switch(g_options.theme_appearance_order){
            default:
            case "normal":
            break;
            case "shuffle":
                g_gallery.shuffleItems();
            break;
            case "keep":
                g_options.tiles_keep_order = true;
            break;
        }
        
    }

    
    /**
     * set gallery html elements
     */
    function setHtml(){
        
        //add html elements
        g_objWrapper.addClass("ug-theme-tiles");
        
        g_objWrapper.append("<div class='ug-tiles-wrapper' style='position:relative'></div>");
        
        //add preloader
        if(g_temp.showPreloader == true){
            g_objWrapper.append("<div class='ug-tiles-preloader ug-preloader-trans'></div>");
            g_objPreloader = g_objWrapper.children(".ug-tiles-preloader");
            g_objPreloader.fadeTo(0,0);
        }
        
        g_objTilesWrapper = g_objWrapper.children(".ug-tiles-wrapper");
        
        //set padding
        if(g_options.theme_gallery_padding)
            g_objWrapper.css({
                "padding-left":g_options.theme_gallery_padding+"px",
                "padding-right":g_options.theme_gallery_padding+"px"
            });
        
        g_tiles.setHtml(g_objTilesWrapper);
        g_lightbox.putHtml();
    }
    
    /**
     * actually run the theme
     */
    function actualRun(){
        
        //set preloader mode
        if(g_objPreloader){
            g_objPreloader.fadeTo(0,1);
            g_objWrapper.height(g_options.theme_preloading_height);
            g_functions.placeElement(g_objPreloader, "center", g_options.theme_preloader_vertpos);
        }
        
        initEvents();
        
        g_tiles.run();
        g_lightbox.run();
        
    }

    
    /**
     * run the theme
     */
    function runTheme(){
        
        setHtml();
        
        actualRun();
        
    }
    
    
    
    /**
     * init size of the thumbs panel
     */
    function initThumbsPanel(){
        
        //set size:
        var objGallerySize = g_gallery.getSize();
            
        if(g_temp.isVertical == false)            
            g_objPanel.setWidth(objGallerySize.width);
        else
            g_objPanel.setHeight(objGallerySize.height);
        
        g_objPanel.run();
    }
    
    
    /**
     * on tile click - open lightbox
     */
    function onTileClick(data, objTile){
        
        objTile = jQuery(objTile);        
        
        var objItem = g_objTileDesign.getItemByTile(objTile);
        var index = objItem.index;        
        
        g_lightbox.open(index);
    }
    
    
    /**
     * before items request: hide items, show preloader
     */
    function onBeforeReqestItems(){
                
        g_objTilesWrapper.hide();
        
        if(g_objPreloader){
            g_objPreloader.show();
        
            var preloaderSize = g_functions.getElementSize(g_objPreloader);
            var galleryHeight = preloaderSize.bottom + 30;
            
            g_objWrapper.height(galleryHeight);
        }
        
    }

    /**
     * open lightbox at start if needed
     */
    function onLightboxInit(){

        if(g_options.theme_auto_open !== null){
            g_lightbox.open(g_options.theme_auto_open);
            g_options.theme_auto_open = null;
        }
        
    }
    
    
    /**
     * init buttons functionality and events
     */
    function initEvents(){
        
        //remove preloader on tiles first placed
        if(g_objPreloader){
            jQuery(g_tiles).on(g_tiles.events.TILES_FIRST_PLACED, function(){
                g_objWrapper.height("auto");
                g_objPreloader.hide();
            });            
        }
        
        jQuery(g_objTileDesign).on(g_objTileDesign.events.TILE_CLICK, onTileClick);
        
        g_objGallery.on(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS, onBeforeReqestItems);

        jQuery(g_lightbox).on(g_lightbox.events.LIGHTBOX_INIT, onLightboxInit);

    }
    
    
    /**
     * destroy the theme
     */
    this.destroy = function(){
                
        jQuery(g_objTileDesign).off(g_objTileDesign.events.TILE_CLICK);
        jQuery(g_tiles).off(g_tiles.events.TILES_FIRST_PLACED);
        
        g_objGallery.off(g_gallery.events.GALLERY_BEFORE_REQUEST_ITEMS);

        jQuery(g_lightbox).off(g_lightbox.events.LIGHTBOX_INIT);
        
        g_tiles.destroy();
        g_lightbox.destroy();
    }
    
    
    /**
     * run the theme setting
     */
    this.run = function(){
        
        runTheme();
    }
    
    
    /**
     * init 
     */
    this.init = function(gallery, customOptions){
                
        initTheme(gallery, customOptions);
        
    }
}