diff --git a/docs/javascript/semantic.js b/docs/javascript/semantic.js index 34b45e3dc..be0167263 100755 --- a/docs/javascript/semantic.js +++ b/docs/javascript/semantic.js @@ -10,14 +10,14 @@ semantic.ready = function() { var $ui = $('.ui').not('.hover, .down'), $swap = $('.theme.menu .item'), - $menu = $('.menu.button'), + $menu = $('.sidebar.button'), $demo = $('.demo'), $waypoints = $('h2'), $example = $('.example'), $peek = $('.peek'), - $peekMenu = $peek.find('li'), + $peekMenu = $peek.find('.item'), $code = $('div.code'), // alias diff --git a/docs/library/sidr.js b/docs/library/sidr.js old mode 100644 new mode 100755 index 74c3cd4b3..a2aa07473 --- a/docs/library/sidr.js +++ b/docs/library/sidr.js @@ -1,4 +1,260 @@ -/*! Sidr - v1.1.1 - 2013-03-14 +/* + * Sidr * https://github.com/artberri/sidr - * Copyright (c) 2013 Alberto Varela; Licensed MIT */ -(function(e){var t=!1,i=!1,o={isUrl:function(e){var t=RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i");return t.test(e)?!0:!1},loadContent:function(e,t){e.html(t)},addPrefix:function(e){var t=e.attr("id"),i=e.attr("class");"string"==typeof t&&""!==t&&e.attr("id",t.replace(/([A-Za-z0-9_.\-]+)/g,"sidr-id-$1")),"string"==typeof i&&""!==i&&"sidr-inner"!==i&&e.attr("class",i.replace(/([A-Za-z0-9_.\-]+)/g,"sidr-class-$1")),e.removeAttr("style")},execute:function(o,n,s){"function"==typeof n?(s=n,n="sidr"):n||(n="sidr");var a,d,l,c=e("#"+n),f=e(c.data("body")),u=e("html"),p=c.outerWidth(!0),y=c.data("speed"),v=c.data("side");if("open"===o||"toogle"===o&&!c.is(":visible")){if(c.is(":visible")||t)return;if(i!==!1)return r.close(i,function(){r.open(n)}),void 0;t=!0,"left"===v?(a={left:p+"px"},d={left:"0px"}):(a={right:p+"px"},d={right:"0px"}),l=u.scrollTop(),u.css("overflow-x","hidden").scrollTop(l),f.css({width:f.width(),position:"absolute"}).animate(a,y),c.css("display","block").animate(d,y,function(){t=!1,i=n,"function"==typeof s&&s(n)})}else{if(!c.is(":visible")||t)return;t=!0,"left"===v?(a={left:0},d={left:"-"+p+"px"}):(a={right:0},d={right:"-"+p+"px"}),l=u.scrollTop(),u.removeAttr("style").scrollTop(l),f.animate(a,y),c.animate(d,y,function(){c.removeAttr("style"),f.removeAttr("style"),e("html").removeAttr("style"),t=!1,i=!1,"function"==typeof s&&s(n)})}}},r={open:function(e,t){o.execute("open",e,t)},close:function(e,t){o.execute("close",e,t)},toogle:function(e,t){o.execute("toogle",e,t)}};e.sidr=function(t){return r[t]?r[t].apply(this,Array.prototype.slice.call(arguments,1)):"function"!=typeof t&&"string"!=typeof t&&t?(e.error("Method "+t+" does not exist on jQuery.sidr"),void 0):r.toogle.apply(this,arguments)},e.fn.sidr=function(t){var i=e.extend({name:"sidr",speed:200,side:"left",source:null,renaming:!0,body:"body"},t),n=i.name,s=e("#"+n);if(0===s.length&&(s=e("
").attr("id",n).appendTo(e("body"))),s.addClass("sidr").addClass(i.side).data({speed:i.speed,side:i.side,body:i.body}),"function"==typeof i.source){var a=i.source(n);o.loadContent(s,a)}else if("string"==typeof i.source&&o.isUrl(i.source))e.get(i.source,function(e){o.loadContent(s,e)});else if("string"==typeof i.source){var d="",l=i.source.split(",");if(e.each(l,function(t,i){d+='
'+e(i).html()+"
"}),i.renaming){var c=e("
").html(d);c.find("*").each(function(t,i){var r=e(i);o.addPrefix(r)}),d=c.html()}o.loadContent(s,d)}else null!==i.source&&e.error("Invalid Sidr Source");return this.each(function(){var t=e(this),i=t.data("sidr");i||(t.data("sidr",n),t.click(function(e){e.preventDefault(),r.toogle(n)}))})}})(jQuery); \ No newline at end of file + * + * Copyright (c) 2013 Alberto Varela + * Licensed under the MIT license. + */ + +;(function( $ ){ + + var sidrMoving = false, + sidrOpened = false; + + // Private methods + var privateMethods = { + // Check for valids urls + // From : http://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-an-url + isUrl: function (str) { + var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name + '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path + '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string + '(\\#[-a-z\\d_]*)?$','i'); // fragment locator + if(!pattern.test(str)) { + return false; + } else { + return true; + } + }, + // Loads the content into the menu bar + loadContent: function($menu, content) { + $menu.html(content); + }, + // Add sidr prefixes + addPrefix: function($element) { + var elementId = $element.attr('id'), + elementClass = $element.attr('class'); + + if(typeof elementId === 'string' && '' !== elementId) { + $element.attr('id', elementId.replace(/([A-Za-z0-9_.\-]+)/g, 'sidr-id-$1')); + } + if(typeof elementClass === 'string' && '' !== elementClass && 'sidr-inner' !== elementClass) { + $element.attr('class', elementClass.replace(/([A-Za-z0-9_.\-]+)/g, 'sidr-class-$1')); + } + $element.removeAttr('style'); + }, + execute: function(action, name, callback) { + // Check arguments + if(typeof name === 'function') { + callback = name; + name = 'sidr'; + } + else if(!name) { + name = 'sidr'; + } + + // Declaring + var $menu = $('#' + name), + $body = $($menu.data('body')), + $html = $('html'), + menuWidth = $menu.outerWidth(true), + speed = $menu.data('speed'), + side = $menu.data('side'), + bodyAnimation, + menuAnimation, + scrollTop; + + // Open Sidr + if('open' === action || ('toogle' === action && !$menu.is(':visible'))) { + // Check if we can open it + if( $menu.is(':visible') || sidrMoving ) { + return; + } + + // If another menu opened close first + if(sidrOpened !== false) { + methods.close(sidrOpened, function() { + methods.open(name); + }); + + return; + } + + // Lock sidr + sidrMoving = true; + + // Left or right? + if(side === 'left') { + bodyAnimation = {left: menuWidth + 'px'}; + menuAnimation = {left: '0px'}; + } + else { + bodyAnimation = {right: menuWidth + 'px'}; + menuAnimation = {right: '0px'}; + } + + // Prepare page + scrollTop = $html.scrollTop(); + $html.css('overflow-x', 'hidden').scrollTop(scrollTop); + + // Open menu + $body.css({ + width: $body.width(), + position: 'absolute' + }).animate(bodyAnimation, speed); + $menu.css('display', 'block').animate(menuAnimation, speed, function() { + sidrMoving = false; + sidrOpened = name; + // Callback + if(typeof callback === 'function') { + callback(name); + } + }); + } + // Close Sidr + else { + // Check if we can close it + if( !$menu.is(':visible') || sidrMoving ) { + return; + } + + // Lock sidr + sidrMoving = true; + + // Right or left menu? + if(side === 'left') { + bodyAnimation = {left: 0}; + menuAnimation = {left: '-' + menuWidth + 'px'}; + } + else { + bodyAnimation = {right: 0}; + menuAnimation = {right: '-' + menuWidth + 'px'}; + } + + // Close menu + scrollTop = $html.scrollTop(); + $html.removeAttr('style').scrollTop(scrollTop); + $body.animate(bodyAnimation, speed); + $menu.animate(menuAnimation, speed, function() { + $menu.removeAttr('style'); + $body.removeAttr('style'); + $('html').removeAttr('style'); + sidrMoving = false; + sidrOpened = false; + // Callback + if(typeof callback === 'function') { + callback(name); + } + }); + } + } + }; + + // Sidr public methods + var methods = { + open: function(name, callback) { + privateMethods.execute('open', name, callback); + }, + close: function(name, callback) { + privateMethods.execute('close', name, callback); + }, + toogle: function(name, callback) { + privateMethods.execute('toogle', name, callback); + } + }; + + $.sidr = function( method ) { + + if ( methods[method] ) { + return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof method === 'function' || typeof method === 'string' || ! method ) { + return methods.toogle.apply( this, arguments ); + } else { + $.error( 'Method ' + method + ' does not exist on jQuery.sidr' ); + } + + }; + + $.fn.sidr = function( options ) { + + var settings = $.extend( { + name : 'sidr', // Name for the 'sidr' + speed : 200, // Accepts standard jQuery effects speeds (i.e. fast, normal or milliseconds) + side : 'left', // Accepts 'left' or 'right' + source : null, // Override the source of the content. + renaming : true, // The ids and classes will be prepended with a prefix when loading existent content + body : 'body' // Page container selector, + }, options); + + var name = settings.name, + $sideMenu = $('#' + name); + + // If the side menu do not exist create it + if( $sideMenu.length === 0 ) { + $sideMenu = $('
') + .attr('id', name) + .appendTo($('body')); + } + + // Adding styles and options + $sideMenu + .addClass('sidr') + .addClass(settings.side) + .data({ + speed : settings.speed, + side : settings.side, + body : settings.body + }); + + // The menu content + if(typeof settings.source === 'function') { + var newContent = settings.source(name); + privateMethods.loadContent($sideMenu, newContent); + } + else if(typeof settings.source === 'string' && privateMethods.isUrl(settings.source)) { + $.get(settings.source, function(data) { + privateMethods.loadContent($sideMenu, data); + }); + } + else if(typeof settings.source === 'string') { + var htmlContent = '', + selectors = settings.source.split(','); + + $.each(selectors, function(index, element) { + htmlContent += '
' + $(element).html() + '
'; + }); + + // Renaming ids and classes + if(settings.renaming) { + var $htmlContent = $('
').html(htmlContent); + $htmlContent.find('*').each(function(index, element) { + var $element = $(element); + privateMethods.addPrefix($element); + }); + htmlContent = $htmlContent.html(); + } + privateMethods.loadContent($sideMenu, htmlContent); + } + else if(settings.source !== null) { + $.error('Invalid Sidr Source'); + } + + return this.each(function(){ + + var $this = $(this), + data = $this.data('sidr'); + + // If the plugin hasn't been initialized yet + if ( ! data ) { + $this.data('sidr', name); + $this.click(function(e) { + e.preventDefault(); + methods.toogle(name); + }); + } + }); + }; + +})( jQuery ); \ No newline at end of file diff --git a/docs/menu.html b/docs/menu.html index 214a18d48..f01ed982f 100755 --- a/docs/menu.html +++ b/docs/menu.html @@ -143,7 +143,7 @@
- +
@@ -155,9 +155,10 @@
- @@ -202,7 +203,7 @@

Vertical Menu

This example uses several menu elements, an unclickable block, a clickable text link, a clickable icon link, and a dropdown group

-
A vertical menus width must typically be defined. An alternative is to use the fluid variation in conjunction with ui grid.
+
A vertical menu's width defaults to an arbitrary size. To have it fit your content more precisely use the fluid variation in conjunction with ui grid.