You are not connected. Please login or register

View previous topic View next topic Go down  Message [Page 1 of 1]

1Tutorial How to add Tooltips Wed Dec 19, 2012 5:52 am

Nick

Nick
Administrator


How to add Tooltips



Versions: This is for all forum versions.

I'm going to show you'all how to add Tooltips (Tipsy) to your forums. In the picture above, that is an example of a tooltip in action. It's basically when you hover over a link, image, or element a box displays above it, so follow these simple steps below to get started.


  • Step 1: Got to your Administration Panel --> Modules --> HTML & JavaScript --> Javascript codes management --> Create a new javascript (Make sure it's on!) --> Title: 'Tipsy' --> Mark it in all pages --> Content: Add this code below,

    Code:
    // tipsy, facebook style tooltips for jquery
    // version 1.0.0a
    // (c) 2008-2010 jason frame [jason@onehackoranother.com]
    // releated under the MIT license

    (function($) {
       
        function fixTitle($ele) {
            if ($ele.attr('title') || typeof($ele.attr('original-title')) != 'string') {
                $ele.attr('original-title', $ele.attr('title') || '').removeAttr('title');
            }
        }
       
        function Tipsy(element, options) {
            this.$element = $(element);
            this.options = options;
            this.enabled = true;
            fixTitle(this.$element);
        }
       
        Tipsy.prototype = {
            show: function() {
                var title = this.getTitle();
                if (title && this.enabled) {
                    var $tip = this.tip();
                   
                    $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);
                    $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity
                    $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);
                   
                    var pos = $.extend({}, this.$element.offset(), {
                        width: this.$element[0].offsetWidth,
                        height: this.$element[0].offsetHeight
                    });
                   
                    var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight;
                    var gravity = (typeof this.options.gravity == 'function')
                                    ? this.options.gravity.call(this.$element[0])
                                    : this.options.gravity;
                   
                    var tp;
                    switch (gravity.charAt(0)) {
                        case 'n':
                            tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
                            break;
                        case 's':
                            tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
                            break;
                        case 'e':
                            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};
                            break;
                        case 'w':
                            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};
                            break;
                    }
                   
                    if (gravity.length == 2) {
                        if (gravity.charAt(1) == 'w') {
                            tp.left = pos.left + pos.width / 2 - 15;
                        } else {
                            tp.left = pos.left + pos.width / 2 - actualWidth + 15;
                        }
                    }
                   
                    $tip.css(tp).addClass('tipsy-' + gravity);
                   
                    if (this.options.fade) {
                        $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});
                    } else {
                        $tip.css({visibility: 'visible', opacity: this.options.opacity});
                    }
                }
            },
           
            hide: function() {
                if (this.options.fade) {
                    this.tip().stop().fadeOut(function() { $(this).remove(); });
                } else {
                    this.tip().remove();
                }
            },
           
            getTitle: function() {
                var title, $e = this.$element, o = this.options;
                fixTitle($e);
                var title, o = this.options;
                if (typeof o.title == 'string') {
                    title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
                } else if (typeof o.title == 'function') {
                    title = o.title.call($e[0]);
                }
                title = ('' + title).replace(/(^\s*|\s*$)/, "");
                return title || o.fallback;
            },
           
            tip: function() {
                if (!this.$tip) {
                    this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"/></div>');
                }
                return this.$tip;
            },
           
            validate: function() {
                if (!this.$element[0].parentNode) {
                    this.hide();
                    this.$element = null;
                    this.options = null;
                }
            },
           
            enable: function() { this.enabled = true; },
            disable: function() { this.enabled = false; },
            toggleEnabled: function() { this.enabled = !this.enabled; }
        };
       
        $.fn.tipsy = function(options) {
           
            if (options === true) {
                return this.data('tipsy');
            } else if (typeof options == 'string') {
                return this.data('tipsy')[options]();
            }
           
            options = $.extend({}, $.fn.tipsy.defaults, options);
           
            function get(ele) {
                var tipsy = $.data(ele, 'tipsy');
                if (!tipsy) {
                    tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));
                    $.data(ele, 'tipsy', tipsy);
                }
                return tipsy;
            }
           
            function enter() {
                var tipsy = get(this);
                tipsy.hoverState = 'in';
                if (options.delayIn == 0) {
                    tipsy.show();
                } else {
                    setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);
                }
            };
           
            function leave() {
                var tipsy = get(this);
                tipsy.hoverState = 'out';
                if (options.delayOut == 0) {
                    tipsy.hide();
                } else {
                    setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);
                }
            };
           
            if (!options.live) this.each(function() { get(this); });
           
            if (options.trigger != 'manual') {
                var binder  = options.live ? 'live' : 'bind',
                    eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',
                    eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
                this[binder](eventIn, enter)[binder](eventOut, leave);
            }
           
            return this;
           
        };
       
        $.fn.tipsy.defaults = {
            delayIn: 0,
            delayOut: 0,
            fade: false,
            fallback: '',
            gravity: 'n',
            html: false,
            live: false,
            offset: 0,
            opacity: 0.8,
            title: 'title',
            trigger: 'hover'
        };
       
        // Overwrite this method to provide options on a per-element basis.
        // For example, you could store the gravity in a 'tipsy-gravity' attribute:
        // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });
        // (remember - do not modify 'options' in place!)
        $.fn.tipsy.elementOptions = function(ele, options) {
            return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;
        };
       
        $.fn.tipsy.autoNS = function() {
            return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
        };
       
        $.fn.tipsy.autoWE = function() {
            return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
        };
       
    })(jQuery);

  • Step 2: Got to your Administration Panel --> Modules --> HTML & JavaScript --> Javascript codes management --> Create a new javascript (Make sure it's on!) --> Title: 'Tipsy' --> Mark it in all pages --> Content: Add this code below,

    Code:
    $(document).ready(function(){

    $(function() {
    $(".pun a, .pun a img, .pun img, .left-box").tipsy({gravity: 's'});
    });
    $(function() {
    $("#tipsy-w,  ").tipsy({gravity: 'w'});
    });

    });

    $(document).ready(function(){
    $(function() {
        $("a.gensmall, .example-tipsy a, ").tipsy({gravity:'sw'});
        $("a.gensmall, .tipsy-n a, ").tipsy({gravity: 'n'});
        $("a.gensmall, .tipsy-s a, ").tipsy({gravity: 's'});
        $("a.gensmall, .tipsy-e a, ").tipsy({gravity: 'e'});
        $("a.gensmall, .tipsy-w a, ").tipsy({gravity: 'w'});
        $("a.gensmall, .tipsy-nw a, ").tipsy({gravity: 'nw'});
        $("a.gensmall, .tipsy-ne a, ").tipsy({gravity: 'ne'});
        $("a.gensmall, .tipsy-sw a, ").tipsy({gravity: 'sw'});
        $("a.gensmall, .tipsy-se a, ").tipsy({gravity: 'se'});
    });

    });
    Note: In the part above (.pun a, .pun a img, .pun img, .left-box), add your classes for tipsy to work. (I've already fixed it for everything, but you may edit it.) Also, you may change the way it displays such as on top, bottom, left, or right ect. Just change what is in green (.tipsy({gravity: 's'})) to n, s, e, w, nw, ne, sw, or sw.

  • Step 3: Go to your Administration Panel --> Display --> Pictures and Colors --> Colors --> CSS Stylesheet --> Paste this code below at the very bottom of your CSS Codes,

    Code:
    /* Tipsy */
    .tipsy {
      padding: 5px;
      font-size: 10px;
      position: absolute;
      z-index: 999;
    }
    .tipsy-inner {
      padding: 5px 8px 4px 8px;
      background-color: black;
      color: white;
      max-width: 250px;
      text-align: center;
    }
    .tipsy-inner {
      border-radius: 3px;
      -moz-border-radius:3px;
      -webkit-border-radius:3px;
    }
    .tipsy-arrow {
      position: absolute;
      background: url('http://onehackoranother.com/projects/jquery/tipsy/stylesheets/../images/tipsy.gif') no-repeat top left;
      width: 9px;
      height: 5px;
    }
    .tipsy-n .tipsy-arrow {
      top: 0;
      left: 50%;
      margin-left: -4px;
    }
    .tipsy-nw .tipsy-arrow {
      top: 0;
      left: 10px;
    }
    .tipsy-ne .tipsy-arrow {
      top: 0;
      right: 10px;
    }
    .tipsy-s .tipsy-arrow {
      bottom: 0;
      left: 50%;
      margin-left: -4px;
      background-position: bottom left;
    }
    .tipsy-sw .tipsy-arrow {
      bottom: 0;
      left: 10px;
      background-position: bottom left;
    }
    .tipsy-se .tipsy-arrow {
      bottom: 0;
      right: 10px;
      background-position: bottom left;
    }
    .tipsy-e .tipsy-arrow {
      top: 50%;
      margin-top: -4px;
      right: 0;
      width: 5px;
      height: 9px;
      background-position: top right;
    }
    .tipsy-w .tipsy-arrow {
      top: 50%;
      margin-top: -4px;
      left: 0;
      width: 5px;
      height: 9px;
    }

    Once you have successfully completed steps 1-3 you have installed tipsy!


Copyright © 2012 Theme Craze

https://themecraze.forumotion.com

View previous topic View next topic Back to top  Message [Page 1 of 1]

Permissions in this forum:
You cannot reply to topics in this forum


 

^ Back to Top