website/content/javascripts/waypoints/noframeworkAdapter.js (175 lines of code) (raw):

//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 }()) ;