From cb8b42a23be0b401c4b84c3b078a199265995d2d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Je=CC=81re=CC=81my=20Fabre?= Date: Thu, 21 Jul 2016 12:07:49 +0200 Subject: [PATCH] Add responsive functionnality to Sticky-kit --- app/static/src/js/modules/sticky-kit-init.js | 75 +++++++++++++++++++- app/templates/pages/basicpage.html | 6 +- app/templates/pages/menus/current_tree.html | 2 +- 3 files changed, 77 insertions(+), 6 deletions(-) diff --git a/app/static/src/js/modules/sticky-kit-init.js b/app/static/src/js/modules/sticky-kit-init.js index ea6b3b09..85213050 100644 --- a/app/static/src/js/modules/sticky-kit-init.js +++ b/app/static/src/js/modules/sticky-kit-init.js @@ -1,5 +1,7 @@ var StickyKitInit = function() { + this.elements = []; + // // Init // @@ -11,21 +13,90 @@ StickyKitInit.prototype.init = function() { var that = this, options = {}, - data; + data, element, $element; $('[data-sticky]').each(function(i) { + $element = $(this); data = $(this).data(); + if(data.stickyOffset) { options.offset_top = data.stickyOffset; } if(data.stickyParent) { options.parent = '.' + data.stickyParent; } - $(this).stick_in_parent(options); + + element = { + $element: $(this), + options: options, + data: $(this).data(), + attached: false + }; + that.elements.push(element); + that.attach(element); }); + $(window).resize(that.windowResize.bind(that)); + +}; + +StickyKitInit.prototype.windowResize = function(e) { + + var that = this, + windowWidth = $(window).width(); + + for(var i=0; i that.elements[i].data.stickyDetachAt && !that.elements[i].attached) { + that.attach(that.elements[i]); + } + + if(windowWidth <= that.elements[i].data.stickyDetachAt && that.elements[i].attached) { + that.detach(that.elements[i]); + } + + } + + } + +}; + +StickyKitInit.prototype.attach = function(element) { + + var that = this; + + if(element.data.stickyDetachAt) { + + var $window = $(window); + + // + // Attach if window width is larger + // + if($window.width() > element.data.stickyDetachAt) { + + element.$element.stick_in_parent(element.options); + element.attached = true; + + } + + } else { + + element.$element.stick_in_parent(element.options); + element.attached = true; + + } + +}; + +StickyKitInit.prototype.detach = function(element) { + + element.$element.trigger("sticky_kit:detach"); + element.attached = false; + }; module.exports = StickyKitInit; diff --git a/app/templates/pages/basicpage.html b/app/templates/pages/basicpage.html index d361c34f..24d805ab 100644 --- a/app/templates/pages/basicpage.html +++ b/app/templates/pages/basicpage.html @@ -28,7 +28,7 @@ {% block main %}
-
+
{% editable page.basicpage.title %}

{{ page.basicpage.title }}

{% endeditable %} @@ -36,10 +36,10 @@
-
+
{% page_menu "pages/menus/current_tree.html" %}
-
+
{% editable page.basicpage.content %} {{ page.basicpage.content|richtext_filters|safe }} {% endeditable %} diff --git a/app/templates/pages/menus/current_tree.html b/app/templates/pages/menus/current_tree.html index b1437256..244275c0 100644 --- a/app/templates/pages/menus/current_tree.html +++ b/app/templates/pages/menus/current_tree.html @@ -6,7 +6,7 @@ {% for page in page_branch %} {% if page.in_menu and page.has_children_in_menu %} {% if page.is_primary and page.is_current_or_ascendant %} -