Code cleanup #120

Merged
BehindTheMath merged 13 commits from cleanup/misc-cleanup into master 2018-02-02 09:52:45 -05:00
15 changed files with 87 additions and 120 deletions
Showing only changes of commit 1eb43f73fe - Show all commits

View File

@@ -1,19 +1,14 @@
var clone = require("./lib/clone.js")
var executeScripts = require("./lib/execute-scripts.js")
var forEachEls = require("./lib/foreach-els.js")
var switches = require("./lib/switches")
var newUid = require("./lib/uniqueid.js")
var noop = require("./lib/util/noop")
var contains = require("./lib/util/contains.js")
var on = require("./lib/events/on.js")
// var off = require("./lib/events/on.js")
var trigger = require("./lib/events/trigger.js")
var defaultSwitches = require("./lib/switches")
var contains = require("./lib/util/contains.js")
var noop = require("./lib/util/noop")
var Pjax = function(options) {
this.state = {
@@ -22,7 +17,7 @@ var Pjax = function(options) {
options: null
}
var parseOptions = require("./lib/proto/parse-options.js");
var parseOptions = require("./lib/proto/parse-options.js")
parseOptions.call(this,options)
this.log("Pjax options", this.options)
@@ -40,7 +35,7 @@ var Pjax = function(options) {
opt.url = st.state.url
opt.title = st.state.title
opt.history = false
opt.requestOptions = {};
opt.requestOptions = {}
opt.scrollPos = st.state.scrollPos
if (st.state.uid < this.lastUid) {
opt.backward = true
@@ -56,7 +51,7 @@ var Pjax = function(options) {
}.bind(this))
}
Pjax.switches = defaultSwitches
Pjax.switches = switches
Pjax.prototype = {
log: require("./lib/proto/log.js"),
@@ -143,7 +138,7 @@ Pjax.prototype = {
// Abort any previous request
this.abortRequest(this.request)
trigger(document, "pjax:send", options);
trigger(document, "pjax:send", options)
// Do the request
options.requestOptions.timeout = this.options.timeout
@@ -217,7 +212,7 @@ Pjax.prototype = {
// http://www.w3.org/html/wg/drafts/html/master/forms.html
var autofocusEl = Array.prototype.slice.call(document.querySelectorAll("[autofocus]")).pop()
if (autofocusEl && document.activeElement !== autofocusEl) {
autofocusEl.focus();
autofocusEl.focus()
}
// execute scripts when DOM have been completely updated
@@ -285,7 +280,7 @@ Pjax.prototype = {
} while (target)
}
}
window.scrollTo(0, curtop);
window.scrollTo(0, curtop)
}
else if (state.options.scrollTo !== false) {
// Scroll page to top on new page load
@@ -309,7 +304,7 @@ Pjax.prototype = {
}
}
Pjax.isSupported = require("./lib/is-supported.js");
Pjax.isSupported = require("./lib/is-supported.js")
// arguably could do `if( require("./lib/is-supported.js")()) {` but that might be a little to simple
if (Pjax.isSupported()) {

View File

@@ -1,6 +1,8 @@
module.exports = function(el) {
// console.log("going to execute script", el)
var code = (el.text || el.textContent || el.innerHTML || "")
var src = (el.src || "");
var src = (el.src || "")
var parent = el.parentNode || document.querySelector("head") || document.documentElement
var script = document.createElement("script")
@@ -14,8 +16,8 @@ module.exports = function(el) {
script.type = "text/javascript"
if (src !== "") {
script.src = src;
script.async = false; // force synchronous loading of peripheral js
script.src = src
script.async = false // force asynchronous loading of peripheral js
}
if (code !== "") {
@@ -29,11 +31,11 @@ module.exports = function(el) {
}
// execute
parent.appendChild(script);
parent.appendChild(script)
// avoid pollution only in head or body tags
if (["head", "body"].indexOf(parent.tagName.toLowerCase()) > 0) {
parent.removeChild(script)
}
return true;
return true
}

View File

@@ -6,7 +6,7 @@ module.exports = function(el) {
// console.log("going to execute scripts for ", el)
if (el.tagName.toLowerCase() === "script") {
evalScript(el);
evalScript(el)
}
forEachEls(el.querySelectorAll("script"), function(script) {
@@ -14,7 +14,7 @@ module.exports = function(el) {
if (script.parentNode) {
script.parentNode.removeChild(script)
}
evalScript(script);
evalScript(script)
}
});
})
}

View File

@@ -8,7 +8,7 @@ var attrClick = "data-pjax-click-state"
var formAction = function(el, event) {
// Since loadUrl modifies options and we may add our own modifications below,
// clone it so the changes don't persist
var options = clone(this.options);
var options = clone(this.options)
// Initialize requestOptions
options.requestOptions = {
@@ -17,18 +17,18 @@ var formAction = function(el, event) {
}
// create a testable virtual link of the form action
var virtLinkElement = document.createElement("a");
virtLinkElement.setAttribute("href", options.requestOptions.requestUrl);
var virtLinkElement = document.createElement("a")
virtLinkElement.setAttribute("href", options.requestOptions.requestUrl)
// Ignore external links.
if (virtLinkElement.protocol !== window.location.protocol || virtLinkElement.host !== window.location.host) {
el.setAttribute(attrClick, "external");
el.setAttribute(attrClick, "external")
return
}
// Ignore click if we are on an anchor on the same page
if (virtLinkElement.pathname === window.location.pathname && virtLinkElement.hash.length > 0) {
el.setAttribute(attrClick, "anchor-present");
el.setAttribute(attrClick, "anchor-present")
return
}
@@ -40,41 +40,39 @@ var formAction = function(el, event) {
// if declared as a full reload, just normally submit the form
if (options.currentUrlFullReload) {
el.setAttribute(attrClick, "reload");
return;
el.setAttribute(attrClick, "reload")
return
}
event.preventDefault()
var paramObject = [];
var paramObject = []
for (var elementKey in el.elements) {
var element = el.elements[elementKey];
var element = el.elements[elementKey]
// jscs:disable disallowImplicitTypeConversion
if (!!element.name && element.attributes !== undefined && element.tagName.toLowerCase() !== "button") {
// jscs:enable disallowImplicitTypeConversion
if ((element.attributes.type !== "checkbox" && element.attributes.type !== "radio") || element.checked) {
paramObject.push({name: encodeURIComponent(element.name), value: encodeURIComponent(element.value)});
paramObject.push({name: encodeURIComponent(element.name), value: encodeURIComponent(element.value)})
}
}
}
// Creating a getString
var paramsString = (paramObject.map(function(value) {return value.name + "=" + value.value;})).join("&");
var paramsString = (paramObject.map(function(value) {return value.name + "=" + value.value})).join("&")
options.requestOptions.requestPayload = paramObject;
options.requestOptions.requestPayloadString = paramsString;
options.requestOptions.requestPayload = paramObject
options.requestOptions.requestPayloadString = paramsString
el.setAttribute(attrClick, "submit");
el.setAttribute(attrClick, "submit")
options.triggerElement = el;
this.loadUrl(virtLinkElement.href, options);
};
options.triggerElement = el
this.loadUrl(virtLinkElement.href, options)
}
var isDefaultPrevented = function(event) {
return event.defaultPrevented || event.returnValue === false;
};
return event.defaultPrevented || event.returnValue === false
}
module.exports = function(el) {
var that = this
@@ -92,7 +90,6 @@ module.exports = function(el) {
return
}
if (event.keyCode === 13) {
formAction.call(that, el, event)
}

View File

@@ -9,10 +9,10 @@ var attrKey = "data-pjax-keyup-state"
var linkAction = function(el, event) {
// Since loadUrl modifies options and we may add our own modifications below,
// clone it so the changes don't persist
var options = clone(this.options);
var options = clone(this.options)
// Initialize requestOptions since loadUrl expects it to be an object
options.requestOptions = {};
options.requestOptions = {}
// Dont break browser special behavior on links (like page in new window)
if (event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {
@@ -66,7 +66,7 @@ var linkAction = function(el, event) {
}
var isDefaultPrevented = function(event) {
return event.defaultPrevented || event.returnValue === false;
return event.defaultPrevented || event.returnValue === false
}
module.exports = function(el) {

View File

@@ -1,11 +1,11 @@
module.exports = function() {
if (this.options.debug && console) {
if (typeof console.log === "function") {
console.log.apply(console, arguments);
console.log.apply(console, arguments)
}
// ie is weird
else if (console.log) {
console.log(arguments);
console.log(arguments)
}
}
}

View File

@@ -19,7 +19,7 @@ module.exports = function(options) {
ga("send", "pageview", {page: location.pathname, title: document.title})
}
}
options.scrollTo = (typeof options.scrollTo === "undefined") ? 0 : options.scrollTo;
options.scrollTo = (typeof options.scrollTo === "undefined") ? 0 : options.scrollTo
options.scrollRestoration = (typeof options.scrollRestoration !== "undefined") ? options.scrollRestoration : true
options.cacheBust = (typeof options.cacheBust === "undefined") ? true : options.cacheBust
options.debug = options.debug || false

View File

@@ -1,7 +1,7 @@
module.exports = function(location, options, callback) {
options = options || {};
var requestMethod = options.requestMethod || "GET";
var requestPayload = options.requestPayloadString || null;
options = options || {}
var requestMethod = options.requestMethod || "GET"
var requestPayload = options.requestPayloadString || null
var request = new XMLHttpRequest()
request.onreadystatechange = function() {
@@ -37,7 +37,7 @@ module.exports = function(location, options, callback) {
// Add the request payload if available
if (options.requestPayloadString !== undefined && options.requestPayloadString !== "") {
// Send the proper header information along with the request
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
}
request.send(requestPayload)

View File

@@ -3,7 +3,7 @@ var forEachEls = require("./foreach-els")
var defaultSwitches = require("./switches")
module.exports = function(switches, switchesOptions, selectors, fromEl, toEl, options) {
var switchesQueue = [];
var switchesQueue = []
selectors.forEach(function(selector) {
var newEls = fromEl.querySelectorAll(selector)
@@ -12,12 +12,6 @@ module.exports = function(switches, switchesOptions, selectors, fromEl, toEl, op
this.log("Pjax switch", selector, newEls, oldEls)
}
if (newEls.length !== oldEls.length) {
// forEachEls(newEls, function(el) {
// this.log("newEl", el, el.outerHTML)
// }, this)
// forEachEls(oldEls, function(el) {
// this.log("oldEl", el, el.outerHTML)
// }, this)
throw "DOM doesnt look the same on new loaded page: " + selector + " - new " + newEls.length + ", old " + oldEls.length
}

View File

@@ -1,7 +1,4 @@
var on = require("./events/on.js")
// var off = require("./lib/events/on.js")
// var trigger = require("./lib/events/trigger.js")
module.exports = {
outerHTML: function(oldEl, newEl) {
@@ -20,7 +17,7 @@ module.exports = {
// Copy attributes from the new element to the old one
if (newEl.hasAttributes()) {
var attrs = newEl.attributes;
var attrs = newEl.attributes
for (var i = 0; i < attrs.length; i++) {
oldEl.attributes.setNamedItem(attrs[i].cloneNode())
}
@@ -34,9 +31,6 @@ module.exports = {
var elsToRemove = []
var elsToAdd = []
var fragToAppend = document.createDocumentFragment()
// height transition are shitty on safari
// so commented for now (until I found something ?)
// var relevantHeight = 0
var animationEventNames = "animationend webkitAnimationEnd MSAnimationEnd oanimationend"
var animatedElsNumber = 0
var sexyAnimationEnd = function(e) {
@@ -58,28 +52,16 @@ module.exports = {
elsToAdd.forEach(function(el) {
el.className = el.className.replace(el.getAttribute("data-pjax-classes"), "")
el.removeAttribute("data-pjax-classes")
// Pjax.off(el, animationEventNames, sexyAnimationEnd, true)
})
elsToAdd = null // free memory
elsToRemove = null // free memory
// assume the height is now useless (avoid bug since there is overflow hidden on the parent)
// oldEl.style.height = "auto"
// this is to trigger some repaint (example: picturefill)
this.onSwitch()
// Pjax.trigger(window, "scroll")
}
}.bind(this)
// Force height to be able to trigger css animation
// here we get the relevant height
// oldEl.parentNode.appendChild(newEl)
// relevantHeight = newEl.getBoundingClientRect().height
// oldEl.parentNode.removeChild(newEl)
// oldEl.style.height = oldEl.getBoundingClientRect().height + "px"
switchOptions = switchOptions || {}
forEach.call(oldEl.childNodes, function(el) {
@@ -123,7 +105,5 @@ module.exports = {
// pass all className of the parent
oldEl.className = newEl.className
oldEl.appendChild(fragToAppend)
// oldEl.style.height = relevantHeight + "px"
}
}

View File

@@ -7,8 +7,7 @@ var trigger = require("../../lib/events/trigger")
var el = document.createElement("div")
var el2 = document.createElement("span")
var els = [el, el2]
// var eventType2 = "resize"
// var eventsType = "click resize"
var classCb = function() {
this.className += "on"
}
@@ -92,14 +91,14 @@ tape("test events on/off/trigger for multiple elements, multiple events", functi
})
tape("test events on top level elements", function(t) {
var el = document;
var el = document
el.className = ""
on(el, "click", classCb)
trigger(el, "click")
t.equal(el.className, "on", "attached callback has been fired properly on document")
el = window;
el = window
el.className = ""
// With jsdom, the default this is global, not window, so we need to explicitly bind to window.

View File

@@ -91,5 +91,5 @@ tape("test options are not modified by attachForm", function(t) {
t.equal(1, Object.keys(options).length, "options object that is passed in should not be modified")
t.equal("bar", options.foo, "options object that is passed in should not be modified")
t.end();
t.end()
})

View File

@@ -79,7 +79,7 @@ tape("test attach link preventDefaulted events", function(t) {
tape("test options are not modified by attachLink", function(t) {
var a = document.createElement("a")
var options = {foo: "bar"}
var loadUrl = function() {};
var loadUrl = function() {}
attachLink.call({options: options, loadUrl: loadUrl}, a)
@@ -90,5 +90,5 @@ tape("test options are not modified by attachLink", function(t) {
t.equal(1, Object.keys(options).length, "options object that is passed in should not be modified")
t.equal("bar", options.foo, "options object that is passed in should not be modified")
t.end();
t.end()
})

View File

@@ -3,46 +3,46 @@ var tape = require("tape")
var parseOptions = require("../../../lib/proto/parse-options.js")
tape("test parse initalization options function", function(t) {
t.test("- default options", function(t) {
var pjax = {};
parseOptions.call(pjax, {});
var pjax = {}
parseOptions.call(pjax, {})
t.equal(pjax.options.elements, "a[href], form[action]");
t.equal(pjax.options.selectors.length, 2, "selectors length");
t.equal(pjax.options.selectors[0], "title");
t.equal(pjax.options.selectors[1], ".js-Pjax");
t.equal(pjax.options.elements, "a[href], form[action]")
t.equal(pjax.options.selectors.length, 2, "selectors length")
t.equal(pjax.options.selectors[0], "title")
t.equal(pjax.options.selectors[1], ".js-Pjax")
t.equal(typeof pjax.options.switches, "object");
t.equal(Object.keys(pjax.options.switches).length, 2);// head and body
t.equal(typeof pjax.options.switches, "object")
t.equal(Object.keys(pjax.options.switches).length, 2)// head and body
t.equal(typeof pjax.options.switchesOptions, "object");
t.equal(Object.keys(pjax.options.switchesOptions).length, 0);
t.equal(typeof pjax.options.switchesOptions, "object")
t.equal(Object.keys(pjax.options.switchesOptions).length, 0)
t.equal(pjax.options.history, true);
t.equal(typeof pjax.options.analytics, "function");
t.equal(pjax.options.scrollTo, 0);
t.equal(pjax.options.scrollRestoration, true);
t.equal(pjax.options.cacheBust, true);
t.equal(pjax.options.debug, false);
t.end();
});
t.equal(pjax.options.history, true)
t.equal(typeof pjax.options.analytics, "function")
t.equal(pjax.options.scrollTo, 0)
t.equal(pjax.options.scrollRestoration, true)
t.equal(pjax.options.cacheBust, true)
t.equal(pjax.options.debug, false)
t.end()
})
// verify analytics always ends up as a function even when passed not a function
t.test("- analytics is a function", function(t) {
var pjax = {};
parseOptions.call(pjax, {analytics: "some string"});
var pjax = {}
parseOptions.call(pjax, {analytics: "some string"})
t.deepEqual(typeof pjax.options.analytics, "function");
t.end();
});
t.deepEqual(typeof pjax.options.analytics, "function")
t.end()
})
// verify that the value false for scrollTo is not squashed
t.test("- scrollTo remains false", function(t) {
var pjax = {};
parseOptions.call(pjax, {scrollTo: false});
var pjax = {}
parseOptions.call(pjax, {scrollTo: false})
t.deepEqual(pjax.options.scrollTo, false);
t.end();
});
t.deepEqual(pjax.options.scrollTo, false)
t.end()
})
t.end()
})

View File

@@ -22,7 +22,7 @@ tape("test xhr request", function(t) {
options: {
cacheBust: true
}
});
})
var r = requestCacheBust(url, {}, function(result) {
t.equal(r.responseURL.indexOf("?"), url.length, "XHR URL is cache-busted when configured to be")
try {
@@ -40,7 +40,7 @@ tape("test xhr request", function(t) {
options: {
cacheBust: false
}
});
})
var r = requestNoCacheBust(url, {}, function() {
t.equal(r.responseURL, url, "XHR URL is left untouched")
t.end()