170 lines
5.5 KiB
JavaScript
170 lines
5.5 KiB
JavaScript
;(function(window) {
|
|
'use strict';
|
|
|
|
/** The base path of the lodash builds. */
|
|
var basePath = '../';
|
|
|
|
/** The lodash build to load. */
|
|
var build = (build = /build=([^&]+)/.exec(location.search)) && decodeURIComponent(build[1]);
|
|
|
|
/** The module loader to use. */
|
|
var loader = (loader = /loader=([^&]+)/.exec(location.search)) && decodeURIComponent(loader[1]);
|
|
|
|
/** The `ui` object. */
|
|
var ui = {};
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* Registers an event listener on an element.
|
|
*
|
|
* @private
|
|
* @param {Element} element The element.
|
|
* @param {string} eventName The name of the event.
|
|
* @param {Function} handler The event handler.
|
|
* @returns {Element} The element.
|
|
*/
|
|
function addListener(element, eventName, handler) {
|
|
if (typeof element.addEventListener != 'undefined') {
|
|
element.addEventListener(eventName, handler, false);
|
|
} else if (typeof element.attachEvent != 'undefined') {
|
|
element.attachEvent('on' + eventName, handler);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
// Initialize controls.
|
|
addListener(window, 'load', function() {
|
|
function eventHandler(event) {
|
|
var buildIndex = buildList.selectedIndex,
|
|
loaderIndex = loaderList.selectedIndex,
|
|
search = location.search.replace(/^\?|&?(?:build|loader)=[^&]*&?/g, '');
|
|
|
|
if (event.stopPropagation) {
|
|
event.stopPropagation();
|
|
} else {
|
|
event.cancelBubble = true;
|
|
}
|
|
location.href =
|
|
location.href.split('?')[0] + '?' +
|
|
(search ? search + '&' : '') +
|
|
'build=' + (buildIndex < 0 ? build : buildList[buildIndex].value) + '&' +
|
|
'loader=' + (loaderIndex < 0 ? loader : loaderList[loaderIndex].value);
|
|
}
|
|
|
|
function init() {
|
|
var toolbar = document.getElementById('qunit-testrunner-toolbar');
|
|
if (!toolbar) {
|
|
setTimeout(init, 15);
|
|
return;
|
|
}
|
|
toolbar.appendChild(span1);
|
|
toolbar.appendChild(span2);
|
|
|
|
buildList.selectedIndex = (function() {
|
|
switch (build) {
|
|
case 'lodash': return 1;
|
|
case 'lodash-core-dev': return 2;
|
|
case 'lodash-core': return 3;
|
|
case 'lodash-dev':
|
|
case null: return 0;
|
|
}
|
|
return -1;
|
|
}());
|
|
|
|
loaderList.selectedIndex = (function() {
|
|
switch (loader) {
|
|
case 'curl': return 1;
|
|
case 'dojo': return 2;
|
|
case 'requirejs': return 3;
|
|
case 'none':
|
|
case null: return 0;
|
|
}
|
|
return -1;
|
|
}());
|
|
|
|
addListener(buildList, 'change', eventHandler);
|
|
addListener(loaderList, 'change', eventHandler);
|
|
}
|
|
|
|
var span1 = document.createElement('span');
|
|
span1.style.cssText = 'float:right';
|
|
span1.innerHTML =
|
|
'<label for="qunit-build">Build: </label>' +
|
|
'<select id="qunit-build">' +
|
|
'<option value="lodash-dev">lodash (development)</option>' +
|
|
'<option value="lodash">lodash (production)</option>' +
|
|
'<option value="lodash-core-dev">lodash-core (development)</option>' +
|
|
'<option value="lodash-core">lodash-core (production)</option>' +
|
|
'</select>';
|
|
|
|
var span2 = document.createElement('span');
|
|
span2.style.cssText = 'float:right';
|
|
span2.innerHTML =
|
|
'<label for="qunit-loader">Loader: </label>' +
|
|
'<select id="qunit-loader">' +
|
|
'<option value="none">None</option>' +
|
|
'<option value="curl">Curl</option>' +
|
|
'<option value="dojo">Dojo</option>' +
|
|
'<option value="requirejs">RequireJS</option>' +
|
|
'</select>';
|
|
|
|
var buildList = span1.lastChild,
|
|
loaderList = span2.lastChild;
|
|
|
|
setTimeout(function() {
|
|
ui.timing.loadEventEnd = +new Date;
|
|
}, 1);
|
|
|
|
init();
|
|
});
|
|
|
|
// The lodash build file path.
|
|
ui.buildPath = (function() {
|
|
var result;
|
|
switch (build) {
|
|
case 'lodash': result = 'dist/lodash.min.js'; break;
|
|
case 'lodash-core-dev': result = 'dist/lodash.core.js'; break;
|
|
case 'lodash-core': result = 'dist/lodash.core.min.js'; break;
|
|
case null: build = 'lodash-dev';
|
|
case 'lodash-dev': result = 'lodash.js'; break;
|
|
default: return build;
|
|
}
|
|
return basePath + result;
|
|
}());
|
|
|
|
// The module loader file path.
|
|
ui.loaderPath = (function() {
|
|
var result;
|
|
switch (loader) {
|
|
case 'curl': result = 'node_modules/curl-amd/dist/curl-kitchen-sink/curl.js'; break;
|
|
case 'dojo': result = 'node_modules/dojo/dojo.js'; break;
|
|
case 'requirejs': result = 'node_modules/requirejs/require.js'; break;
|
|
case null: loader = 'none'; return '';
|
|
default: return loader;
|
|
}
|
|
return basePath + result;
|
|
}());
|
|
|
|
// Used to indicate testing a core build.
|
|
ui.isCore = /\bcore(\.min)?\.js\b/.test(ui.buildPath);
|
|
|
|
// Used to indicate testing a foreign file.
|
|
ui.isForeign = RegExp('^(\\w+:)?//').test(build);
|
|
|
|
// Used to indicate testing a modularized build.
|
|
ui.isModularize = /\b(?:amd|commonjs|es|node|npm|(index|main)\.js)\b/.test([location.pathname, location.search]);
|
|
|
|
// Used to indicate testing in Sauce Labs' automated test cloud.
|
|
ui.isSauceLabs = location.port == '9001';
|
|
|
|
// Used to indicate that lodash is in strict mode.
|
|
ui.isStrict = /\bes\b/.test([location.pathname, location.search]);
|
|
|
|
ui.urlParams = { 'build': build, 'loader': loader };
|
|
ui.timing = { 'loadEventEnd': 0 };
|
|
|
|
window.ui = ui;
|
|
|
|
}(this));
|