| //Licensed to the Apache Software Foundation (ASF) under one or more |
| //contributor license agreements. See the NOTICE file distributed with |
| //this work for additional information regarding copyright ownership. |
| //The ASF licenses this file to You under the Apache License, Version 2.0 |
| //(the "License"); you may not use this file except in compliance with |
| //the License. You may obtain a copy of the License at |
| // |
| //http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| //Unless required by applicable law or agreed to in writing, software |
| //distributed under the License is distributed on an "AS IS" BASIS, |
| //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| //express or implied. See the License for the specific language governing |
| //permissions and limitations under the License. |
| |
| (function() { |
| 'use strict' |
| |
| var Waypoint = window.Waypoint; |
| var adapter = Waypoint.Adapter; |
| |
| /* http://imakewebthings.com/waypoints/shortcuts/sticky-elements */ |
| function Sticky(options) { |
| this.options = adapter.extend({}, Waypoint.defaults, Sticky.defaults, options) |
| this.element = this.options.element |
| this.$element = new adapter(this.element) |
| this.createWrapper() |
| this.createWaypoint() |
| } |
| |
| /* Private */ |
| Sticky.prototype.createWaypoint = function() { |
| var originalHandler = this.options.handler |
| |
| this.waypoint = new Waypoint(adapter.extend({}, this.options, { |
| element: this.wrapper, |
| handler: adapter.proxy(function(direction) { |
| var shouldBeStuck = this.options.direction.indexOf(direction) > -1 |
| var wrapperHeight = shouldBeStuck ? this.$element.outerHeight(true) : '' |
| |
| this.$wrapper.height(wrapperHeight) |
| this.$element.toggleClass(this.options.stuckClass, shouldBeStuck) |
| |
| if (originalHandler) { |
| originalHandler.call(this, direction) |
| } |
| }, this) |
| })) |
| } |
| |
| /* Private */ |
| Sticky.prototype.createWrapper = function() { |
| if (this.options.wrapper) { |
| this.$element.wrap(this.options.wrapper) |
| } |
| this.$wrapper = this.$element.parent() |
| this.wrapper = this.$wrapper.element |
| } |
| |
| /* Public */ |
| Sticky.prototype.destroy = function() { |
| if (this.$element.parent().element === this.wrapper) { |
| this.waypoint.destroy() |
| this.$element.removeClass(this.options.stuckClass) |
| if (this.options.wrapper) { |
| this.$element.unwrap() |
| } |
| } |
| } |
| |
| Sticky.defaults = { |
| wrapper: '<div class="sticky-wrapper" />', |
| stuckClass: 'stuck', |
| direction: 'down right' |
| } |
| |
| Waypoint.Sticky = Sticky |
| }()) |