diff options
author | Mario Vavti <mario@mariovavti.com> | 2016-12-16 16:14:01 +0100 |
---|---|---|
committer | Mario Vavti <mario@mariovavti.com> | 2016-12-16 16:14:56 +0100 |
commit | 6bde70d60a02e9e461bc8cb6dcb475778c435fec (patch) | |
tree | 95121b9236e905c98f2d050064b73198dec5621b | |
parent | 5252211c921a429c3c8e93278c4dfb9637afc190 (diff) | |
download | volse-hubzilla-6bde70d60a02e9e461bc8cb6dcb475778c435fec.tar.gz volse-hubzilla-6bde70d60a02e9e461bc8cb6dcb475778c435fec.tar.bz2 volse-hubzilla-6bde70d60a02e9e461bc8cb6dcb475778c435fec.zip |
move the sticky-kit^Cquery plugin to /lib and see if we want this for the whole app
-rw-r--r-- | doc/toc.html | 290 | ||||
-rw-r--r-- | library/sticky-kit/sticky-kit.js | 265 | ||||
-rw-r--r-- | library/sticky-kit/sticky-kit.min.js | 10 | ||||
-rw-r--r-- | view/js/main.js | 2 | ||||
-rw-r--r-- | view/php/default.php | 2 | ||||
-rw-r--r-- | view/php/theme_init.php | 1 | ||||
-rw-r--r-- | view/theme/redbasic/js/redbasic.js | 17 |
7 files changed, 297 insertions, 290 deletions
diff --git a/doc/toc.html b/doc/toc.html index ec566c02d..458f6ec84 100644 --- a/doc/toc.html +++ b/doc/toc.html @@ -93,277 +93,6 @@ </div> </div> </div> - -<script> -// Generated by CoffeeScript 1.10.0 - -/** -@license Sticky-kit v1.1.3 | MIT | Leaf Corcoran 2015 | http://leafo.net - */ - -(function() { - var $, win; - - $ = window.jQuery; - - win = $(window); - - $.fn.stick_in_parent = function(opts) { - var doc, elm, enable_bottoming, fn, i, inner_scrolling, len, manual_spacer, offset_top, outer_width, parent_selector, recalc_every, sticky_class; - if (opts == null) { - opts = {}; - } - sticky_class = opts.sticky_class, inner_scrolling = opts.inner_scrolling, recalc_every = opts.recalc_every, parent_selector = opts.parent, offset_top = opts.offset_top, manual_spacer = opts.spacer, enable_bottoming = opts.bottoming; - if (offset_top == null) { - offset_top = 0; - } - if (parent_selector == null) { - parent_selector = void 0; - } - if (inner_scrolling == null) { - inner_scrolling = true; - } - if (sticky_class == null) { - sticky_class = "is_stuck"; - } - doc = $(document); - if (enable_bottoming == null) { - enable_bottoming = true; - } - outer_width = function(el) { - var _el, computed, w; - if (window.getComputedStyle) { - _el = el[0]; - computed = window.getComputedStyle(el[0]); - w = parseFloat(computed.getPropertyValue("width")) + parseFloat(computed.getPropertyValue("margin-left")) + parseFloat(computed.getPropertyValue("margin-right")); - if (computed.getPropertyValue("box-sizing") !== "border-box") { - w += parseFloat(computed.getPropertyValue("border-left-width")) + parseFloat(computed.getPropertyValue("border-right-width")) + parseFloat(computed.getPropertyValue("padding-left")) + parseFloat(computed.getPropertyValue("padding-right")); - } - return w; - } else { - return el.outerWidth(true); - } - }; - fn = function(elm, padding_bottom, parent_top, parent_height, top, height, el_float, detached) { - var bottomed, detach, fixed, last_pos, last_scroll_height, offset, parent, recalc, recalc_and_tick, recalc_counter, spacer, tick; - if (elm.data("sticky_kit")) { - return; - } - elm.data("sticky_kit", true); - last_scroll_height = doc.height(); - parent = elm.parent(); - if (parent_selector != null) { - parent = parent.closest(parent_selector); - } - if (!parent.length) { - throw "failed to find stick parent"; - } - fixed = false; - bottomed = false; - spacer = manual_spacer != null ? manual_spacer && elm.closest(manual_spacer) : $("<div />"); - if (spacer) { - spacer.css('position', elm.css('position')); - } - recalc = function() { - var border_top, padding_top, restore; - if (detached) { - return; - } - last_scroll_height = doc.height(); - border_top = parseInt(parent.css("border-top-width"), 10); - padding_top = parseInt(parent.css("padding-top"), 10); - padding_bottom = parseInt(parent.css("padding-bottom"), 10); - parent_top = parent.offset().top + border_top + padding_top; - parent_height = parent.height(); - if (fixed) { - fixed = false; - bottomed = false; - if (manual_spacer == null) { - elm.insertAfter(spacer); - spacer.detach(); - } - elm.css({ - position: "", - top: "", - width: "", - bottom: "" - }).removeClass(sticky_class); - restore = true; - } - top = elm.offset().top - (parseInt(elm.css("margin-top"), 10) || 0) - offset_top; - height = elm.outerHeight(true); - el_float = elm.css("float"); - if (spacer) { - spacer.css({ - width: outer_width(elm), - height: height, - display: elm.css("display"), - "vertical-align": elm.css("vertical-align"), - "float": el_float - }); - } - if (restore) { - return tick(); - } - }; - recalc(); - if (height === parent_height) { - return; - } - last_pos = void 0; - offset = offset_top; - recalc_counter = recalc_every; - tick = function() { - var css, delta, recalced, scroll, will_bottom, win_height; - if (detached) { - return; - } - recalced = false; - if (recalc_counter != null) { - recalc_counter -= 1; - if (recalc_counter <= 0) { - recalc_counter = recalc_every; - recalc(); - recalced = true; - } - } - if (!recalced && doc.height() !== last_scroll_height) { - recalc(); - recalced = true; - } - scroll = win.scrollTop(); - if (last_pos != null) { - delta = scroll - last_pos; - } - last_pos = scroll; - if (fixed) { - if (enable_bottoming) { - will_bottom = scroll + height + offset > parent_height + parent_top; - if (bottomed && !will_bottom) { - bottomed = false; - elm.css({ - position: "fixed", - bottom: "", - top: offset - }).trigger("sticky_kit:unbottom"); - } - } - if (scroll < top) { - fixed = false; - offset = offset_top; - if (manual_spacer == null) { - if (el_float === "left" || el_float === "right") { - elm.insertAfter(spacer); - } - spacer.detach(); - } - css = { - position: "", - width: "", - top: "" - }; - elm.css(css).removeClass(sticky_class).trigger("sticky_kit:unstick"); - } - if (inner_scrolling) { - win_height = win.height(); - if (height + offset_top > win_height) { - if (!bottomed) { - offset -= delta; - offset = Math.max(win_height - height, offset); - offset = Math.min(offset_top, offset); - if (fixed) { - elm.css({ - top: offset + "px" - }); - } - } - } - } - } else { - if (scroll > top) { - fixed = true; - css = { - position: "fixed", - top: offset - }; - css.width = elm.css("box-sizing") === "border-box" ? elm.outerWidth() + "px" : elm.width() + "px"; - elm.css(css).addClass(sticky_class); - if (manual_spacer == null) { - elm.after(spacer); - if (el_float === "left" || el_float === "right") { - spacer.append(elm); - } - } - elm.trigger("sticky_kit:stick"); - } - } - if (fixed && enable_bottoming) { - if (will_bottom == null) { - will_bottom = scroll + height + offset > parent_height + parent_top; - } - if (!bottomed && will_bottom) { - bottomed = true; - if (parent.css("position") === "static") { - parent.css({ - position: "relative" - }); - } - return elm.css({ - position: "absolute", - bottom: padding_bottom, - top: "auto" - }).trigger("sticky_kit:bottom"); - } - } - }; - recalc_and_tick = function() { - recalc(); - return tick(); - }; - detach = function() { - detached = true; - win.off("touchmove", tick); - win.off("scroll", tick); - win.off("resize", recalc_and_tick); - $(document.body).off("sticky_kit:recalc", recalc_and_tick); - elm.off("sticky_kit:detach", detach); - elm.removeData("sticky_kit"); - elm.css({ - position: "", - bottom: "", - top: "", - width: "" - }); - parent.position("position", ""); - if (fixed) { - if (manual_spacer == null) { - if (el_float === "left" || el_float === "right") { - elm.insertAfter(spacer); - } - spacer.remove(); - } - return elm.removeClass(sticky_class); - } - }; - win.on("touchmove", tick); - win.on("scroll", tick); - win.on("resize", recalc_and_tick); - $(document.body).on("sticky_kit:recalc", recalc_and_tick); - elm.on("sticky_kit:detach", detach); - return setTimeout(tick, 0); - }; - for (i = 0, len = this.length; i < len; i++) { - elm = this[i]; - fn($(elm)); - } - return this; - }; - -}).call(this); - - -</script> - <script> // Generate the table of contents in the side nav menu (see view/tpl/help.tpl) @@ -386,25 +115,8 @@ } }); - $(".widget").stick_in_parent({ - offset_top: $('nav').outerHeight(true) - }); + $(document.body).trigger("sticky_kit:recalc"); - $('#expand-aside').click(function() { - if($('main').hasClass('region_1-on')) { - $('body').css('overflow-x', 'hidden'); - } - else { - $('body').css('overflow-x', ''); - } - }); - $(window).scroll(function() { - if($('main').hasClass('region_1-on') && $(window).scrollLeft() > 5) { - $('#expand-aside-icon').toggleClass('fa-arrow-circle-right').toggleClass('fa-arrow-circle-left'); - $('main').toggleClass('region_1-on'); - $('body').css('overflow-x', ''); - } - }); }); </script> diff --git a/library/sticky-kit/sticky-kit.js b/library/sticky-kit/sticky-kit.js new file mode 100644 index 000000000..00b1ea2ff --- /dev/null +++ b/library/sticky-kit/sticky-kit.js @@ -0,0 +1,265 @@ +// Generated by CoffeeScript 1.10.0 + +/** +@license Sticky-kit v1.1.3 | MIT | Leaf Corcoran 2015 | http://leafo.net + */ + +(function() { + var $, win; + + $ = window.jQuery; + + win = $(window); + + $.fn.stick_in_parent = function(opts) { + var doc, elm, enable_bottoming, fn, i, inner_scrolling, len, manual_spacer, offset_top, outer_width, parent_selector, recalc_every, sticky_class; + if (opts == null) { + opts = {}; + } + sticky_class = opts.sticky_class, inner_scrolling = opts.inner_scrolling, recalc_every = opts.recalc_every, parent_selector = opts.parent, offset_top = opts.offset_top, manual_spacer = opts.spacer, enable_bottoming = opts.bottoming; + if (offset_top == null) { + offset_top = 0; + } + if (parent_selector == null) { + parent_selector = void 0; + } + if (inner_scrolling == null) { + inner_scrolling = true; + } + if (sticky_class == null) { + sticky_class = "is_stuck"; + } + doc = $(document); + if (enable_bottoming == null) { + enable_bottoming = true; + } + outer_width = function(el) { + var _el, computed, w; + if (window.getComputedStyle) { + _el = el[0]; + computed = window.getComputedStyle(el[0]); + w = parseFloat(computed.getPropertyValue("width")) + parseFloat(computed.getPropertyValue("margin-left")) + parseFloat(computed.getPropertyValue("margin-right")); + if (computed.getPropertyValue("box-sizing") !== "border-box") { + w += parseFloat(computed.getPropertyValue("border-left-width")) + parseFloat(computed.getPropertyValue("border-right-width")) + parseFloat(computed.getPropertyValue("padding-left")) + parseFloat(computed.getPropertyValue("padding-right")); + } + return w; + } else { + return el.outerWidth(true); + } + }; + fn = function(elm, padding_bottom, parent_top, parent_height, top, height, el_float, detached) { + var bottomed, detach, fixed, last_pos, last_scroll_height, offset, parent, recalc, recalc_and_tick, recalc_counter, spacer, tick; + if (elm.data("sticky_kit")) { + return; + } + elm.data("sticky_kit", true); + last_scroll_height = doc.height(); + parent = elm.parent(); + if (parent_selector != null) { + parent = parent.closest(parent_selector); + } + if (!parent.length) { + throw "failed to find stick parent"; + } + fixed = false; + bottomed = false; + spacer = manual_spacer != null ? manual_spacer && elm.closest(manual_spacer) : $("<div />"); + if (spacer) { + spacer.css('position', elm.css('position')); + } + recalc = function() { + var border_top, padding_top, restore; + if (detached) { + return; + } + last_scroll_height = doc.height(); + border_top = parseInt(parent.css("border-top-width"), 10); + padding_top = parseInt(parent.css("padding-top"), 10); + padding_bottom = parseInt(parent.css("padding-bottom"), 10); + parent_top = parent.offset().top + border_top + padding_top; + parent_height = parent.height(); + if (fixed) { + fixed = false; + bottomed = false; + if (manual_spacer == null) { + elm.insertAfter(spacer); + spacer.detach(); + } + elm.css({ + position: "", + top: "", + width: "", + bottom: "" + }).removeClass(sticky_class); + restore = true; + } + top = elm.offset().top - (parseInt(elm.css("margin-top"), 10) || 0) - offset_top; + height = elm.outerHeight(true); + el_float = elm.css("float"); + if (spacer) { + spacer.css({ + width: outer_width(elm), + height: height, + display: elm.css("display"), + "vertical-align": elm.css("vertical-align"), + "float": el_float + }); + } + if (restore) { + return tick(); + } + }; + recalc(); + if (height === parent_height) { + return; + } + last_pos = void 0; + offset = offset_top; + recalc_counter = recalc_every; + tick = function() { + var css, delta, recalced, scroll, will_bottom, win_height; + if (detached) { + return; + } + recalced = false; + if (recalc_counter != null) { + recalc_counter -= 1; + if (recalc_counter <= 0) { + recalc_counter = recalc_every; + recalc(); + recalced = true; + } + } + if (!recalced && doc.height() !== last_scroll_height) { + recalc(); + recalced = true; + } + scroll = win.scrollTop(); + if (last_pos != null) { + delta = scroll - last_pos; + } + last_pos = scroll; + if (fixed) { + if (enable_bottoming) { + will_bottom = scroll + height + offset > parent_height + parent_top; + if (bottomed && !will_bottom) { + bottomed = false; + elm.css({ + position: "fixed", + bottom: "", + top: offset + }).trigger("sticky_kit:unbottom"); + } + } + if (scroll < top) { + fixed = false; + offset = offset_top; + if (manual_spacer == null) { + if (el_float === "left" || el_float === "right") { + elm.insertAfter(spacer); + } + spacer.detach(); + } + css = { + position: "", + width: "", + top: "" + }; + elm.css(css).removeClass(sticky_class).trigger("sticky_kit:unstick"); + } + if (inner_scrolling) { + win_height = win.height(); + if (height + offset_top > win_height) { + if (!bottomed) { + offset -= delta; + offset = Math.max(win_height - height, offset); + offset = Math.min(offset_top, offset); + if (fixed) { + elm.css({ + top: offset + "px" + }); + } + } + } + } + } else { + if (scroll > top) { + fixed = true; + css = { + position: "fixed", + top: offset + }; + css.width = elm.css("box-sizing") === "border-box" ? elm.outerWidth() + "px" : elm.width() + "px"; + elm.css(css).addClass(sticky_class); + if (manual_spacer == null) { + elm.after(spacer); + if (el_float === "left" || el_float === "right") { + spacer.append(elm); + } + } + elm.trigger("sticky_kit:stick"); + } + } + if (fixed && enable_bottoming) { + if (will_bottom == null) { + will_bottom = scroll + height + offset > parent_height + parent_top; + } + if (!bottomed && will_bottom) { + bottomed = true; + if (parent.css("position") === "static") { + parent.css({ + position: "relative" + }); + } + return elm.css({ + position: "absolute", + bottom: padding_bottom, + top: "auto" + }).trigger("sticky_kit:bottom"); + } + } + }; + recalc_and_tick = function() { + recalc(); + return tick(); + }; + detach = function() { + detached = true; + win.off("touchmove", tick); + win.off("scroll", tick); + win.off("resize", recalc_and_tick); + $(document.body).off("sticky_kit:recalc", recalc_and_tick); + elm.off("sticky_kit:detach", detach); + elm.removeData("sticky_kit"); + elm.css({ + position: "", + bottom: "", + top: "", + width: "" + }); + parent.position("position", ""); + if (fixed) { + if (manual_spacer == null) { + if (el_float === "left" || el_float === "right") { + elm.insertAfter(spacer); + } + spacer.remove(); + } + return elm.removeClass(sticky_class); + } + }; + win.on("touchmove", tick); + win.on("scroll", tick); + win.on("resize", recalc_and_tick); + $(document.body).on("sticky_kit:recalc", recalc_and_tick); + elm.on("sticky_kit:detach", detach); + return setTimeout(tick, 0); + }; + for (i = 0, len = this.length; i < len; i++) { + elm = this[i]; + fn($(elm)); + } + return this; + }; + +}).call(this); diff --git a/library/sticky-kit/sticky-kit.min.js b/library/sticky-kit/sticky-kit.min.js new file mode 100644 index 000000000..c4d7f2e3b --- /dev/null +++ b/library/sticky-kit/sticky-kit.min.js @@ -0,0 +1,10 @@ +/* + Sticky-kit v1.1.3 | MIT | Leaf Corcoran 2015 | http://leafo.net +*/ +(function(){var c,f;c=window.jQuery;f=c(window);c.fn.stick_in_parent=function(b){var A,w,J,n,B,K,p,q,L,k,E,t;null==b&&(b={});t=b.sticky_class;B=b.inner_scrolling;E=b.recalc_every;k=b.parent;q=b.offset_top;p=b.spacer;w=b.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=c(document);null==w&&(w=!0);L=function(a){var b;return window.getComputedStyle?(a=window.getComputedStyle(a[0]),b=parseFloat(a.getPropertyValue("width"))+parseFloat(a.getPropertyValue("margin-left"))+ +parseFloat(a.getPropertyValue("margin-right")),"border-box"!==a.getPropertyValue("box-sizing")&&(b+=parseFloat(a.getPropertyValue("border-left-width"))+parseFloat(a.getPropertyValue("border-right-width"))+parseFloat(a.getPropertyValue("padding-left"))+parseFloat(a.getPropertyValue("padding-right"))),b):a.outerWidth(!0)};J=function(a,b,n,C,F,u,r,G){var v,H,m,D,I,d,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k));if(!g.length)throw"failed to find stick parent"; +v=m=!1;(h=null!=p?p&&a.closest(p):c("<div />"))&&h.css("position",a.css("position"));x=function(){var d,f,e;if(!G&&(I=A.height(),d=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),b=parseInt(g.css("padding-bottom"),10),n=g.offset().top+d+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q,u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:L(a), +height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,d=q,z=E,l=function(){var c,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+d>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:d}).trigger("sticky_kit:unbottom"))),e<F&&(m=!1,d=q,null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.detach()),c={position:"",width:"",top:""},a.css(c).removeClass(t).trigger("sticky_kit:unstick")), +B&&(c=f.height(),u+q>c&&!v&&(d-=l,d=Math.max(c-u,d),d=Math.min(q,d),m&&a.css({top:d+"px"})))):e>F&&(m=!0,c={position:"fixed",top:d},c.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(c).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+d>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}),a.css({position:"absolute",bottom:b,top:"auto"}).trigger("sticky_kit:bottom")}, +y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);c(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize",y),c(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l, +0)}};n=0;for(K=this.length;n<K;n++)b=this[n],J(c(b));return this}}).call(this); diff --git a/view/js/main.js b/view/js/main.js index 1d6eca91d..5d6867c94 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -666,6 +666,8 @@ function updateConvItems(mode,data) { $('.item_' + bParam_mid.substring(0,32)).addClass('item-highlight'); } + $(document.body).trigger("sticky_kit:recalc"); + } function collapseHeight() { diff --git a/view/php/default.php b/view/php/default.php index f5be4fa35..839a36b5b 100644 --- a/view/php/default.php +++ b/view/php/default.php @@ -10,7 +10,7 @@ <header><?php if(x($page,'header')) echo $page['header']; ?></header> <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"><?php if(x($page,'nav')) echo $page['nav']; ?></nav> <main> - <aside id="region_1"><?php if(x($page,'aside')) echo $page['aside']; ?></aside> + <aside id="region_1"><div id="left_aside_wrapper"><?php if(x($page,'aside')) echo $page['aside']; ?></div></aside> <section id="region_2"><?php if(x($page,'content')) echo $page['content']; ?> <div id="page-footer"></div> <div id="pause"></div> diff --git a/view/php/theme_init.php b/view/php/theme_init.php index 46aadaa7d..1fb07ae4f 100644 --- a/view/php/theme_init.php +++ b/view/php/theme_init.php @@ -26,6 +26,7 @@ head_add_js('library/jquery-textcomplete/jquery.textcomplete.js'); //head_add_js('library/colorbox/jquery.colorbox.js'); head_add_js('library/jquery.timeago.js'); head_add_js('library/readmore.js/readmore.js'); +head_add_js('library/sticky-kit/sticky-kit.min.js'); //head_add_js('library/jquery_ac/friendica.complete.js'); //head_add_js('library/tiptip/jquery.tipTip.minified.js'); head_add_js('library/jgrowl/jquery.jgrowl_minimized.js'); diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js index c5f74db3f..c3c2c7e3f 100644 --- a/view/theme/redbasic/js/redbasic.js +++ b/view/theme/redbasic/js/redbasic.js @@ -16,6 +16,23 @@ $(document).ready(function() { } $('#css3-calc').remove(); // Remove the test element + if($(window).outerWidth() > 767) { + $('#left_aside_wrapper').stick_in_parent({ + offset_top: $('nav').outerHeight(true) + }); + } + + $(window).resize(function() { + if($(window).outerWidth() > 767) { + $('#left_aside_wrapper').stick_in_parent({ + offset_top: $('nav').outerHeight(true) + }); + } + else { + $('#left_aside_wrapper').trigger("sticky_kit:detach"); + } + }); + $('#expand-aside').click(function() { $('#expand-aside-icon').toggleClass('fa-arrow-circle-right').toggleClass('fa-arrow-circle-left'); $('main').toggleClass('region_1-on'); |