Files
lodash/perf/perf-ui.js
John-David Dalton 0b8f1a9a58 Add build dropdown to perf/index.html. [ci skip]
Former-commit-id: 669acae55ee53819fe4155aa0020cd40db7d6843
2012-10-14 22:18:53 -07:00

129 lines
4.2 KiB
JavaScript

;(function(window) {
'use strict';
/** The Lo-Dash build to load */
var build = (/build=([^&]+)/.exec(location.search) || [])[1];
/** The other library to load */
var other = (/other=([^&]+)/.exec(location.search) || [])[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);
}
}
/*--------------------------------------------------------------------------*/
ui.buildName = (function() {
switch (build) {
case 'lodash-dev': return 'lodash';
case 'lodash-custom': return 'lodash.custom.min';
case 'lodash-custom-debug': return 'lodash.custom';
}
return 'lodash.min';
}());
ui.otherName = (function() {
switch (other) {
case 'lodash-dev': return 'lodash';
case 'lodash-prod': return 'lodash.min';
case 'lodash-custom': return 'lodash.custom.min';
case 'lodash-custom-debug': return 'lodash.custom';
case 'underscore-dev': return 'vendor/underscore/underscore';
}
return 'vendor/underscore/underscore-min';
}());
// initialize dropdowns
addListener(window, 'load', function() {
function eventHandler(event) {
var search = location.search.replace(/^\?|&?(?:build|other)=[^&]*&?/g, '');
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
location.href =
location.href.split('?')[0] + '?' +
(search ? search + '&' : '') +
'build=' + buildList[buildList.selectedIndex].value + '&' +
'other=' + otherList[otherList.selectedIndex].value;
}
var span1 = document.createElement('span');
span1.style.cssText = 'float:right';
span1.innerHTML =
'<label for="perf-build">Build: </label>' +
'<select id="perf-build">' +
'<option value="lodash-dev">Lo-Dash</option>' +
'<option value="lodash-prod">Lo-Dash (minified)</option>' +
'<option value="lodash-custom">Lo-Dash (custom)</option>' +
'<option value="lodash-custom-debug">Custom (debug)</option>' +
'</select>';
var span2 = document.createElement('span');
span2.style.cssText = 'float:right';
span2.innerHTML =
'<label for="perf-other">Other Library: </label>' +
'<select id="perf-other">' +
'<option value="underscore-dev">Underscore</option>' +
'<option value="underscore-prod">Underscore (minified)</option>' +
'<option value="lodash-dev">Lo-Dash</option>' +
'<option value="lodash-prod">Lo-Dash (minified)</option>' +
'<option value="lodash-custom">Lo-Dash (custom)</option>' +
'<option value="lodash-custom-debug">Lo-Dash (custom debug)</option>' +
'</select>';
var buildList = span1.lastChild,
otherList = span2.lastChild,
toolbar = document.getElementById('perf-toolbar');
toolbar.appendChild(span2);
toolbar.appendChild(span1);
buildList.selectedIndex = (function() {
switch (build) {
case 'lodash-dev': return 0;
case 'lodash-custom': return 2;
case 'lodash-custom-debug': return 3;
}
return 1;
}());
otherList.selectedIndex = (function() {
switch (other) {
case 'underscore-dev': return 0;
case 'lodash-dev': return 2;
case 'lodash-prod': return 3;
case 'lodash-custom': return 4;
case 'lodash-custom-debug': return 5;
}
return 1;
}());
addListener(buildList, 'change', eventHandler);
addListener(otherList, 'change', eventHandler);
});
// expose `ui`
window.ui = ui;
}(this));