| //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 |
| |
| function isWindow(element) { |
| return element === element.window |
| } |
| |
| function getWindow(element) { |
| if (isWindow(element)) { |
| return element |
| } |
| return element.defaultView |
| } |
| |
| function classNameRegExp(className) { |
| return new RegExp("\\b" + className + "\\b"); |
| } |
| |
| function NoFrameworkAdapter(element) { |
| this.element = element |
| this.handlers = {} |
| } |
| |
| NoFrameworkAdapter.prototype.innerHeight = function() { |
| var isWin = isWindow(this.element) |
| return isWin ? this.element.innerHeight : this.element.clientHeight |
| } |
| |
| NoFrameworkAdapter.prototype.innerWidth = function() { |
| var isWin = isWindow(this.element) |
| return isWin ? this.element.innerWidth : this.element.clientWidth |
| } |
| |
| NoFrameworkAdapter.prototype.off = function(event, handler) { |
| function removeListeners(element, listeners, handler) { |
| for (var i = 0, end = listeners.length - 1; i < end; i++) { |
| var listener = listeners[i] |
| if (!handler || handler === listener) { |
| element.removeEventListener(listener) |
| } |
| } |
| } |
| |
| var eventParts = event.split('.') |
| var eventType = eventParts[0] |
| var namespace = eventParts[1] |
| var element = this.element |
| |
| if (namespace && this.handlers[namespace] && eventType) { |
| removeListeners(element, this.handlers[namespace][eventType], handler) |
| this.handlers[namespace][eventType] = [] |
| } |
| else if (eventType) { |
| for (var ns in this.handlers) { |
| removeListeners(element, this.handlers[ns][eventType] || [], handler) |
| this.handlers[ns][eventType] = [] |
| } |
| } |
| else if (namespace && this.handlers[namespace]) { |
| for (var type in this.handlers[namespace]) { |
| removeListeners(element, this.handlers[namespace][type], handler) |
| } |
| this.handlers[namespace] = {} |
| } |
| } |
| |
| /* Adapted from jQuery 1.x offset() */ |
| NoFrameworkAdapter.prototype.offset = function() { |
| if (!this.element.ownerDocument) { |
| return null |
| } |
| |
| var documentElement = this.element.ownerDocument.documentElement |
| var win = getWindow(this.element.ownerDocument) |
| var rect = { |
| top: 0, |
| left: 0 |
| } |
| |
| if (this.element.getBoundingClientRect) { |
| rect = this.element.getBoundingClientRect() |
| } |
| |
| return { |
| top: rect.top + win.pageYOffset - documentElement.clientTop, |
| left: rect.left + win.pageXOffset - documentElement.clientLeft |
| } |
| } |
| |
| NoFrameworkAdapter.prototype.on = function(event, handler) { |
| var eventParts = event.split('.') |
| var eventType = eventParts[0] |
| var namespace = eventParts[1] || '__default' |
| var nsHandlers = this.handlers[namespace] = this.handlers[namespace] || {} |
| var nsTypeList = nsHandlers[eventType] = nsHandlers[eventType] || [] |
| |
| nsTypeList.push(handler) |
| this.element.addEventListener(eventType, handler) |
| } |
| |
| NoFrameworkAdapter.prototype.outerHeight = function(includeMargin) { |
| var height = this.innerHeight() |
| var computedStyle |
| |
| if (includeMargin && !isWindow(this.element)) { |
| computedStyle = window.getComputedStyle(this.element) |
| height += parseInt(computedStyle.marginTop, 10) |
| height += parseInt(computedStyle.marginBottom, 10) |
| } |
| |
| return height |
| } |
| |
| NoFrameworkAdapter.prototype.outerWidth = function(includeMargin) { |
| var width = this.innerWidth() |
| var computedStyle |
| |
| if (includeMargin && !isWindow(this.element)) { |
| computedStyle = window.getComputedStyle(this.element) |
| width += parseInt(computedStyle.marginLeft, 10) |
| width += parseInt(computedStyle.marginRight, 10) |
| } |
| |
| return width |
| } |
| |
| NoFrameworkAdapter.prototype.scrollLeft = function() { |
| var win = getWindow(this.element) |
| return win ? win.pageXOffset : this.element.scrollLeft |
| } |
| |
| NoFrameworkAdapter.prototype.scrollTop = function() { |
| var win = getWindow(this.element) |
| return win ? win.pageYOffset : this.element.scrollTop |
| } |
| |
| NoFrameworkAdapter.prototype.height = function(newHeight) { |
| this.element.style.height = newHeight; |
| } |
| |
| NoFrameworkAdapter.prototype.removeClass = function(className) { |
| this.element.className = this.element.className.replace(classNameRegExp(className), ''); |
| } |
| |
| NoFrameworkAdapter.prototype.toggleClass = function(className, addClass) { |
| var check = classNameRegExp(className); |
| if (check.test(this.element.className)) { |
| if (!addClass) { |
| this.removeClass(className); |
| } |
| } else { |
| this.element.className += ' ' + className; |
| } |
| } |
| |
| NoFrameworkAdapter.prototype.parent = function() { |
| return new NoFrameworkAdapter(this.element.parentNode); |
| } |
| |
| NoFrameworkAdapter.prototype.wrap = function(wrapper) { |
| this.element.insertAdjacentHTML('beforebegin', wrapper) |
| var wrapperNode = this.element.previousSibling |
| this.element.parentNode.removeChild(this.element) |
| wrapperNode.appendChild(this.element) |
| } |
| |
| NoFrameworkAdapter.extend = function() { |
| var args = Array.prototype.slice.call(arguments) |
| |
| function merge(target, obj) { |
| if (typeof target === 'object' && typeof obj === 'object') { |
| for (var key in obj) { |
| if (obj.hasOwnProperty(key)) { |
| target[key] = obj[key] |
| } |
| } |
| } |
| |
| return target |
| } |
| |
| for (var i = 1, end = args.length; i < end; i++) { |
| merge(args[0], args[i]) |
| } |
| return args[0] |
| } |
| |
| NoFrameworkAdapter.inArray = function(element, array, i) { |
| return array == null ? -1 : array.indexOf(element, i) |
| } |
| |
| NoFrameworkAdapter.isEmptyObject = function(obj) { |
| /* eslint no-unused-vars: 0 */ |
| for (var name in obj) { |
| return false |
| } |
| return true |
| } |
| |
| NoFrameworkAdapter.proxy = function(func, obj) { |
| return function() { |
| return func.apply(obj, arguments); |
| } |
| } |
| |
| Waypoint.adapters.push({ |
| name: 'noframework', |
| Adapter: NoFrameworkAdapter |
| }) |
| Waypoint.Adapter = NoFrameworkAdapter |
| }()) |