diff --git a/.eslintignore b/.eslintignore
index 2c66a52c4..a6652bbee 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -3,3 +3,8 @@ config.js
diff.js
diverged.js
divergedWorker.js
+**/examples/**
+**/old_splash_page_v2.0/**
+**/dist/**
+**/angular.min.js
+**/js/vendor/**
diff --git a/capture/backstopTools.js b/capture/backstopTools.js
index 97b0eb74d..84ee6f278 100644
--- a/capture/backstopTools.js
+++ b/capture/backstopTools.js
@@ -13,7 +13,7 @@ module.exports = (target) => {
if (typeof window._backstopTools._consoleLogger !== 'string') {
window._backstopTools._consoleLogger = '';
}
- var log = window.console.log.bind(console);
+ const log = window.console.log.bind(console);
window.console.log = function () {
window._backstopTools._consoleLogger += Array.from(arguments).join('\n');
log.apply(this, arguments);
@@ -38,14 +38,14 @@ module.exports = (target) => {
if (selector === 'document') {
return acc.concat(['document']);
}
- var qResult = document.querySelectorAll(selector);
+ const qResult = document.querySelectorAll(selector);
// pass-through any selectors that don't match any DOM elements
if (!qResult.length) {
return acc.concat(selector);
}
- var expandedSelector = [].slice.call(qResult)
+ const expandedSelector = [].slice.call(qResult)
.map(function (element, expandedIndex) {
if (element.classList.contains('__86d')) {
return '';
@@ -56,7 +56,7 @@ module.exports = (target) => {
return selector;
}
// create index partial
- var indexPartial = '__n' + expandedIndex;
+ const indexPartial = '__n' + expandedIndex;
// update all matching selectors with additional indexPartial class
element.classList.add(indexPartial);
// return array of fully-qualified classnames
diff --git a/cli/index.js b/cli/index.js
index 50763fe94..04a5902e3 100755
--- a/cli/index.js
+++ b/cli/index.js
@@ -1,14 +1,14 @@
#!/usr/bin/env node
-var parseArgs = require('minimist');
-var usage = require('./usage');
-var version = require('../package.json').version;
-var runner = require('../core/runner');
+const parseArgs = require('minimist');
+const usage = require('./usage');
+const version = require('../package.json').version;
+const runner = require('../core/runner');
main();
function main () {
- var argsOptions = parseArgs(process.argv.slice(2), {
+ const argsOptions = parseArgs(process.argv.slice(2), {
boolean: ['h', 'help', 'v', 'version', 'i', 'docker'],
string: ['config'],
default: {
@@ -31,7 +31,7 @@ function main () {
return;
}
- var commandName = argsOptions['_'][0];
+ const commandName = argsOptions['_'][0];
if (!commandName) {
console.log(usage);
diff --git a/cli/usage.js b/cli/usage.js
index e4363beba..b4a73fc7f 100644
--- a/cli/usage.js
+++ b/cli/usage.js
@@ -1,7 +1,7 @@
-var version = require('../package.json').version;
-var makeSpaces = require('../core/util/makeSpaces');
+const version = require('../package.json').version;
+const makeSpaces = require('../core/util/makeSpaces');
-var commandsDescription = {
+const commandsDescription = {
test: 'Create test screenshots and compare against the set you previously approved/referenced.',
approve: 'Promotes all test bitmaps from last test run to reference bitmaps.',
reference: 'Creates new reference screenshots. Deletes all existing reference files.',
@@ -10,7 +10,7 @@ var commandsDescription = {
openReport: 'View the last test report in your browser.'
};
-var optionsDescription = {
+const optionsDescription = {
'--config': 'Path to config file name',
'--filter': 'A RegEx string used to filter by scenario labels when running "test", "reference", or "approve" commands',
'-h, --help': 'Display usage',
@@ -26,12 +26,8 @@ function makeDescription (descriptions) {
.join('\n');
}
-function spacesBetweenCommandAndDescription (commandName) {
- return makeSpaces(2 + leftPaddingOfDescription - commandName.length);
-}
-
// Number of spaces to echo before writing description
-var leftPaddingOfDescription = Object.keys(commandsDescription)
+const leftPaddingOfDescription = Object.keys(commandsDescription)
.concat(Object.keys(optionsDescription))
.map(function (string) {
return string.length;
@@ -40,7 +36,11 @@ var leftPaddingOfDescription = Object.keys(commandsDescription)
return Math.max(max, length);
}, 0);
-var usage = '\
+function spacesBetweenCommandAndDescription (commandName) {
+ return makeSpaces(2 + leftPaddingOfDescription - commandName.length);
+}
+
+const usage = '\
Welcome to BackstopJS ' + version + ' CLI\n\
\n\
Commands:\n\
diff --git a/core/command/approve.js b/core/command/approve.js
index 116597b7a..3eba8241f 100644
--- a/core/command/approve.js
+++ b/core/command/approve.js
@@ -1,9 +1,9 @@
-var fs = require('../util/fs');
-var path = require('path');
-var map = require('p-map');
+const fs = require('../util/fs');
+const path = require('path');
+const map = require('p-map');
-var FAILED_DIFF_RE = /^failed_diff_/;
-var FILTER_DEFAULT = /\w+/;
+const FAILED_DIFF_RE = /^failed_diff_/;
+const FILTER_DEFAULT = /\w+/;
// This task will copy ALL test bitmap files (from the most recent test directory) to the reference directory overwriting any existing files.
module.exports = {
@@ -16,7 +16,7 @@ module.exports = {
console.log(err.stack);
reject(err);
}
- var src = path.join(config.bitmaps_test, list[list.length - 1]);
+ const src = path.join(config.bitmaps_test, list[list.length - 1]);
return fs.readdir(src, (err, files) => {
if (err) {
console.log(err.stack);
diff --git a/core/command/index.js b/core/command/index.js
index 53a5528e8..4ae8ad600 100644
--- a/core/command/index.js
+++ b/core/command/index.js
@@ -1,5 +1,5 @@
-var path = require('path');
-var logger = require('../util/logger')('COMMAND');
+const path = require('path');
+const logger = require('../util/logger')('COMMAND');
/*
* Each file included in this folder (except `index.js`) is a command and must export the following object
@@ -11,7 +11,7 @@ var logger = require('../util/logger')('COMMAND');
*/
/* Each and every command defined, including commands used in before/after */
-var commandNames = [
+const commandNames = [
'init',
'remote',
'openReport',
@@ -24,7 +24,7 @@ var commandNames = [
];
/* Commands that are only exposed to higher levels */
-var exposedCommandNames = [
+const exposedCommandNames = [
'init',
'remote',
'reference',
@@ -41,7 +41,7 @@ function toObjectReducer (object, command) {
return object;
}
-var commands = commandNames
+const commands = commandNames
.map(function requireCommand (commandName) {
return {
name: commandName,
@@ -55,7 +55,7 @@ var commands = commandNames
config.perf[command.name] = { started: new Date() };
logger.info('Executing core for "' + command.name + '"');
- var promise = command.commandDefinition.execute(config);
+ let promise = command.commandDefinition.execute(config);
// If the command didn't return a promise, assume it resolved already
if (!promise) {
@@ -66,7 +66,7 @@ var commands = commandNames
// Do the catch separately or the main runner
// won't be able to catch it a second time
promise.catch(function (error) {
- var perf = (new Date() - config.perf[command.name].started) / 1000;
+ const perf = (new Date() - config.perf[command.name].started) / 1000;
logger.error('Command "' + command.name + '" ended with an error after [' + perf + 's]');
logger.error(error);
});
@@ -75,7 +75,7 @@ var commands = commandNames
if (/openReport/.test(command.name)) {
return;
}
- var perf = (new Date() - config.perf[command.name].started) / 1000;
+ const perf = (new Date() - config.perf[command.name].started) / 1000;
logger.success('Command "' + command.name + '" successfully executed in [' + perf + 's]');
return result;
});
@@ -84,7 +84,7 @@ var commands = commandNames
})
.reduce(toObjectReducer, {});
-var exposedCommands = exposedCommandNames
+const exposedCommands = exposedCommandNames
.filter(function commandIsDefined (commandName) {
return commands.hasOwnProperty(commandName);
})
diff --git a/core/command/init.js b/core/command/init.js
index 543f9abad..3b8fc775a 100644
--- a/core/command/init.js
+++ b/core/command/init.js
@@ -1,12 +1,12 @@
-var fs = require('../util/fs');
-var logger = require('../util/logger')('init');
+const fs = require('../util/fs');
+const logger = require('../util/logger')('init');
/**
* Copies a boilerplate config file to the current config file location.
*/
module.exports = {
execute: function init (config) {
- var promises = [];
+ const promises = [];
if (config.engine_scripts) {
logger.log("Copying '" + config.engine_scripts_default + "' to '" + config.engine_scripts + "'");
promises.push(fs.copy(config.engine_scripts_default, config.engine_scripts));
diff --git a/core/command/reference.js b/core/command/reference.js
index 29af4fb32..8a68c1770 100644
--- a/core/command/reference.js
+++ b/core/command/reference.js
@@ -9,7 +9,7 @@ module.exports = {
if (shouldRunDocker(config)) {
return runDocker(config, 'reference');
} else {
- var firstStep;
+ let firstStep;
// do not remove reference directory if we are in incremental mode
if (config.args.filter || config.args.i) {
firstStep = Promise.resolve();
diff --git a/core/command/report.js b/core/command/report.js
index 291c00625..8b3b35b33 100644
--- a/core/command/report.js
+++ b/core/command/report.js
@@ -1,14 +1,14 @@
-var path = require('path');
-var chalk = require('chalk');
-var cloneDeep = require('lodash/cloneDeep');
+const path = require('path');
+const chalk = require('chalk');
+const cloneDeep = require('lodash/cloneDeep');
-var allSettled = require('../util/allSettled');
-var fs = require('../util/fs');
-var logger = require('../util/logger')('report');
-var compare = require('../util/compare/');
+const allSettled = require('../util/allSettled');
+const fs = require('../util/fs');
+const logger = require('../util/logger')('report');
+const compare = require('../util/compare/');
function writeReport (config, reporter) {
- var promises = [];
+ const promises = [];
if (config.report && config.report.indexOf('CI') > -1 && config.ciReport.format === 'junit') {
promises.push(writeJunitReport(config, reporter));
@@ -24,14 +24,15 @@ function writeReport (config, reporter) {
}
function writeBrowserReport (config, reporter) {
- var testConfig;
+ let testConfig;
if (typeof config.args.config === 'object') {
testConfig = config.args.config;
} else {
testConfig = Object.assign({}, require(config.backstopConfigFileName));
}
- var browserReporter = cloneDeep(reporter);
+ let browserReporter = cloneDeep(reporter);
+
function toAbsolute (p) {
return (path.isAbsolute(p)) ? p : path.join(config.projectPath, p);
}
@@ -41,10 +42,10 @@ function writeBrowserReport (config, reporter) {
logger.log('Resources copied');
// Fixing URLs in the configuration
- var report = toAbsolute(config.html_report);
- for (var i in browserReporter.tests) {
+ const report = toAbsolute(config.html_report);
+ for (let i in browserReporter.tests) {
if (browserReporter.tests.hasOwnProperty(i)) {
- var pair = browserReporter.tests[i].pair;
+ const pair = browserReporter.tests[i].pair;
pair.reference = path.relative(report, toAbsolute(pair.reference));
pair.test = path.relative(report, toAbsolute(pair.test));
@@ -54,14 +55,14 @@ function writeBrowserReport (config, reporter) {
}
}
- var reportConfigFilename = toAbsolute(config.compareConfigFileName);
- var testReportJsonName = toAbsolute(config.bitmaps_test + '/' + config.screenshotDateTime + '/report.json');
+ const reportConfigFilename = toAbsolute(config.compareConfigFileName);
+ const testReportJsonName = toAbsolute(config.bitmaps_test + '/' + config.screenshotDateTime + '/report.json');
// if this is a dynamic test then we assume browserReporter has one scenario. This scenario will be appended to any existing report.
if (testConfig.dynamicTestId) {
try {
console.log('Attempting to open: ', testReportJsonName);
- var testReportJson = require(testReportJsonName);
+ const testReportJson = require(testReportJsonName);
testReportJson.tests = testReportJson.tests.filter(test => test.pair.fileName !== browserReporter.tests[0].pair.fileName);
testReportJson.tests.push(browserReporter.tests[0]);
browserReporter = testReportJson;
@@ -70,17 +71,17 @@ function writeBrowserReport (config, reporter) {
}
}
- var jsonReport = JSON.stringify(browserReporter, null, 2);
- var jsonpReport = `report(${jsonReport});`;
+ const jsonReport = JSON.stringify(browserReporter, null, 2);
+ const jsonpReport = `report(${jsonReport});`;
- var jsonConfgWrite = fs.writeFile(testReportJsonName, jsonReport).then(function () {
+ const jsonConfgWrite = fs.writeFile(testReportJsonName, jsonReport).then(function () {
logger.log('Copied json report to: ' + testReportJsonName);
}, function (err) {
logger.error('Failed json report copy to: ' + testReportJsonName);
throw err;
});
- var jsonpConfgWrite = fs.writeFile(toAbsolute(reportConfigFilename), jsonpReport).then(function () {
+ const jsonpConfgWrite = fs.writeFile(toAbsolute(reportConfigFilename), jsonpReport).then(function () {
logger.log('Copied jsonp report to: ' + reportConfigFilename);
}, function (err) {
logger.error('Failed jsonp report copy to: ' + reportConfigFilename);
@@ -90,7 +91,7 @@ function writeBrowserReport (config, reporter) {
return allSettled([jsonpConfgWrite, jsonConfgWrite]);
}).then(function () {
if (config.openReport && config.report && config.report.indexOf('browser') > -1) {
- var executeCommand = require('./index');
+ const executeCommand = require('./index');
return executeCommand('_openReport', config);
}
});
@@ -99,31 +100,31 @@ function writeBrowserReport (config, reporter) {
function writeJunitReport (config, reporter) {
logger.log('Writing jUnit Report');
- var builder = require('junit-report-builder');
- var suite = builder.testSuite()
+ const builder = require('junit-report-builder');
+ const suite = builder.testSuite()
.name(reporter.testSuite);
- for (var i in reporter.tests) {
+ for (let i in reporter.tests) {
if (!reporter.tests.hasOwnProperty(i)) {
continue;
}
- var test = reporter.tests[i];
- var testCase = suite.testCase()
+ const test = reporter.tests[i];
+ const testCase = suite.testCase()
.className(test.pair.selector)
.name(' ›› ' + test.pair.label);
if (!test.passed()) {
- var error = 'Design deviation ›› ' + test.pair.label + ' (' + test.pair.selector + ') component';
+ const error = 'Design deviation ›› ' + test.pair.label + ' (' + test.pair.selector + ') component';
testCase.failure(error);
testCase.error(error);
}
}
return new Promise(function (resolve, reject) {
- var testReportFilename = config.testReportFileName || config.ciReport.testReportFileName;
+ let testReportFilename = config.testReportFileName || config.ciReport.testReportFileName;
testReportFilename = testReportFilename.replace(/\.xml$/, '') + '.xml';
- var destination = path.join(config.ci_report, testReportFilename);
+ const destination = path.join(config.ci_report, testReportFilename);
try {
builder.writeTo(destination);
@@ -137,7 +138,8 @@ function writeJunitReport (config, reporter) {
}
function writeJsonReport (config, reporter) {
- var jsonReporter = cloneDeep(reporter);
+ const jsonReporter = cloneDeep(reporter);
+
function toAbsolute (p) {
return (path.isAbsolute(p)) ? p : path.join(config.projectPath, p);
}
@@ -146,10 +148,10 @@ function writeJsonReport (config, reporter) {
logger.log('Resources copied');
// Fixing URLs in the configuration
- var report = toAbsolute(config.json_report);
- for (var i in jsonReporter.tests) {
+ const report = toAbsolute(config.json_report);
+ for (let i in jsonReporter.tests) {
if (jsonReporter.tests.hasOwnProperty(i)) {
- var pair = jsonReporter.tests[i].pair;
+ const pair = jsonReporter.tests[i].pair;
pair.reference = path.relative(report, toAbsolute(pair.reference));
pair.test = path.relative(report, toAbsolute(pair.test));
@@ -171,13 +173,13 @@ function writeJsonReport (config, reporter) {
module.exports = {
execute: function (config) {
return compare(config).then(function (report) {
- var failed = report.failed();
+ const failed = report.failed();
logger.log('Test completed...');
logger.log(chalk.green(report.passed() + ' Passed'));
logger.log(chalk[(failed ? 'red' : 'green')](+failed + ' Failed'));
return writeReport(config, report).then(function (results) {
- for (var i = 0; i < results.length; i++) {
+ for (let i = 0; i < results.length; i++) {
if (results[i].state !== 'fulfilled') {
logger.error('Failed writing report with error: ' + results[i].value);
}
diff --git a/core/command/version.js b/core/command/version.js
index 6a09c91c9..6acfe50f4 100644
--- a/core/command/version.js
+++ b/core/command/version.js
@@ -1,4 +1,4 @@
-var version = require('../../package.json').version;
+const version = require('../../package.json').version;
module.exports = {
execute: function (config) {
diff --git a/core/runner.js b/core/runner.js
index a87517589..e67a9b107 100644
--- a/core/runner.js
+++ b/core/runner.js
@@ -1,8 +1,8 @@
-var executeCommand = require('./command/');
-var makeConfig = require('./util/makeConfig');
+const executeCommand = require('./command/');
+const makeConfig = require('./util/makeConfig');
module.exports = function (command, options) {
- var config = makeConfig(command, options);
+ const config = makeConfig(command, options);
return executeCommand(command, config);
};
diff --git a/core/util/Reporter.js b/core/util/Reporter.js
index d5cc6acb5..4849122b0 100644
--- a/core/util/Reporter.js
+++ b/core/util/Reporter.js
@@ -13,16 +13,16 @@ function Reporter (testSuite) {
}
Reporter.prototype.addTest = function (pair) {
- var t = new Test(pair);
+ const t = new Test(pair);
this.tests.push(t);
return t;
};
Reporter.prototype.passed = function () {
- var count = 0;
+ let count = 0;
- for (var test in this.tests) {
+ for (let test in this.tests) {
if (this.tests.hasOwnProperty(test) && this.tests[test].passed()) {
count++;
}
@@ -32,9 +32,9 @@ Reporter.prototype.passed = function () {
};
Reporter.prototype.failed = function () {
- var count = 0;
+ let count = 0;
- for (var test in this.tests) {
+ for (let test in this.tests) {
if (this.tests.hasOwnProperty(test) && !this.tests[test].passed()) {
count++;
}
diff --git a/core/util/compare/compare-hash.js b/core/util/compare/compare-hash.js
index b6f4e37b6..83497bb6e 100644
--- a/core/util/compare/compare-hash.js
+++ b/core/util/compare/compare-hash.js
@@ -1,13 +1,13 @@
-var crypto = require('crypto');
-var fs = require('fs');
+const crypto = require('crypto');
+const fs = require('fs');
function getFileHash (filename) {
if (!filename) {
return '';
}
return new Promise(resolve => {
- var md5sum = crypto.createHash('md5');
- var stream = fs.ReadStream(filename);
+ const md5sum = crypto.createHash('md5');
+ const stream = fs.ReadStream(filename);
stream.on('data', d => md5sum.update(d));
stream.on('end', () => resolve(md5sum.digest('hex')));
diff --git a/core/util/compare/compare-resemble.js b/core/util/compare/compare-resemble.js
index 7632f2ece..dfea74036 100644
--- a/core/util/compare/compare-resemble.js
+++ b/core/util/compare/compare-resemble.js
@@ -1,4 +1,4 @@
-var resemble = require('@mirzazeyrek/node-resemble-js');
+const resemble = require('@mirzazeyrek/node-resemble-js');
module.exports = function (referencePath, testPath, misMatchThreshold, resembleOutputSettings, requireSameDimensions) {
return new Promise(function (resolve, reject) {
diff --git a/core/util/compare/compare.js b/core/util/compare/compare.js
index 0527082fe..457937d41 100644
--- a/core/util/compare/compare.js
+++ b/core/util/compare/compare.js
@@ -1,12 +1,12 @@
-var compareHashes = require('./compare-hash');
-var compareResemble = require('./compare-resemble');
-var storeFailedDiff = require('./store-failed-diff.js');
+const compareHashes = require('./compare-hash');
+const compareResemble = require('./compare-resemble');
+const storeFailedDiff = require('./store-failed-diff.js');
process.on('message', compare);
function compare (data) {
- var { referencePath, testPath, resembleOutputSettings, pair } = data;
- var promise = compareHashes(referencePath, testPath)
+ let { referencePath, testPath, resembleOutputSettings, pair } = data;
+ const promise = compareHashes(referencePath, testPath)
.catch(() => compareResemble(referencePath, testPath, pair.misMatchThreshold, resembleOutputSettings, pair.requireSameDimensions));
promise
.then(function (data) {
diff --git a/core/util/compare/index.js b/core/util/compare/index.js
index b6069c48f..5e1e798c2 100644
--- a/core/util/compare/index.js
+++ b/core/util/compare/index.js
@@ -1,23 +1,23 @@
-var path = require('path');
-var map = require('p-map');
-var fs = require('fs');
-var cp = require('child_process');
+const path = require('path');
+const map = require('p-map');
+const fs = require('fs');
+const cp = require('child_process');
-var Reporter = require('./../Reporter');
-var logger = require('./../logger')('compare');
-var storeFailedDiffStub = require('./store-failed-diff-stub.js');
+const Reporter = require('./../Reporter');
+const logger = require('./../logger')('compare');
+const storeFailedDiffStub = require('./store-failed-diff-stub.js');
-var ASYNC_COMPARE_LIMIT = 20;
+const ASYNC_COMPARE_LIMIT = 20;
function comparePair (pair, report, config, compareConfig) {
- var Test = report.addTest(pair);
+ const Test = report.addTest(pair);
- var referencePath = pair.reference ? path.resolve(config.projectPath, pair.reference) : '';
- var testPath = pair.test ? path.resolve(config.projectPath, pair.test) : '';
+ const referencePath = pair.reference ? path.resolve(config.projectPath, pair.reference) : '';
+ const testPath = pair.test ? path.resolve(config.projectPath, pair.test) : '';
// TEST RUN ERROR/EXCEPTION
if (!referencePath || !testPath) {
- var MSG = `${pair.msg}: ${pair.error}. See scenario – ${pair.scenario.label} (${pair.viewport.label})`;
+ const MSG = `${pair.msg}: ${pair.error}. See scenario – ${pair.scenario.label} (${pair.viewport.label})`;
Test.status = 'fail';
logger.error(MSG);
pair.error = MSG;
@@ -59,7 +59,7 @@ function comparePair (pair, report, config, compareConfig) {
function compareImages (referencePath, testPath, pair, resembleOutputSettings, Test) {
return new Promise(function (resolve, reject) {
- var worker = cp.fork(require.resolve('./compare'));
+ const worker = cp.fork(require.resolve('./compare'));
worker.send({
referencePath: referencePath,
testPath: testPath,
@@ -85,10 +85,10 @@ function compareImages (referencePath, testPath, pair, resembleOutputSettings, T
}
module.exports = function (config) {
- var compareConfig = require(config.tempCompareConfigFileName).compareConfig;
+ const compareConfig = require(config.tempCompareConfigFileName).compareConfig;
- var report = new Reporter(config.ciReport.testSuiteName);
- var asyncCompareLimit = config.asyncCompareLimit || ASYNC_COMPARE_LIMIT;
+ const report = new Reporter(config.ciReport.testSuiteName);
+ const asyncCompareLimit = config.asyncCompareLimit || ASYNC_COMPARE_LIMIT;
report.id = config.id;
return map(compareConfig.testPairs, pair => comparePair(pair, report, config, compareConfig), { concurrency: asyncCompareLimit })
diff --git a/core/util/compare/store-failed-diff-stub.js b/core/util/compare/store-failed-diff-stub.js
index 3937e655a..365f532c6 100644
--- a/core/util/compare/store-failed-diff-stub.js
+++ b/core/util/compare/store-failed-diff-stub.js
@@ -2,7 +2,7 @@ const fs = require('fs');
const path = require('path');
// BASE64_PNG_STUB is 1x1 white pixel
-var BASE64_PNG_STUB = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=';
+const BASE64_PNG_STUB = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=';
// Utility to ensure `backstop approve` finds a diff image
// call when no reference image exists.
@@ -11,6 +11,6 @@ module.exports = function (testPath) {
};
function getFailedDiffFilename (testPath) {
- var lastSlash = testPath.lastIndexOf(path.sep);
+ const lastSlash = testPath.lastIndexOf(path.sep);
return testPath.slice(0, lastSlash + 1) + 'failed_diff_' + testPath.slice(lastSlash + 1, testPath.length);
}
diff --git a/core/util/compare/store-failed-diff.js b/core/util/compare/store-failed-diff.js
index de3991b7c..4dc29fd18 100644
--- a/core/util/compare/store-failed-diff.js
+++ b/core/util/compare/store-failed-diff.js
@@ -1,16 +1,16 @@
-var streamToPromise = require('./../streamToPromise');
+const streamToPromise = require('./../streamToPromise');
const fs = require('fs');
const path = require('path');
module.exports = function (testPath, data) {
- var failedDiffFilename = getFailedDiffFilename(testPath);
+ const failedDiffFilename = getFailedDiffFilename(testPath);
console.log(' See:', failedDiffFilename);
- var failedDiffStream = fs.createWriteStream(failedDiffFilename);
- var ext = failedDiffFilename.substring(failedDiffFilename.lastIndexOf('.') + 1);
+ const failedDiffStream = fs.createWriteStream(failedDiffFilename);
+ const ext = failedDiffFilename.substring(failedDiffFilename.lastIndexOf('.') + 1);
if (ext === 'png') {
- var storageStream = data.getDiffImage()
+ const storageStream = data.getDiffImage()
.pack()
.pipe(failedDiffStream);
return streamToPromise(storageStream, failedDiffFilename);
@@ -23,6 +23,6 @@ module.exports = function (testPath, data) {
};
function getFailedDiffFilename (testPath) {
- var lastSlash = testPath.lastIndexOf(path.sep);
+ const lastSlash = testPath.lastIndexOf(path.sep);
return testPath.slice(0, lastSlash + 1) + 'failed_diff_' + testPath.slice(lastSlash + 1, testPath.length);
}
diff --git a/core/util/createBitmaps.js b/core/util/createBitmaps.js
index 45f70606b..cc9d009ce 100644
--- a/core/util/createBitmaps.js
+++ b/core/util/createBitmaps.js
@@ -1,17 +1,17 @@
-var cloneDeep = require('lodash/cloneDeep');
-var fs = require('./fs');
-var each = require('./each');
-var pMap = require('p-map');
+const cloneDeep = require('lodash/cloneDeep');
+const fs = require('./fs');
+const each = require('./each');
+const pMap = require('p-map');
-var runPuppet = require('./runPuppet');
+const runPuppet = require('./runPuppet');
const ensureDirectoryPath = require('./ensureDirectoryPath');
-var logger = require('./logger')('createBitmaps');
+const logger = require('./logger')('createBitmaps');
-var CONCURRENCY_DEFAULT = 10;
+const CONCURRENCY_DEFAULT = 10;
function regexTest (string, search) {
- var re = new RegExp(search);
+ const re = new RegExp(search);
return re.test(string);
}
@@ -26,7 +26,7 @@ function ensureViewportLabel (config) {
}
function decorateConfigForCapture (config, isReference) {
- var configJSON;
+ let configJSON;
if (typeof config.args.config === 'object') {
configJSON = config.args.config;
@@ -36,17 +36,18 @@ function decorateConfigForCapture (config, isReference) {
configJSON.scenarios = configJSON.scenarios || [];
ensureViewportLabel(configJSON);
- var totalScenarioCount = configJSON.scenarios.length;
+ const totalScenarioCount = configJSON.scenarios.length;
function pad (number) {
- var r = String(number);
+ let r = String(number);
if (r.length === 1) {
r = '0' + r;
}
return r;
}
- var screenshotNow = new Date();
- var screenshotDateTime = screenshotNow.getFullYear() + pad(screenshotNow.getMonth() + 1) + pad(screenshotNow.getDate()) + '-' + pad(screenshotNow.getHours()) + pad(screenshotNow.getMinutes()) + pad(screenshotNow.getSeconds());
+
+ const screenshotNow = new Date();
+ let screenshotDateTime = screenshotNow.getFullYear() + pad(screenshotNow.getMonth() + 1) + pad(screenshotNow.getDate()) + '-' + pad(screenshotNow.getHours()) + pad(screenshotNow.getMinutes()) + pad(screenshotNow.getSeconds());
screenshotDateTime = configJSON.dynamicTestId ? configJSON.dynamicTestId : screenshotDateTime;
configJSON.screenshotDateTime = screenshotDateTime;
config.screenshotDateTime = screenshotDateTime;
@@ -63,7 +64,7 @@ function decorateConfigForCapture (config, isReference) {
configJSON.defaultRequireSameDimensions = config.defaultRequireSameDimensions;
if (config.args.filter) {
- var scenarios = [];
+ const scenarios = [];
config.args.filter.split(',').forEach(function (filteredTest) {
each(configJSON.scenarios, function (scenario) {
if (regexTest(scenario.label, filteredTest)) {
@@ -83,8 +84,8 @@ function saveViewportIndexes (viewport, index) {
}
function delegateScenarios (config) {
- var scenarios = [];
- var scenarioViews = [];
+ const scenarios = [];
+ const scenarioViews = [];
config.viewports = config.viewports.map(saveViewportIndexes);
@@ -107,9 +108,9 @@ function delegateScenarios (config) {
}
});
- var scenarioViewId = 0;
+ let scenarioViewId = 0;
scenarios.forEach(function (scenario) {
- var desiredViewportsForScenario = config.viewports;
+ let desiredViewportsForScenario = config.viewports;
if (scenario.viewports && scenario.viewports.length > 0) {
desiredViewportsForScenario = scenario.viewports;
@@ -137,14 +138,14 @@ function delegateScenarios (config) {
}
function writeCompareConfigFile (comparePairsFileName, compareConfig) {
- var compareConfigJSON = JSON.stringify(compareConfig, null, 2);
+ const compareConfigJSON = JSON.stringify(compareConfig, null, 2);
ensureDirectoryPath(comparePairsFileName);
return fs.writeFile(comparePairsFileName, compareConfigJSON);
}
function flatMapTestPairs (rawTestPairs) {
return rawTestPairs.reduce((acc, result) => {
- var testPairs = result.testPairs;
+ let testPairs = result.testPairs;
if (!testPairs) {
testPairs = {
diff: {
diff --git a/core/util/each.js b/core/util/each.js
index da87de8ce..3a1e2fddb 100644
--- a/core/util/each.js
+++ b/core/util/each.js
@@ -1,5 +1,5 @@
module.exports = function each (arr, callback) {
- for (var i in arr) {
+ for (let i in arr) {
if (arr.hasOwnProperty(i)) {
callback(arr[i], i, arr);
}
diff --git a/core/util/engineErrors.js b/core/util/engineErrors.js
index cfb72d8fc..e3d73fe10 100644
--- a/core/util/engineErrors.js
+++ b/core/util/engineErrors.js
@@ -1,5 +1,5 @@
module.exports = function (config) {
- var compareConfig = require(config.tempCompareConfigFileName).compareConfig;
+ const compareConfig = require(config.tempCompareConfigFileName).compareConfig;
const error = compareConfig.testPairs.find(testPair => {
return !!testPair.engineErrorMsg;
});
diff --git a/core/util/engineTools.js b/core/util/engineTools.js
index 572e66554..f0982ab7e 100644
--- a/core/util/engineTools.js
+++ b/core/util/engineTools.js
@@ -5,7 +5,7 @@ function getMisMatchThreshHold (scenario, config) {
}
function ensureFileSuffix (filename, suffix) {
- var re = new RegExp('\.' + suffix + '$', ''); // eslint-disable-line no-useless-escape
+ const re = new RegExp('\.' + suffix + '$', ''); // eslint-disable-line no-useless-escape
return filename.replace(re, '') + '.' + suffix;
}
@@ -15,10 +15,10 @@ function glueStringsWithSlash (stringA, stringB) {
}
function genHash (str) {
- var hash = 0;
- var i;
- var chr;
- var len;
+ let hash = 0;
+ let i;
+ let chr;
+ let len;
if (!str) return hash;
str = str.toString();
for (i = 0, len = str.length; i < len; i++) {
@@ -49,7 +49,7 @@ function makeSafe (str) {
}
function getFilename (fileNameTemplate, outputFileFormatSuffix, configId, scenarioIndex, scenarioLabelSafe, selectorIndex, selectorLabel, viewportIndex, viewportLabel) {
- var fileName = fileNameTemplate
+ let fileName = fileNameTemplate
.replace(/\{configId\}/, configId)
.replace(/\{scenarioIndex\}/, scenarioIndex)
.replace(/\{scenarioLabel\}/, scenarioLabelSafe)
@@ -59,7 +59,7 @@ function getFilename (fileNameTemplate, outputFileFormatSuffix, configId, scenar
.replace(/\{viewportLabel\}/, makeSafe(viewportLabel))
.replace(/[^a-z0-9_-]/gi, ''); // remove anything that's not a letter or a number or dash or underscore.
- var extRegExp = new RegExp(outputFileFormatSuffix + '$', 'i');
+ const extRegExp = new RegExp(outputFileFormatSuffix + '$', 'i');
if (!extRegExp.test(fileName)) {
fileName = fileName + outputFileFormatSuffix;
}
diff --git a/core/util/ensureDirectoryPath.js b/core/util/ensureDirectoryPath.js
index dd6475298..d7fc55b54 100644
--- a/core/util/ensureDirectoryPath.js
+++ b/core/util/ensureDirectoryPath.js
@@ -2,7 +2,7 @@ const path = require('path');
const fs = require('fs');
function ensureDirectoryPath (filePath) {
- var dirname = path.dirname(filePath);
+ const dirname = path.dirname(filePath);
if (fs.existsSync(dirname)) {
return true;
}
diff --git a/core/util/extendConfig.js b/core/util/extendConfig.js
index bd241dbcb..a190fc690 100644
--- a/core/util/extendConfig.js
+++ b/core/util/extendConfig.js
@@ -1,7 +1,7 @@
-var path = require('path');
-var temp = require('temp');
-var fs = require('fs');
-var hash = require('object-hash');
+const path = require('path');
+const temp = require('temp');
+const fs = require('fs');
+const hash = require('object-hash');
const tmpdir = require('os').tmpdir();
const version = require('../../package.json').version;
@@ -82,11 +82,11 @@ function comparePaths (config) {
}
function captureConfigPaths (config) {
- var captureDir = path.join(tmpdir, 'capture');
+ const captureDir = path.join(tmpdir, 'capture');
if (!fs.existsSync(captureDir)) {
fs.mkdirSync(captureDir);
}
- var configHash = hash(config);
+ const configHash = hash(config);
config.captureConfigFileName = path.join(tmpdir, 'capture', configHash + '.json');
config.captureConfigFileNameDefault = path.join(config.backstop, 'capture', 'config.default.json');
}
diff --git a/core/util/findExecutable.js b/core/util/findExecutable.js
index 02acbd7b2..d19eb8c88 100644
--- a/core/util/findExecutable.js
+++ b/core/util/findExecutable.js
@@ -1,11 +1,11 @@
-var path = require('path');
+const path = require('path');
module.exports = function (module, bin) {
try {
- var pathToExecutableModulePackageJson = require.resolve(path.join(module, 'package.json'));
- var executableModulePackageJson = require(pathToExecutableModulePackageJson);
- var relativePathToExecutableBinary = executableModulePackageJson.bin[bin] || executableModulePackageJson.bin;
- var pathToExecutableModule = pathToExecutableModulePackageJson.replace('package.json', '');
+ const pathToExecutableModulePackageJson = require.resolve(path.join(module, 'package.json'));
+ const executableModulePackageJson = require(pathToExecutableModulePackageJson);
+ const relativePathToExecutableBinary = executableModulePackageJson.bin[bin] || executableModulePackageJson.bin;
+ const pathToExecutableModule = pathToExecutableModulePackageJson.replace('package.json', '');
return path.join(pathToExecutableModule, relativePathToExecutableBinary);
} catch (e) {
throw new Error('Couldn\'t find executable for module "' + module + '" and bin "' + bin + '"\n' + e.message);
diff --git a/core/util/fs.js b/core/util/fs.js
index 9ed6fd030..8c9e8171f 100644
--- a/core/util/fs.js
+++ b/core/util/fs.js
@@ -1,8 +1,8 @@
-var fs = require('fs');
-var fsExtra = require('fs-extra');
-var promisify = require('./promisify');
+const fs = require('fs');
+const fsExtra = require('fs-extra');
+const promisify = require('./promisify');
-var fsPromisified = {
+const fsPromisified = {
readdir: promisify(fs.readdir),
createWriteStream: fs.createWriteStream,
existsSync: fs.existsSync,
diff --git a/core/util/logger.js b/core/util/logger.js
index ad708673e..ac6869951 100644
--- a/core/util/logger.js
+++ b/core/util/logger.js
@@ -1,9 +1,9 @@
-var chalk = require('chalk');
-var makeSpaces = require('./makeSpaces');
+const chalk = require('chalk');
+const makeSpaces = require('./makeSpaces');
function identity (string) { return string; }
-var typeToColor = {
+const typeToColor = {
error: identity,
warn: identity,
log: identity,
@@ -12,7 +12,7 @@ var typeToColor = {
success: identity
};
-var typeToTitleColor = {
+const typeToTitleColor = {
error: chalk.red,
warn: chalk.yellow,
log: chalk.white,
@@ -21,10 +21,10 @@ var typeToTitleColor = {
success: chalk.green
};
-var longestTitle = 5;
+let longestTitle = 5;
function paddedString (length, string) {
- var padding = makeSpaces(length + 3);
+ const padding = makeSpaces(length + 3);
if (string instanceof Error) {
string = string.stack;
@@ -34,8 +34,8 @@ function paddedString (length, string) {
return string;
}
- var lines = string.split('\n');
- var paddedLines = lines
+ const lines = string.split('\n');
+ const paddedLines = lines
.slice(1)
.map(function addPadding (string) {
return padding + string;
diff --git a/core/util/makeConfig.js b/core/util/makeConfig.js
index 4c8f6a104..f7f87b608 100644
--- a/core/util/makeConfig.js
+++ b/core/util/makeConfig.js
@@ -1,5 +1,5 @@
-var path = require('path');
-var extendConfig = require('./extendConfig');
+const path = require('path');
+const extendConfig = require('./extendConfig');
const NON_CONFIG_COMMANDS = ['init', 'version', 'stop'];
@@ -9,12 +9,12 @@ function projectPath (config) {
function loadProjectConfig (command, options, config) {
// TEST REPORT FILE NAME
- var customTestReportFileName = options && (options.testReportFileName || null);
+ const customTestReportFileName = options && (options.testReportFileName || null);
if (customTestReportFileName) {
config.testReportFileName = options.testReportFileName || null;
}
- var customConfigPath = options && (options.backstopConfigFilePath || options.configPath);
+ let customConfigPath = options && (options.backstopConfigFilePath || options.configPath);
if (options && typeof options.config === 'string' && !customConfigPath) {
customConfigPath = options.config;
}
@@ -29,7 +29,7 @@ function loadProjectConfig (command, options, config) {
config.backstopConfigFileName = path.join(config.projectPath, 'backstop.json');
}
- var userConfig = {};
+ let userConfig = {};
const CMD_REQUIRES_CONFIG = !NON_CONFIG_COMMANDS.includes(command);
if (CMD_REQUIRES_CONFIG) {
// This flow is confusing -- is checking for !config.backstopConfigFileName more reliable?
@@ -51,7 +51,7 @@ function loadProjectConfig (command, options, config) {
}
function makeConfig (command, options) {
- var config = {};
+ const config = {};
config.args = options || {};
@@ -59,7 +59,7 @@ function makeConfig (command, options) {
config.projectPath = projectPath(config);
config.perf = {};
- var userConfig = Object.assign({}, loadProjectConfig(command, options, config));
+ const userConfig = Object.assign({}, loadProjectConfig(command, options, config));
return extendConfig(config, userConfig);
}
diff --git a/core/util/makeSpaces.js b/core/util/makeSpaces.js
index 8171219b7..85090e0a2 100644
--- a/core/util/makeSpaces.js
+++ b/core/util/makeSpaces.js
@@ -1,6 +1,6 @@
module.exports = function makeSpaces (length) {
- var i = 0;
- var result = '';
+ let i = 0;
+ let result = '';
while (i < length) {
result += ' ';
i++;
diff --git a/core/util/promisify.js b/core/util/promisify.js
index d030bc0ea..92e2bf070 100644
--- a/core/util/promisify.js
+++ b/core/util/promisify.js
@@ -1,7 +1,7 @@
module.exports = function promisify (func) {
return function () {
- var args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));
+ const args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));
return new Promise(function (resolve, reject) {
args.push(function (err) {
if (err) {
@@ -9,7 +9,7 @@ module.exports = function promisify (func) {
return;
}
- var args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));
+ const args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));
resolve(args.slice(1));
});
func.apply(this, args);
diff --git a/core/util/runPuppet.js b/core/util/runPuppet.js
index 900f0284d..f6c6d4513 100644
--- a/core/util/runPuppet.js
+++ b/core/util/runPuppet.js
@@ -107,9 +107,9 @@ async function processScenarioView (scenario, variantOrScenarioLabelSafe, scenar
let result;
const puppetCommands = async () => {
// --- BEFORE SCRIPT ---
- var onBeforeScript = scenario.onBeforeScript || config.onBeforeScript;
+ const onBeforeScript = scenario.onBeforeScript || config.onBeforeScript;
if (onBeforeScript) {
- var beforeScriptPath = path.resolve(engineScriptsPath, onBeforeScript);
+ const beforeScriptPath = path.resolve(engineScriptsPath, onBeforeScript);
if (fs.existsSync(beforeScriptPath)) {
await require(beforeScriptPath)(page, scenario, viewport, isReference, browser, config);
} else {
@@ -118,7 +118,7 @@ async function processScenarioView (scenario, variantOrScenarioLabelSafe, scenar
}
// --- OPEN URL ---
- var url = scenario.url;
+ let url = scenario.url;
if (isReference && scenario.referenceUrl) {
url = scenario.referenceUrl;
}
@@ -170,9 +170,9 @@ async function processScenarioView (scenario, variantOrScenarioLabelSafe, scenar
}
// --- ON READY SCRIPT ---
- var onReadyScript = scenario.onReadyScript || config.onReadyScript;
+ const onReadyScript = scenario.onReadyScript || config.onReadyScript;
if (onReadyScript) {
- var readyScriptPath = path.resolve(engineScriptsPath, onReadyScript);
+ const readyScriptPath = path.resolve(engineScriptsPath, onReadyScript);
if (fs.existsSync(readyScriptPath)) {
await require(readyScriptPath)(page, scenario, viewport, isReference, browser, config);
} else {
@@ -266,7 +266,7 @@ async function processScenarioView (scenario, variantOrScenarioLabelSafe, scenar
compareConfig = {
testPairs: [ testPair ]
};
- fs.copy(config.env.backstop + ERROR_SELECTOR_PATH, filePath);
+ await fs.copy(config.env.backstop + ERROR_SELECTOR_PATH, filePath);
}
return Promise.resolve(compareConfig);
@@ -320,9 +320,9 @@ async function delegateSelectors (
}
return new Promise(function (resolve, reject) {
- var job = null;
- var errors = [];
- var next = function () {
+ let job = null;
+ const errors = [];
+ const next = function () {
if (captureJobs.length === 0) {
if (errors.length === 0) {
resolve();
@@ -383,8 +383,12 @@ async function captureScreenshot (page, browser, selector, selectorMap, config,
});
}
- var type = config.puppeteerOffscreenCaptureFix ? page : el;
- var params = config.puppeteerOffscreenCaptureFix ? { captureBeyondViewport: false, path: path, clip: box } : { captureBeyondViewport: false, path: path };
+ const type = config.puppeteerOffscreenCaptureFix ? page : el;
+ const params = config.puppeteerOffscreenCaptureFix ? {
+ captureBeyondViewport: false,
+ path: path,
+ clip: box
+ } : { captureBeyondViewport: false, path: path };
await type.screenshot(params);
} else {
@@ -398,16 +402,16 @@ async function captureScreenshot (page, browser, selector, selectorMap, config,
};
const selectorsShot = async () => {
- for (let i = 0; i < selectors.length; i++) {
- var selector = selectors[i];
- filePath = selectorMap[selector].filePath;
- ensureDirectoryPath(filePath);
- try {
- await selectorShot(selector, filePath);
- } catch (e) {
- console.log(chalk.red(`Error capturing Element ${selector}`), e);
- return fs.copy(config.env.backstop + ERROR_SELECTOR_PATH, filePath);
- }
+ for (let i = 0; i < selectors.length; i++) {
+ const selector = selectors[i];
+ filePath = selectorMap[selector].filePath;
+ ensureDirectoryPath(filePath);
+ try {
+ await selectorShot(selector, filePath);
+ } catch (e) {
+ console.log(chalk.red(`Error capturing Element ${selector}`), e);
+ return fs.copy(config.env.backstop + ERROR_SELECTOR_PATH, filePath);
+ }
}
};
await selectorsShot();
diff --git a/examples/Jenkins/Sample/backstop_data/engine_scripts/puppet/ignoreCSP.js b/examples/Jenkins/Sample/backstop_data/engine_scripts/puppet/ignoreCSP.js
index 5e4f14155..02253bcce 100644
--- a/examples/Jenkins/Sample/backstop_data/engine_scripts/puppet/ignoreCSP.js
+++ b/examples/Jenkins/Sample/backstop_data/engine_scripts/puppet/ignoreCSP.js
@@ -34,7 +34,7 @@ module.exports = async function (page, scenario) {
if (requestUrl === targetUrl) {
const cookiesList = await page.cookies(requestUrl);
const cookies = cookiesList.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
- const headers = Object.assign(request.headers(), {cookie: cookies});
+ const headers = Object.assign(request.headers(), { cookie: cookies });
const options = {
headers: headers,
body: request.postData(),
diff --git a/examples/Jenkins/Sample/backstop_data/engine_scripts/puppet/onBefore.js b/examples/Jenkins/Sample/backstop_data/engine_scripts/puppet/onBefore.js
index 6bc4567ec..98232da32 100644
--- a/examples/Jenkins/Sample/backstop_data/engine_scripts/puppet/onBefore.js
+++ b/examples/Jenkins/Sample/backstop_data/engine_scripts/puppet/onBefore.js
@@ -2,11 +2,10 @@ module.exports = async (page, scenario, vp) => {
await require('./loadCookies')(page, scenario);
// Emulate iPhone
- if (vp.label == "iPhone6,6s,7,8") {
- await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
+ if (vp.label == 'iPhone6,6s,7,8') {
+ await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
}
// Custom Timeout
await page.setDefaultNavigationTimeout(300000);
-
};
diff --git a/examples/angularAppWithCssTransitions/index.html b/examples/angularAppWithCssTransitions/index.html
index 45f8fe7de..905407575 100644
--- a/examples/angularAppWithCssTransitions/index.html
+++ b/examples/angularAppWithCssTransitions/index.html
@@ -109,9 +109,9 @@
Nisi ut aliquid?
myApp.controller('MyCtrlr', ['$scope',function($scope){
- var IS_BIG_CUTOFF = 768;
+ const IS_BIG_CUTOFF = 768;
- $scope.allDone = function () {
+ $scope.allDone = function () {
console.log('backstop.ready');
}
diff --git a/examples/nodeIntegration/backstop.js b/examples/nodeIntegration/backstop.js
index c0f9a9e28..7bc461077 100644
--- a/examples/nodeIntegration/backstop.js
+++ b/examples/nodeIntegration/backstop.js
@@ -5,73 +5,73 @@ const projectPath = `public/${args.p}`;
const backstop = require('backstopjs');
const filesToIgnore = {
- "first-project": [
- "ignore-me.html"
- ],
- "second-project": [
- "ignore-me.html"
- ],
- "third-project": [
- "ignore-me.html"
- ]
+ 'first-project': [
+ 'ignore-me.html'
+ ],
+ 'second-project': [
+ 'ignore-me.html'
+ ],
+ 'third-project': [
+ 'ignore-me.html'
+ ]
};
-const projectConfig = require("./backstop.config.js")({
- "project": args.p,
- "scenarios": getScenariosForProject(projectPath)
+const projectConfig = require('./backstop.config.js')({
+ 'project': args.p,
+ 'scenarios': getScenariosForProject(projectPath)
});
-let commandToRun = "";
+let commandToRun = '';
-if( args.reference ) {
- commandToRun = "reference";
+if (args.reference) {
+ commandToRun = 'reference';
}
-if( args.test ) {
- commandToRun = "test";
+if (args.test) {
+ commandToRun = 'test';
}
-if( args.openReport ) {
- commandToRun = "openReport";
+if (args.openReport) {
+ commandToRun = 'openReport';
}
-if( "" !== commandToRun ) {
- backstop(commandToRun, { config: projectConfig });
+if (commandToRun !== '') {
+ backstop(commandToRun, { config: projectConfig });
}
-function getScenariosForProject(projectPath) {
- const files = fs.readdirSync(projectPath);
+function getScenariosForProject (projectPath) {
+ const files = fs.readdirSync(projectPath);
- let scenarios;
+ let scenarios;
- _.remove(files, isFileToIgnore);
+ _.remove(files, isFileToIgnore);
- scenarios = files.map(file => {
- const scenarioLabel = file.split(".")[0].split("-").join(" ");
+ scenarios = files.map(file => {
+ const scenarioLabel = file.split('.')[0].split('-').join(' ');
- return {
- "label": scenarioLabel,
- "url": `http://localhost:8000/${projectPath}/${file}`,
- "delay": 500,
- "misMatchThreshold" : 0.1
- }
- });
+ return {
+ 'label': scenarioLabel,
+ 'url': `http://localhost:8000/${projectPath}/${file}`,
+ 'delay': 500,
+ 'misMatchThreshold': 0.1
+ };
+ });
- return scenarios;
+ return scenarios;
}
-function isFileToIgnore(file) {
- let shouldBeRemoved = false;
+function isFileToIgnore (file) {
+ let shouldBeRemoved = false;
- //make sure we only have html files
- if( file.indexOf(".html") === -1 ) {
- shouldBeRemoved = true;
- }
+ // make sure we only have html files
+ if (file.indexOf('.html') === -1) {
+ shouldBeRemoved = true;
+ }
- //exclude files by name
- if( filesToIgnore[args.p] && filesToIgnore[args.p].indexOf(file) > -1 ) {
- shouldBeRemoved = true;
- }
+ // exclude files by name
+ if (filesToIgnore[args.p] && filesToIgnore[args.p].indexOf(file) > -1) {
+ shouldBeRemoved = true;
+ }
- return shouldBeRemoved;
-}
\ No newline at end of file
+ return shouldBeRemoved;
+}
diff --git a/examples/nodeIntegration/server.js b/examples/nodeIntegration/server.js
index a9656875b..6347a6fe5 100644
--- a/examples/nodeIntegration/server.js
+++ b/examples/nodeIntegration/server.js
@@ -6,5 +6,5 @@ const app = koa();
app.use(serve('public'));
app.listen(8000, () => {
- console.log('Koa is listening at localhost:8000')
+ console.log('Koa is listening at localhost:8000');
});
diff --git a/examples/responsiveDemo/backstop_data/engine_scripts/puppet/ignoreCSP.js b/examples/responsiveDemo/backstop_data/engine_scripts/puppet/ignoreCSP.js
index 5e4f14155..02253bcce 100644
--- a/examples/responsiveDemo/backstop_data/engine_scripts/puppet/ignoreCSP.js
+++ b/examples/responsiveDemo/backstop_data/engine_scripts/puppet/ignoreCSP.js
@@ -34,7 +34,7 @@ module.exports = async function (page, scenario) {
if (requestUrl === targetUrl) {
const cookiesList = await page.cookies(requestUrl);
const cookies = cookiesList.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
- const headers = Object.assign(request.headers(), {cookie: cookies});
+ const headers = Object.assign(request.headers(), { cookie: cookies });
const options = {
headers: headers,
body: request.postData(),
diff --git a/examples/simpleReactApp/compiled.js b/examples/simpleReactApp/compiled.js
index 447b593bd..1dc4054a0 100644
--- a/examples/simpleReactApp/compiled.js
+++ b/examples/simpleReactApp/compiled.js
@@ -1,13 +1,312 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o>>0;for(var i=0;i0){for(i in momentProperties){prop=momentProperties[i];val=from[prop];if(!isUndefined(val)){to[prop]=val}}}return to}var updateInProgress=false;function Moment(config){copyConfig(this,config);this._d=new Date(config._d!=null?config._d.getTime():NaN);if(updateInProgress===false){updateInProgress=true;utils_hooks__hooks.updateOffset(this);updateInProgress=false}}function isMoment(obj){return obj instanceof Moment||obj!=null&&obj._isAMomentObject!=null}function absFloor(number){if(number<0){return Math.ceil(number)||0}else{return Math.floor(number)}}function toInt(argumentForCoercion){var coercedNumber=+argumentForCoercion,value=0;if(coercedNumber!==0&&isFinite(coercedNumber)){value=absFloor(coercedNumber)}return value}function compareArrays(array1,array2,dontConvert){var len=Math.min(array1.length,array2.length),lengthDiff=Math.abs(array1.length-array2.length),diffs=0,i;for(i=0;i0?"future":"past"];return isFunction(format)?format(output):format.replace(/%s/i,output)}var aliases={};function addUnitAlias(unit,shorthand){var lowerCase=unit.toLowerCase();aliases[lowerCase]=aliases[lowerCase+"s"]=aliases[shorthand]=unit}function normalizeUnits(units){return typeof units==="string"?aliases[units]||aliases[units.toLowerCase()]:undefined}function normalizeObjectUnits(inputObject){var normalizedInput={},normalizedProp,prop;for(prop in inputObject){if(hasOwnProp(inputObject,prop)){normalizedProp=normalizeUnits(prop);if(normalizedProp){normalizedInput[normalizedProp]=inputObject[prop]}}}return normalizedInput}var priorities={};function addUnitPriority(unit,priority){priorities[unit]=priority}function getPrioritizedUnits(unitsObj){var units=[];for(var u in unitsObj){units.push({unit:u,priority:priorities[u]})}units.sort(function(a,b){return a.priority-b.priority});return units}function makeGetSet(unit,keepTime){return function(value){if(value!=null){get_set__set(this,unit,value);utils_hooks__hooks.updateOffset(this,keepTime);return this}else{return get_set__get(this,unit)}}}function get_set__get(mom,unit){return mom.isValid()?mom._d["get"+(mom._isUTC?"UTC":"")+unit]():NaN}function get_set__set(mom,unit,value){if(mom.isValid()){mom._d["set"+(mom._isUTC?"UTC":"")+unit](value)}}function stringGet(units){units=normalizeUnits(units);if(isFunction(this[units])){return this[units]()}return this}function stringSet(units,value){if(typeof units==="object"){units=normalizeObjectUnits(units);var prioritized=getPrioritizedUnits(units);for(var i=0;i=0;return(sign?forceSign?"+":"":"-")+Math.pow(10,Math.max(0,zerosToFill)).toString().substr(1)+absNumber}var formattingTokens=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;var localFormattingTokens=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;var formatFunctions={};var formatTokenFunctions={};function addFormatToken(token,padded,ordinal,callback){var func=callback;if(typeof callback==="string"){func=function(){return this[callback]()}}if(token){formatTokenFunctions[token]=func}if(padded){formatTokenFunctions[padded[0]]=function(){return zeroFill(func.apply(this,arguments),padded[1],padded[2])}}if(ordinal){formatTokenFunctions[ordinal]=function(){return this.localeData().ordinal(func.apply(this,arguments),token)}}}function removeFormattingTokens(input){if(input.match(/\[[\s\S]/)){return input.replace(/^\[|\]$/g,"")}return input.replace(/\\/g,"")}function makeFormatFunction(format){var array=format.match(formattingTokens),i,length;for(i=0,length=array.length;i=0&&localFormattingTokens.test(format)){format=format.replace(localFormattingTokens,replaceLongDateFormatTokens);localFormattingTokens.lastIndex=0;i-=1}return format}var match1=/\d/;var match2=/\d\d/;var match3=/\d{3}/;var match4=/\d{4}/;var match6=/[+-]?\d{6}/;var match1to2=/\d\d?/;var match3to4=/\d\d\d\d?/;var match5to6=/\d\d\d\d\d\d?/;var match1to3=/\d{1,3}/;var match1to4=/\d{1,4}/;var match1to6=/[+-]?\d{1,6}/;var matchUnsigned=/\d+/;var matchSigned=/[+-]?\d+/;var matchOffset=/Z|[+-]\d\d:?\d\d/gi;var matchShortOffset=/Z|[+-]\d\d(?::?\d\d)?/gi;var matchTimestamp=/[+-]?\d+(\.\d{1,3})?/;var matchWord=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;var regexes={};function addRegexToken(token,regex,strictRegex){regexes[token]=isFunction(regex)?regex:function(isStrict,localeData){return isStrict&&strictRegex?strictRegex:regex}}function getParseRegexForToken(token,config){if(!hasOwnProp(regexes,token)){return new RegExp(unescapeFormat(token))}return regexes[token](config._strict,config._locale)}function unescapeFormat(s){return regexEscape(s.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(matched,p1,p2,p3,p4){return p1||p2||p3||p4}))}function regexEscape(s){return s.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var tokens={};function addParseToken(token,callback){var i,func=callback;if(typeof token==="string"){token=[token]}if(typeof callback==="number"){func=function(input,array){array[callback]=toInt(input)}}for(i=0;i68?1900:2e3)};var getSetYear=makeGetSet("FullYear",true);function getIsLeapYear(){return isLeapYear(this.year())}function createDate(y,m,d,h,M,s,ms){var date=new Date(y,m,d,h,M,s,ms);if(y<100&&y>=0&&isFinite(date.getFullYear())){date.setFullYear(y)}return date}function createUTCDate(y){var date=new Date(Date.UTC.apply(null,arguments));if(y<100&&y>=0&&isFinite(date.getUTCFullYear())){date.setUTCFullYear(y)}return date}function firstWeekOffset(year,dow,doy){var fwd=7+dow-doy,fwdlw=(7+createUTCDate(year,0,fwd).getUTCDay()-dow)%7;return-fwdlw+fwd-1}function dayOfYearFromWeeks(year,week,weekday,dow,doy){var localWeekday=(7+weekday-dow)%7,weekOffset=firstWeekOffset(year,dow,doy),dayOfYear=1+7*(week-1)+localWeekday+weekOffset,resYear,resDayOfYear;if(dayOfYear<=0){resYear=year-1;resDayOfYear=daysInYear(resYear)+dayOfYear}else if(dayOfYear>daysInYear(year)){resYear=year+1;resDayOfYear=dayOfYear-daysInYear(year)}else{resYear=year;resDayOfYear=dayOfYear}return{year:resYear,dayOfYear:resDayOfYear}}function weekOfYear(mom,dow,doy){var weekOffset=firstWeekOffset(mom.year(),dow,doy),week=Math.floor((mom.dayOfYear()-weekOffset-1)/7)+1,resWeek,resYear;if(week<1){resYear=mom.year()-1;resWeek=week+weeksInYear(resYear,dow,doy)}else if(week>weeksInYear(mom.year(),dow,doy)){resWeek=week-weeksInYear(mom.year(),dow,doy);resYear=mom.year()+1}else{resYear=mom.year();resWeek=week}return{week:resWeek,year:resYear}}function weeksInYear(year,dow,doy){var weekOffset=firstWeekOffset(year,dow,doy),weekOffsetNext=firstWeekOffset(year+1,dow,doy);return(daysInYear(year)-weekOffset+weekOffsetNext)/7}addFormatToken("w",["ww",2],"wo","week");addFormatToken("W",["WW",2],"Wo","isoWeek");addUnitAlias("week","w");addUnitAlias("isoWeek","W");addUnitPriority("week",5);addUnitPriority("isoWeek",5);addRegexToken("w",match1to2);addRegexToken("ww",match1to2,match2);addRegexToken("W",match1to2);addRegexToken("WW",match1to2,match2);addWeekParseToken(["w","ww","W","WW"],function(input,week,config,token){week[token.substr(0,1)]=toInt(input)});function localeWeek(mom){return weekOfYear(mom,this._week.dow,this._week.doy).week}var defaultLocaleWeek={dow:0,doy:6};function localeFirstDayOfWeek(){return this._week.dow}function localeFirstDayOfYear(){return this._week.doy}function getSetWeek(input){var week=this.localeData().week(this);return input==null?week:this.add((input-week)*7,"d")}function getSetISOWeek(input){var week=weekOfYear(this,1,4).week;return input==null?week:this.add((input-week)*7,"d")}addFormatToken("d",0,"do","day");addFormatToken("dd",0,0,function(format){return this.localeData().weekdaysMin(this,format)});addFormatToken("ddd",0,0,function(format){return this.localeData().weekdaysShort(this,format)});addFormatToken("dddd",0,0,function(format){return this.localeData().weekdays(this,format)});addFormatToken("e",0,0,"weekday");addFormatToken("E",0,0,"isoWeekday");addUnitAlias("day","d");addUnitAlias("weekday","e");addUnitAlias("isoWeekday","E");addUnitPriority("day",11);addUnitPriority("weekday",11);addUnitPriority("isoWeekday",11);addRegexToken("d",match1to2);addRegexToken("e",match1to2);addRegexToken("E",match1to2);addRegexToken("dd",function(isStrict,locale){return locale.weekdaysMinRegex(isStrict)});addRegexToken("ddd",function(isStrict,locale){return locale.weekdaysShortRegex(isStrict)});addRegexToken("dddd",function(isStrict,locale){return locale.weekdaysRegex(isStrict)});addWeekParseToken(["dd","ddd","dddd"],function(input,week,config,token){var weekday=config._locale.weekdaysParse(input,token,config._strict);if(weekday!=null){week.d=weekday}else{getParsingFlags(config).invalidWeekday=input}});addWeekParseToken(["d","e","E"],function(input,week,config,token){week[token]=toInt(input)});function parseWeekday(input,locale){if(typeof input!=="string"){return input}if(!isNaN(input)){return parseInt(input,10)}input=locale.weekdaysParse(input);if(typeof input==="number"){return input}return null}function parseIsoWeekday(input,locale){if(typeof input==="string"){return locale.weekdaysParse(input)%7||7}return isNaN(input)?null:input}var defaultLocaleWeekdays="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");function localeWeekdays(m,format){return isArray(this._weekdays)?this._weekdays[m.day()]:this._weekdays[this._weekdays.isFormat.test(format)?"format":"standalone"][m.day()]}var defaultLocaleWeekdaysShort="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");function localeWeekdaysShort(m){return this._weekdaysShort[m.day()]}var defaultLocaleWeekdaysMin="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function localeWeekdaysMin(m){return this._weekdaysMin[m.day()]}function day_of_week__handleStrictParse(weekdayName,format,strict){var i,ii,mom,llc=weekdayName.toLocaleLowerCase();if(!this._weekdaysParse){this._weekdaysParse=[];this._shortWeekdaysParse=[];this._minWeekdaysParse=[];for(i=0;i<7;++i){mom=create_utc__createUTC([2e3,1]).day(i);this._minWeekdaysParse[i]=this.weekdaysMin(mom,"").toLocaleLowerCase();this._shortWeekdaysParse[i]=this.weekdaysShort(mom,"").toLocaleLowerCase();this._weekdaysParse[i]=this.weekdays(mom,"").toLocaleLowerCase()}}if(strict){
-if(format==="dddd"){ii=indexOf.call(this._weekdaysParse,llc);return ii!==-1?ii:null}else if(format==="ddd"){ii=indexOf.call(this._shortWeekdaysParse,llc);return ii!==-1?ii:null}else{ii=indexOf.call(this._minWeekdaysParse,llc);return ii!==-1?ii:null}}else{if(format==="dddd"){ii=indexOf.call(this._weekdaysParse,llc);if(ii!==-1){return ii}ii=indexOf.call(this._shortWeekdaysParse,llc);if(ii!==-1){return ii}ii=indexOf.call(this._minWeekdaysParse,llc);return ii!==-1?ii:null}else if(format==="ddd"){ii=indexOf.call(this._shortWeekdaysParse,llc);if(ii!==-1){return ii}ii=indexOf.call(this._weekdaysParse,llc);if(ii!==-1){return ii}ii=indexOf.call(this._minWeekdaysParse,llc);return ii!==-1?ii:null}else{ii=indexOf.call(this._minWeekdaysParse,llc);if(ii!==-1){return ii}ii=indexOf.call(this._weekdaysParse,llc);if(ii!==-1){return ii}ii=indexOf.call(this._shortWeekdaysParse,llc);return ii!==-1?ii:null}}}function localeWeekdaysParse(weekdayName,format,strict){var i,mom,regex;if(this._weekdaysParseExact){return day_of_week__handleStrictParse.call(this,weekdayName,format,strict)}if(!this._weekdaysParse){this._weekdaysParse=[];this._minWeekdaysParse=[];this._shortWeekdaysParse=[];this._fullWeekdaysParse=[]}for(i=0;i<7;i++){mom=create_utc__createUTC([2e3,1]).day(i);if(strict&&!this._fullWeekdaysParse[i]){this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(mom,"").replace(".",".?")+"$","i");this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(mom,"").replace(".",".?")+"$","i");this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(mom,"").replace(".",".?")+"$","i")}if(!this._weekdaysParse[i]){regex="^"+this.weekdays(mom,"")+"|^"+this.weekdaysShort(mom,"")+"|^"+this.weekdaysMin(mom,"");this._weekdaysParse[i]=new RegExp(regex.replace(".",""),"i")}if(strict&&format==="dddd"&&this._fullWeekdaysParse[i].test(weekdayName)){return i}else if(strict&&format==="ddd"&&this._shortWeekdaysParse[i].test(weekdayName)){return i}else if(strict&&format==="dd"&&this._minWeekdaysParse[i].test(weekdayName)){return i}else if(!strict&&this._weekdaysParse[i].test(weekdayName)){return i}}}function getSetDayOfWeek(input){if(!this.isValid()){return input!=null?this:NaN}var day=this._isUTC?this._d.getUTCDay():this._d.getDay();if(input!=null){input=parseWeekday(input,this.localeData());return this.add(input-day,"d")}else{return day}}function getSetLocaleDayOfWeek(input){if(!this.isValid()){return input!=null?this:NaN}var weekday=(this.day()+7-this.localeData()._week.dow)%7;return input==null?weekday:this.add(input-weekday,"d")}function getSetISODayOfWeek(input){if(!this.isValid()){return input!=null?this:NaN}if(input!=null){var weekday=parseIsoWeekday(input,this.localeData());return this.day(this.day()%7?weekday:weekday-7)}else{return this.day()||7}}var defaultWeekdaysRegex=matchWord;function weekdaysRegex(isStrict){if(this._weekdaysParseExact){if(!hasOwnProp(this,"_weekdaysRegex")){computeWeekdaysParse.call(this)}if(isStrict){return this._weekdaysStrictRegex}else{return this._weekdaysRegex}}else{if(!hasOwnProp(this,"_weekdaysRegex")){this._weekdaysRegex=defaultWeekdaysRegex}return this._weekdaysStrictRegex&&isStrict?this._weekdaysStrictRegex:this._weekdaysRegex}}var defaultWeekdaysShortRegex=matchWord;function weekdaysShortRegex(isStrict){if(this._weekdaysParseExact){if(!hasOwnProp(this,"_weekdaysRegex")){computeWeekdaysParse.call(this)}if(isStrict){return this._weekdaysShortStrictRegex}else{return this._weekdaysShortRegex}}else{if(!hasOwnProp(this,"_weekdaysShortRegex")){this._weekdaysShortRegex=defaultWeekdaysShortRegex}return this._weekdaysShortStrictRegex&&isStrict?this._weekdaysShortStrictRegex:this._weekdaysShortRegex}}var defaultWeekdaysMinRegex=matchWord;function weekdaysMinRegex(isStrict){if(this._weekdaysParseExact){if(!hasOwnProp(this,"_weekdaysRegex")){computeWeekdaysParse.call(this)}if(isStrict){return this._weekdaysMinStrictRegex}else{return this._weekdaysMinRegex}}else{if(!hasOwnProp(this,"_weekdaysMinRegex")){this._weekdaysMinRegex=defaultWeekdaysMinRegex}return this._weekdaysMinStrictRegex&&isStrict?this._weekdaysMinStrictRegex:this._weekdaysMinRegex}}function computeWeekdaysParse(){function cmpLenRev(a,b){return b.length-a.length}var minPieces=[],shortPieces=[],longPieces=[],mixedPieces=[],i,mom,minp,shortp,longp;for(i=0;i<7;i++){mom=create_utc__createUTC([2e3,1]).day(i);minp=this.weekdaysMin(mom,"");shortp=this.weekdaysShort(mom,"");longp=this.weekdays(mom,"");minPieces.push(minp);shortPieces.push(shortp);longPieces.push(longp);mixedPieces.push(minp);mixedPieces.push(shortp);mixedPieces.push(longp)}minPieces.sort(cmpLenRev);shortPieces.sort(cmpLenRev);longPieces.sort(cmpLenRev);mixedPieces.sort(cmpLenRev);for(i=0;i<7;i++){shortPieces[i]=regexEscape(shortPieces[i]);longPieces[i]=regexEscape(longPieces[i]);mixedPieces[i]=regexEscape(mixedPieces[i])}this._weekdaysRegex=new RegExp("^("+mixedPieces.join("|")+")","i");this._weekdaysShortRegex=this._weekdaysRegex;this._weekdaysMinRegex=this._weekdaysRegex;this._weekdaysStrictRegex=new RegExp("^("+longPieces.join("|")+")","i");this._weekdaysShortStrictRegex=new RegExp("^("+shortPieces.join("|")+")","i");this._weekdaysMinStrictRegex=new RegExp("^("+minPieces.join("|")+")","i")}function hFormat(){return this.hours()%12||12}function kFormat(){return this.hours()||24}addFormatToken("H",["HH",2],0,"hour");addFormatToken("h",["hh",2],0,hFormat);addFormatToken("k",["kk",2],0,kFormat);addFormatToken("hmm",0,0,function(){return""+hFormat.apply(this)+zeroFill(this.minutes(),2)});addFormatToken("hmmss",0,0,function(){return""+hFormat.apply(this)+zeroFill(this.minutes(),2)+zeroFill(this.seconds(),2)});addFormatToken("Hmm",0,0,function(){return""+this.hours()+zeroFill(this.minutes(),2)});addFormatToken("Hmmss",0,0,function(){return""+this.hours()+zeroFill(this.minutes(),2)+zeroFill(this.seconds(),2)});function meridiem(token,lowercase){addFormatToken(token,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),lowercase)})}meridiem("a",true);meridiem("A",false);addUnitAlias("hour","h");addUnitPriority("hour",13);function matchMeridiem(isStrict,locale){return locale._meridiemParse}addRegexToken("a",matchMeridiem);addRegexToken("A",matchMeridiem);addRegexToken("H",match1to2);addRegexToken("h",match1to2);addRegexToken("HH",match1to2,match2);addRegexToken("hh",match1to2,match2);addRegexToken("hmm",match3to4);addRegexToken("hmmss",match5to6);addRegexToken("Hmm",match3to4);addRegexToken("Hmmss",match5to6);addParseToken(["H","HH"],HOUR);addParseToken(["a","A"],function(input,array,config){config._isPm=config._locale.isPM(input);config._meridiem=input});addParseToken(["h","hh"],function(input,array,config){array[HOUR]=toInt(input);getParsingFlags(config).bigHour=true});addParseToken("hmm",function(input,array,config){var pos=input.length-2;array[HOUR]=toInt(input.substr(0,pos));array[MINUTE]=toInt(input.substr(pos));getParsingFlags(config).bigHour=true});addParseToken("hmmss",function(input,array,config){var pos1=input.length-4;var pos2=input.length-2;array[HOUR]=toInt(input.substr(0,pos1));array[MINUTE]=toInt(input.substr(pos1,2));array[SECOND]=toInt(input.substr(pos2));getParsingFlags(config).bigHour=true});addParseToken("Hmm",function(input,array,config){var pos=input.length-2;array[HOUR]=toInt(input.substr(0,pos));array[MINUTE]=toInt(input.substr(pos))});addParseToken("Hmmss",function(input,array,config){var pos1=input.length-4;var pos2=input.length-2;array[HOUR]=toInt(input.substr(0,pos1));array[MINUTE]=toInt(input.substr(pos1,2));array[SECOND]=toInt(input.substr(pos2))});function localeIsPM(input){return(input+"").toLowerCase().charAt(0)==="p"}var defaultLocaleMeridiemParse=/[ap]\.?m?\.?/i;function localeMeridiem(hours,minutes,isLower){if(hours>11){return isLower?"pm":"PM"}else{return isLower?"am":"AM"}}var getSetHour=makeGetSet("Hours",true);var baseConfig={calendar:defaultCalendar,longDateFormat:defaultLongDateFormat,invalidDate:defaultInvalidDate,ordinal:defaultOrdinal,ordinalParse:defaultOrdinalParse,relativeTime:defaultRelativeTime,months:defaultLocaleMonths,monthsShort:defaultLocaleMonthsShort,week:defaultLocaleWeek,weekdays:defaultLocaleWeekdays,weekdaysMin:defaultLocaleWeekdaysMin,weekdaysShort:defaultLocaleWeekdaysShort,meridiemParse:defaultLocaleMeridiemParse};var locales={};var globalLocale;function normalizeLocale(key){return key?key.toLowerCase().replace("_","-"):key}function chooseLocale(names){var i=0,j,next,locale,split;while(i0){locale=loadLocale(split.slice(0,j).join("-"));if(locale){return locale}if(next&&next.length>=j&&compareArrays(split,next,true)>=j-1){break}j--}i++}return null}function loadLocale(name){var oldLocale=null;if(!locales[name]&&typeof module!=="undefined"&&module&&module.exports){try{oldLocale=globalLocale._abbr;require("./locale/"+name);locale_locales__getSetGlobalLocale(oldLocale)}catch(e){}}return locales[name]}function locale_locales__getSetGlobalLocale(key,values){var data;if(key){if(isUndefined(values)){data=locale_locales__getLocale(key)}else{data=defineLocale(key,values)}if(data){globalLocale=data}}return globalLocale._abbr}function defineLocale(name,config){if(config!==null){var parentConfig=baseConfig;config.abbr=name;if(locales[name]!=null){deprecateSimple("defineLocaleOverride","use moment.updateLocale(localeName, config) to change "+"an existing locale. moment.defineLocale(localeName, "+"config) should only be used for creating a new locale "+"See http://momentjs.com/guides/#/warnings/define-locale/ for more info.");parentConfig=locales[name]._config}else if(config.parentLocale!=null){if(locales[config.parentLocale]!=null){parentConfig=locales[config.parentLocale]._config}else{deprecateSimple("parentLocaleUndefined","specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/")}}locales[name]=new Locale(mergeConfigs(parentConfig,config));locale_locales__getSetGlobalLocale(name);return locales[name]}else{delete locales[name];return null}}function updateLocale(name,config){if(config!=null){var locale,parentConfig=baseConfig;if(locales[name]!=null){parentConfig=locales[name]._config}config=mergeConfigs(parentConfig,config);locale=new Locale(config);locale.parentLocale=locales[name];locales[name]=locale;locale_locales__getSetGlobalLocale(name)}else{if(locales[name]!=null){if(locales[name].parentLocale!=null){locales[name]=locales[name].parentLocale}else if(locales[name]!=null){delete locales[name]}}}return locales[name]}function locale_locales__getLocale(key){var locale;if(key&&key._locale&&key._locale._abbr){key=key._locale._abbr}if(!key){return globalLocale}if(!isArray(key)){locale=loadLocale(key);if(locale){return locale}key=[key]}return chooseLocale(key)}function locale_locales__listLocales(){return keys(locales)}function checkOverflow(m){var overflow;var a=m._a;if(a&&getParsingFlags(m).overflow===-2){overflow=a[MONTH]<0||a[MONTH]>11?MONTH:a[DATE]<1||a[DATE]>daysInMonth(a[YEAR],a[MONTH])?DATE:a[HOUR]<0||a[HOUR]>24||a[HOUR]===24&&(a[MINUTE]!==0||a[SECOND]!==0||a[MILLISECOND]!==0)?HOUR:a[MINUTE]<0||a[MINUTE]>59?MINUTE:a[SECOND]<0||a[SECOND]>59?SECOND:a[MILLISECOND]<0||a[MILLISECOND]>999?MILLISECOND:-1;if(getParsingFlags(m)._overflowDayOfYear&&(overflowDATE)){overflow=DATE}if(getParsingFlags(m)._overflowWeeks&&overflow===-1){overflow=WEEK}if(getParsingFlags(m)._overflowWeekday&&overflow===-1){overflow=WEEKDAY}getParsingFlags(m).overflow=overflow}return m}var extendedIsoRegex=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/;var basicIsoRegex=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/;var tzRegex=/Z|[+-]\d\d(?::?\d\d)?/;var isoDates=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,false],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,false],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,false],["YYYYDDD",/\d{7}/]];var isoTimes=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]];var aspNetJsonRegex=/^\/?Date\((\-?\d+)/i;function configFromISO(config){var i,l,string=config._i,match=extendedIsoRegex.exec(string)||basicIsoRegex.exec(string),allowTime,dateFormat,timeFormat,tzFormat;if(match){getParsingFlags(config).iso=true;for(i=0,l=isoDates.length;idaysInYear(yearToUse)){getParsingFlags(config)._overflowDayOfYear=true}date=createUTCDate(yearToUse,0,config._dayOfYear);config._a[MONTH]=date.getUTCMonth();config._a[DATE]=date.getUTCDate()}for(i=0;i<3&&config._a[i]==null;++i){config._a[i]=input[i]=currentDate[i]}for(;i<7;i++){config._a[i]=input[i]=config._a[i]==null?i===2?1:0:config._a[i]}if(config._a[HOUR]===24&&config._a[MINUTE]===0&&config._a[SECOND]===0&&config._a[MILLISECOND]===0){config._nextDay=true;config._a[HOUR]=0}config._d=(config._useUTC?createUTCDate:createDate).apply(null,input);if(config._tzm!=null){config._d.setUTCMinutes(config._d.getUTCMinutes()-config._tzm)}if(config._nextDay){config._a[HOUR]=24}}function dayOfYearFromWeekInfo(config){var w,weekYear,week,weekday,dow,doy,temp,weekdayOverflow;w=config._w;if(w.GG!=null||w.W!=null||w.E!=null){dow=1;doy=4;weekYear=defaults(w.GG,config._a[YEAR],weekOfYear(local__createLocal(),1,4).year);week=defaults(w.W,1);weekday=defaults(w.E,1);if(weekday<1||weekday>7){weekdayOverflow=true}}else{dow=config._locale._week.dow;doy=config._locale._week.doy;weekYear=defaults(w.gg,config._a[YEAR],weekOfYear(local__createLocal(),dow,doy).year);week=defaults(w.w,1);if(w.d!=null){weekday=w.d;if(weekday<0||weekday>6){weekdayOverflow=true}}else if(w.e!=null){weekday=w.e+dow;if(w.e<0||w.e>6){weekdayOverflow=true}}else{weekday=dow}}if(week<1||week>weeksInYear(weekYear,dow,doy)){getParsingFlags(config)._overflowWeeks=true}else if(weekdayOverflow!=null){getParsingFlags(config)._overflowWeekday=true}else{temp=dayOfYearFromWeeks(weekYear,week,weekday,dow,doy);config._a[YEAR]=temp.year;config._dayOfYear=temp.dayOfYear}}utils_hooks__hooks.ISO_8601=function(){};function configFromStringAndFormat(config){if(config._f===utils_hooks__hooks.ISO_8601){configFromISO(config);return}config._a=[];getParsingFlags(config).empty=true;var string=""+config._i,i,parsedInput,tokens,token,skipped,stringLength=string.length,totalParsedInputLength=0;tokens=expandFormat(config._f,config._locale).match(formattingTokens)||[];for(i=0;i0){getParsingFlags(config).unusedInput.push(skipped)}string=string.slice(string.indexOf(parsedInput)+parsedInput.length);totalParsedInputLength+=parsedInput.length}if(formatTokenFunctions[token]){if(parsedInput){getParsingFlags(config).empty=false}else{getParsingFlags(config).unusedTokens.push(token)}addTimeToArrayFromToken(token,parsedInput,config)}else if(config._strict&&!parsedInput){getParsingFlags(config).unusedTokens.push(token)}}getParsingFlags(config).charsLeftOver=stringLength-totalParsedInputLength;if(string.length>0){getParsingFlags(config).unusedInput.push(string)}if(config._a[HOUR]<=12&&getParsingFlags(config).bigHour===true&&config._a[HOUR]>0){getParsingFlags(config).bigHour=undefined}getParsingFlags(config).parsedDateParts=config._a.slice(0);getParsingFlags(config).meridiem=config._meridiem;config._a[HOUR]=meridiemFixWrap(config._locale,config._a[HOUR],config._meridiem);configFromArray(config);checkOverflow(config)}function meridiemFixWrap(locale,hour,meridiem){var isPm;if(meridiem==null){return hour}if(locale.meridiemHour!=null){return locale.meridiemHour(hour,meridiem)}else if(locale.isPM!=null){isPm=locale.isPM(meridiem);if(isPm&&hour<12){hour+=12}if(!isPm&&hour===12){hour=0}return hour}else{return hour}}function configFromStringAndArray(config){var tempConfig,bestMoment,scoreToBeat,i,currentScore;if(config._f.length===0){getParsingFlags(config).invalidFormat=true;config._d=new Date(NaN);return}for(i=0;ithis?this:other}else{return valid__createInvalid()}});function pickBy(fn,moments){var res,i;if(moments.length===1&&isArray(moments[0])){moments=moments[0]}if(!moments.length){return local__createLocal()}res=moments[0];for(i=1;ithis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function isDaylightSavingTimeShifted(){if(!isUndefined(this._isDSTShifted)){return this._isDSTShifted}var c={};copyConfig(c,this);c=prepareConfig(c);if(c._a){var other=c._isUTC?create_utc__createUTC(c._a):local__createLocal(c._a);this._isDSTShifted=this.isValid()&&compareArrays(c._a,other.toArray())>0}else{this._isDSTShifted=false}return this._isDSTShifted}function isLocal(){return this.isValid()?!this._isUTC:false}function isUtcOffset(){return this.isValid()?this._isUTC:false}function isUtc(){return this.isValid()?this._isUTC&&this._offset===0:false}var aspNetRegex=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?\d*)?$/;var isoRegex=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;function create__createDuration(input,key){var duration=input,match=null,sign,ret,diffRes;if(isDuration(input)){duration={ms:input._milliseconds,d:input._days,M:input._months}}else if(typeof input==="number"){duration={};if(key){duration[key]=input}else{duration.milliseconds=input}}else if(!!(match=aspNetRegex.exec(input))){sign=match[1]==="-"?-1:1;duration={y:0,d:toInt(match[DATE])*sign,h:toInt(match[HOUR])*sign,m:toInt(match[MINUTE])*sign,s:toInt(match[SECOND])*sign,ms:toInt(match[MILLISECOND])*sign}}else if(!!(match=isoRegex.exec(input))){sign=match[1]==="-"?-1:1;duration={y:parseIso(match[2],sign),M:parseIso(match[3],sign),w:parseIso(match[4],sign),d:parseIso(match[5],sign),h:parseIso(match[6],sign),m:parseIso(match[7],sign),s:parseIso(match[8],sign)}}else if(duration==null){duration={}}else if(typeof duration==="object"&&("from"in duration||"to"in duration)){diffRes=momentsDifference(local__createLocal(duration.from),local__createLocal(duration.to));duration={};duration.ms=diffRes.milliseconds;duration.M=diffRes.months}ret=new Duration(duration);if(isDuration(input)&&hasOwnProp(input,"_locale")){ret._locale=input._locale}return ret}create__createDuration.fn=Duration.prototype;function parseIso(inp,sign){var res=inp&&parseFloat(inp.replace(",","."));return(isNaN(res)?0:res)*sign}function positiveMomentsDifference(base,other){var res={milliseconds:0,months:0};res.months=other.month()-base.month()+(other.year()-base.year())*12;if(base.clone().add(res.months,"M").isAfter(other)){--res.months}res.milliseconds=+other-+base.clone().add(res.months,"M");return res}function momentsDifference(base,other){var res;if(!(base.isValid()&&other.isValid())){return{milliseconds:0,months:0}}other=cloneWithOffset(other,base);if(base.isBefore(other)){res=positiveMomentsDifference(base,other)}else{res=positiveMomentsDifference(other,base);res.milliseconds=-res.milliseconds;res.months=-res.months}return res}function absRound(number){if(number<0){return Math.round(-1*number)*-1}else{return Math.round(number)}}function createAdder(direction,name){return function(val,period){var dur,tmp;if(period!==null&&!isNaN(+period)){deprecateSimple(name,"moment()."+name+"(period, number) is deprecated. Please use moment()."+name+"(number, period). "+"See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.");tmp=val;val=period;period=tmp}val=typeof val==="string"?+val:val;dur=create__createDuration(val,period);add_subtract__addSubtract(this,dur,direction);return this}}function add_subtract__addSubtract(mom,duration,isAdding,updateOffset){var milliseconds=duration._milliseconds,days=absRound(duration._days),months=absRound(duration._months);if(!mom.isValid()){return}updateOffset=updateOffset==null?true:updateOffset;if(milliseconds){mom._d.setTime(mom._d.valueOf()+milliseconds*isAdding)}if(days){get_set__set(mom,"Date",get_set__get(mom,"Date")+days*isAdding)}if(months){setMonth(mom,get_set__get(mom,"Month")+months*isAdding)}if(updateOffset){utils_hooks__hooks.updateOffset(mom,days||months)}}var add_subtract__add=createAdder(1,"add");var add_subtract__subtract=createAdder(-1,"subtract");function getCalendarFormat(myMoment,now){var diff=myMoment.diff(now,"days",true);return diff<-6?"sameElse":diff<-1?"lastWeek":diff<0?"lastDay":diff<1?"sameDay":diff<2?"nextDay":diff<7?"nextWeek":"sameElse"}function moment_calendar__calendar(time,formats){var now=time||local__createLocal(),sod=cloneWithOffset(now,this).startOf("day"),format=utils_hooks__hooks.calendarFormat(this,sod)||"sameElse";var output=formats&&(isFunction(formats[format])?formats[format].call(this,now):formats[format]);return this.format(output||this.localeData().calendar(format,this,local__createLocal(now)))}function clone(){return new Moment(this)}function isAfter(input,units){var localInput=isMoment(input)?input:local__createLocal(input);if(!(this.isValid()&&localInput.isValid())){return false}units=normalizeUnits(!isUndefined(units)?units:"millisecond");if(units==="millisecond"){return this.valueOf()>localInput.valueOf()}else{return localInput.valueOf()weeksTarget){week=weeksTarget}return setWeekAll.call(this,input,week,weekday,dow,doy)}}function setWeekAll(weekYear,week,weekday,dow,doy){var dayOfYearData=dayOfYearFromWeeks(weekYear,week,weekday,dow,doy),date=createUTCDate(dayOfYearData.year,0,dayOfYearData.dayOfYear);this.year(date.getUTCFullYear());this.month(date.getUTCMonth());this.date(date.getUTCDate());return this}addFormatToken("Q",0,"Qo","quarter");addUnitAlias("quarter","Q");addUnitPriority("quarter",7);addRegexToken("Q",match1);addParseToken("Q",function(input,array){array[MONTH]=(toInt(input)-1)*3});function getSetQuarter(input){return input==null?Math.ceil((this.month()+1)/3):this.month((input-1)*3+this.month()%3)}addFormatToken("D",["DD",2],"Do","date");addUnitAlias("date","D");addUnitPriority("date",9);addRegexToken("D",match1to2);addRegexToken("DD",match1to2,match2);addRegexToken("Do",function(isStrict,locale){return isStrict?locale._ordinalParse:locale._ordinalParseLenient});addParseToken(["D","DD"],DATE);addParseToken("Do",function(input,array){array[DATE]=toInt(input.match(match1to2)[0],10)});var getSetDayOfMonth=makeGetSet("Date",true);addFormatToken("DDD",["DDDD",3],"DDDo","dayOfYear");addUnitAlias("dayOfYear","DDD");addUnitPriority("dayOfYear",4);addRegexToken("DDD",match1to3);addRegexToken("DDDD",match3);addParseToken(["DDD","DDDD"],function(input,array,config){config._dayOfYear=toInt(input)});function getSetDayOfYear(input){var dayOfYear=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return input==null?dayOfYear:this.add(input-dayOfYear,"d")}addFormatToken("m",["mm",2],0,"minute");addUnitAlias("minute","m");addUnitPriority("minute",14);addRegexToken("m",match1to2);addRegexToken("mm",match1to2,match2);addParseToken(["m","mm"],MINUTE);var getSetMinute=makeGetSet("Minutes",false);addFormatToken("s",["ss",2],0,"second");addUnitAlias("second","s");addUnitPriority("second",15);addRegexToken("s",match1to2);addRegexToken("ss",match1to2,match2);addParseToken(["s","ss"],SECOND);var getSetSecond=makeGetSet("Seconds",false);addFormatToken("S",0,0,function(){return~~(this.millisecond()/100)});addFormatToken(0,["SS",2],0,function(){return~~(this.millisecond()/10)});addFormatToken(0,["SSS",3],0,"millisecond");addFormatToken(0,["SSSS",4],0,function(){return this.millisecond()*10});addFormatToken(0,["SSSSS",5],0,function(){return this.millisecond()*100});addFormatToken(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});addFormatToken(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});addFormatToken(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});addFormatToken(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});addUnitAlias("millisecond","ms");addUnitPriority("millisecond",16);addRegexToken("S",match1to3,match1);addRegexToken("SS",match1to3,match2);addRegexToken("SSS",match1to3,match3);var token;for(token="SSSS";token.length<=9;token+="S"){addRegexToken(token,matchUnsigned)}function parseMs(input,array){array[MILLISECOND]=toInt(("0."+input)*1e3)}for(token="S";token.length<=9;token+="S"){addParseToken(token,parseMs)}var getSetMillisecond=makeGetSet("Milliseconds",false);addFormatToken("z",0,0,"zoneAbbr");addFormatToken("zz",0,0,"zoneName");function getZoneAbbr(){return this._isUTC?"UTC":""}function getZoneName(){return this._isUTC?"Coordinated Universal Time":""}var momentPrototype__proto=Moment.prototype;momentPrototype__proto.add=add_subtract__add;momentPrototype__proto.calendar=moment_calendar__calendar;momentPrototype__proto.clone=clone;momentPrototype__proto.diff=diff;momentPrototype__proto.endOf=endOf;momentPrototype__proto.format=format;momentPrototype__proto.from=from;momentPrototype__proto.fromNow=fromNow;momentPrototype__proto.to=to;momentPrototype__proto.toNow=toNow;momentPrototype__proto.get=stringGet;momentPrototype__proto.invalidAt=invalidAt;momentPrototype__proto.isAfter=isAfter;momentPrototype__proto.isBefore=isBefore;momentPrototype__proto.isBetween=isBetween;momentPrototype__proto.isSame=isSame;momentPrototype__proto.isSameOrAfter=isSameOrAfter;momentPrototype__proto.isSameOrBefore=isSameOrBefore;momentPrototype__proto.isValid=moment_valid__isValid;momentPrototype__proto.lang=lang;momentPrototype__proto.locale=locale;momentPrototype__proto.localeData=localeData;momentPrototype__proto.max=prototypeMax;momentPrototype__proto.min=prototypeMin;momentPrototype__proto.parsingFlags=parsingFlags;momentPrototype__proto.set=stringSet;momentPrototype__proto.startOf=startOf;momentPrototype__proto.subtract=add_subtract__subtract;momentPrototype__proto.toArray=toArray;momentPrototype__proto.toObject=toObject;momentPrototype__proto.toDate=toDate;momentPrototype__proto.toISOString=moment_format__toISOString;momentPrototype__proto.toJSON=toJSON;momentPrototype__proto.toString=toString;momentPrototype__proto.unix=unix;momentPrototype__proto.valueOf=to_type__valueOf;momentPrototype__proto.creationData=creationData;momentPrototype__proto.year=getSetYear;momentPrototype__proto.isLeapYear=getIsLeapYear;momentPrototype__proto.weekYear=getSetWeekYear;momentPrototype__proto.isoWeekYear=getSetISOWeekYear;momentPrototype__proto.quarter=momentPrototype__proto.quarters=getSetQuarter;momentPrototype__proto.month=getSetMonth;momentPrototype__proto.daysInMonth=getDaysInMonth;momentPrototype__proto.week=momentPrototype__proto.weeks=getSetWeek;momentPrototype__proto.isoWeek=momentPrototype__proto.isoWeeks=getSetISOWeek;momentPrototype__proto.weeksInYear=getWeeksInYear;momentPrototype__proto.isoWeeksInYear=getISOWeeksInYear;momentPrototype__proto.date=getSetDayOfMonth;momentPrototype__proto.day=momentPrototype__proto.days=getSetDayOfWeek;momentPrototype__proto.weekday=getSetLocaleDayOfWeek;momentPrototype__proto.isoWeekday=getSetISODayOfWeek;momentPrototype__proto.dayOfYear=getSetDayOfYear;momentPrototype__proto.hour=momentPrototype__proto.hours=getSetHour;momentPrototype__proto.minute=momentPrototype__proto.minutes=getSetMinute;momentPrototype__proto.second=momentPrototype__proto.seconds=getSetSecond;momentPrototype__proto.millisecond=momentPrototype__proto.milliseconds=getSetMillisecond;momentPrototype__proto.utcOffset=getSetOffset;momentPrototype__proto.utc=setOffsetToUTC;momentPrototype__proto.local=setOffsetToLocal;momentPrototype__proto.parseZone=setOffsetToParsedOffset;momentPrototype__proto.hasAlignedHourOffset=hasAlignedHourOffset;momentPrototype__proto.isDST=isDaylightSavingTime;momentPrototype__proto.isLocal=isLocal;momentPrototype__proto.isUtcOffset=isUtcOffset;momentPrototype__proto.isUtc=isUtc;momentPrototype__proto.isUTC=isUtc;momentPrototype__proto.zoneAbbr=getZoneAbbr;momentPrototype__proto.zoneName=getZoneName;momentPrototype__proto.dates=deprecate("dates accessor is deprecated. Use date instead.",getSetDayOfMonth);momentPrototype__proto.months=deprecate("months accessor is deprecated. Use month instead",getSetMonth);momentPrototype__proto.years=deprecate("years accessor is deprecated. Use year instead",getSetYear);momentPrototype__proto.zone=deprecate("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",getSetZone);momentPrototype__proto.isDSTShifted=deprecate("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",isDaylightSavingTimeShifted);var momentPrototype=momentPrototype__proto;function moment__createUnix(input){return local__createLocal(input*1e3)}function moment__createInZone(){return local__createLocal.apply(null,arguments).parseZone()}function preParsePostFormat(string){return string}var prototype__proto=Locale.prototype;prototype__proto.calendar=locale_calendar__calendar;prototype__proto.longDateFormat=longDateFormat;prototype__proto.invalidDate=invalidDate;prototype__proto.ordinal=ordinal;prototype__proto.preparse=preParsePostFormat;prototype__proto.postformat=preParsePostFormat;prototype__proto.relativeTime=relative__relativeTime;prototype__proto.pastFuture=pastFuture;prototype__proto.set=locale_set__set;prototype__proto.months=localeMonths;prototype__proto.monthsShort=localeMonthsShort;prototype__proto.monthsParse=localeMonthsParse;prototype__proto.monthsRegex=monthsRegex;prototype__proto.monthsShortRegex=monthsShortRegex;prototype__proto.week=localeWeek;prototype__proto.firstDayOfYear=localeFirstDayOfYear;prototype__proto.firstDayOfWeek=localeFirstDayOfWeek;prototype__proto.weekdays=localeWeekdays;prototype__proto.weekdaysMin=localeWeekdaysMin;prototype__proto.weekdaysShort=localeWeekdaysShort;prototype__proto.weekdaysParse=localeWeekdaysParse;prototype__proto.weekdaysRegex=weekdaysRegex;prototype__proto.weekdaysShortRegex=weekdaysShortRegex;prototype__proto.weekdaysMinRegex=weekdaysMinRegex;prototype__proto.isPM=localeIsPM;prototype__proto.meridiem=localeMeridiem;function lists__get(format,index,field,setter){var locale=locale_locales__getLocale();var utc=create_utc__createUTC().set(setter,index);return locale[field](utc,format)}function listMonthsImpl(format,index,field){if(typeof format==="number"){index=format;format=undefined}format=format||"";if(index!=null){return lists__get(format,index,field,"month")}var i;var out=[];for(i=0;i<12;i++){out[i]=lists__get(format,i,field,"month")}return out}function listWeekdaysImpl(localeSorted,format,index,field){if(typeof localeSorted==="boolean"){if(typeof format==="number"){index=format;format=undefined}format=format||""}else{format=localeSorted;index=format;localeSorted=false;if(typeof format==="number"){index=format;format=undefined}format=format||""}var locale=locale_locales__getLocale(),shift=localeSorted?locale._week.dow:0;if(index!=null){return lists__get(format,(index+shift)%7,field,"day")}var i;var out=[];for(i=0;i<7;i++){out[i]=lists__get(format,(i+shift)%7,field,"day")}return out}function lists__listMonths(format,index){return listMonthsImpl(format,index,"months")}function lists__listMonthsShort(format,index){return listMonthsImpl(format,index,"monthsShort")}function lists__listWeekdays(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,"weekdays")}function lists__listWeekdaysShort(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,"weekdaysShort")}function lists__listWeekdaysMin(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,"weekdaysMin")}locale_locales__getSetGlobalLocale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(number){var b=number%10,output=toInt(number%100/10)===1?"th":b===1?"st":b===2?"nd":b===3?"rd":"th";return number+output}});utils_hooks__hooks.lang=deprecate("moment.lang is deprecated. Use moment.locale instead.",locale_locales__getSetGlobalLocale);utils_hooks__hooks.langData=deprecate("moment.langData is deprecated. Use moment.localeData instead.",locale_locales__getLocale);var mathAbs=Math.abs;function duration_abs__abs(){var data=this._data;this._milliseconds=mathAbs(this._milliseconds);this._days=mathAbs(this._days);this._months=mathAbs(this._months);data.milliseconds=mathAbs(data.milliseconds);data.seconds=mathAbs(data.seconds);data.minutes=mathAbs(data.minutes);data.hours=mathAbs(data.hours);data.months=mathAbs(data.months);data.years=mathAbs(data.years);return this}function duration_add_subtract__addSubtract(duration,input,value,direction){var other=create__createDuration(input,value);duration._milliseconds+=direction*other._milliseconds;duration._days+=direction*other._days;duration._months+=direction*other._months;return duration._bubble()}function duration_add_subtract__add(input,value){return duration_add_subtract__addSubtract(this,input,value,1)}function duration_add_subtract__subtract(input,value){return duration_add_subtract__addSubtract(this,input,value,-1)}function absCeil(number){if(number<0){return Math.floor(number)}else{return Math.ceil(number)}}function bubble(){var milliseconds=this._milliseconds;var days=this._days;var months=this._months;var data=this._data;var seconds,minutes,hours,years,monthsFromDays;if(!(milliseconds>=0&&days>=0&&months>=0||milliseconds<=0&&days<=0&&months<=0)){milliseconds+=absCeil(monthsToDays(months)+days)*864e5;days=0;months=0}data.milliseconds=milliseconds%1e3;seconds=absFloor(milliseconds/1e3);data.seconds=seconds%60;minutes=absFloor(seconds/60);data.minutes=minutes%60;hours=absFloor(minutes/60);data.hours=hours%24;days+=absFloor(hours/24);monthsFromDays=absFloor(daysToMonths(days));months+=monthsFromDays;days-=absCeil(monthsToDays(monthsFromDays));years=absFloor(months/12);months%=12;data.days=days;data.months=months;data.years=years;return this}function daysToMonths(days){return days*4800/146097}function monthsToDays(months){return months*146097/4800}function as(units){var days;var months;var milliseconds=this._milliseconds;units=normalizeUnits(units);if(units==="month"||units==="year"){days=this._days+milliseconds/864e5;months=this._months+daysToMonths(days);return units==="month"?months:months/12}else{days=this._days+Math.round(monthsToDays(this._months));switch(units){case"week":return days/7+milliseconds/6048e5;case"day":return days+milliseconds/864e5;case"hour":return days*24+milliseconds/36e5;case"minute":return days*1440+milliseconds/6e4;case"second":return days*86400+milliseconds/1e3;case"millisecond":return Math.floor(days*864e5)+milliseconds;default:throw new Error("Unknown unit "+units)}}}function duration_as__valueOf(){return this._milliseconds+this._days*864e5+this._months%12*2592e6+toInt(this._months/12)*31536e6}function makeAs(alias){return function(){return this.as(alias)}}var asMilliseconds=makeAs("ms");var asSeconds=makeAs("s");var asMinutes=makeAs("m");var asHours=makeAs("h");var asDays=makeAs("d");var asWeeks=makeAs("w");var asMonths=makeAs("M");var asYears=makeAs("y");function duration_get__get(units){units=normalizeUnits(units);return this[units+"s"]()}function makeGetter(name){return function(){return this._data[name]}}var milliseconds=makeGetter("milliseconds");var seconds=makeGetter("seconds");var minutes=makeGetter("minutes");var hours=makeGetter("hours");var days=makeGetter("days");var months=makeGetter("months");var years=makeGetter("years");function weeks(){return absFloor(this.days()/7)}var round=Math.round;var thresholds={s:45,m:45,h:22,d:26,M:11};function substituteTimeAgo(string,number,withoutSuffix,isFuture,locale){return locale.relativeTime(number||1,!!withoutSuffix,string,isFuture)}function duration_humanize__relativeTime(posNegDuration,withoutSuffix,locale){var duration=create__createDuration(posNegDuration).abs();var seconds=round(duration.as("s"));var minutes=round(duration.as("m"));var hours=round(duration.as("h"));var days=round(duration.as("d"));var months=round(duration.as("M"));var years=round(duration.as("y"));var a=seconds0;a[4]=locale;return substituteTimeAgo.apply(null,a)}function duration_humanize__getSetRelativeTimeRounding(roundingFunction){if(roundingFunction===undefined){return round}if(typeof roundingFunction==="function"){round=roundingFunction;return true}return false}function duration_humanize__getSetRelativeTimeThreshold(threshold,limit){if(thresholds[threshold]===undefined){return false}if(limit===undefined){return thresholds[threshold]}thresholds[threshold]=limit;return true}function humanize(withSuffix){var locale=this.localeData();var output=duration_humanize__relativeTime(this,!withSuffix,locale);if(withSuffix){output=locale.pastFuture(+this,output)}return locale.postformat(output)}var iso_string__abs=Math.abs;function iso_string__toISOString(){var seconds=iso_string__abs(this._milliseconds)/1e3;var days=iso_string__abs(this._days);var months=iso_string__abs(this._months);var minutes,hours,years;minutes=absFloor(seconds/60);hours=absFloor(minutes/60);seconds%=60;minutes%=60;years=absFloor(months/12);months%=12;var Y=years;var M=months;var D=days;var h=hours;var m=minutes;var s=seconds;var total=this.asSeconds();if(!total){return"P0D"}return(total<0?"-":"")+"P"+(Y?Y+"Y":"")+(M?M+"M":"")+(D?D+"D":"")+(h||m||s?"T":"")+(h?h+"H":"")+(m?m+"M":"")+(s?s+"S":"")}var duration_prototype__proto=Duration.prototype;duration_prototype__proto.abs=duration_abs__abs;duration_prototype__proto.add=duration_add_subtract__add;duration_prototype__proto.subtract=duration_add_subtract__subtract;duration_prototype__proto.as=as;duration_prototype__proto.asMilliseconds=asMilliseconds;duration_prototype__proto.asSeconds=asSeconds;duration_prototype__proto.asMinutes=asMinutes;duration_prototype__proto.asHours=asHours;duration_prototype__proto.asDays=asDays;duration_prototype__proto.asWeeks=asWeeks;duration_prototype__proto.asMonths=asMonths;duration_prototype__proto.asYears=asYears;duration_prototype__proto.valueOf=duration_as__valueOf;duration_prototype__proto._bubble=bubble;duration_prototype__proto.get=duration_get__get;duration_prototype__proto.milliseconds=milliseconds;duration_prototype__proto.seconds=seconds;duration_prototype__proto.minutes=minutes;duration_prototype__proto.hours=hours;duration_prototype__proto.days=days;duration_prototype__proto.weeks=weeks;duration_prototype__proto.months=months;duration_prototype__proto.years=years;duration_prototype__proto.humanize=humanize;duration_prototype__proto.toISOString=iso_string__toISOString;duration_prototype__proto.toString=iso_string__toISOString;duration_prototype__proto.toJSON=iso_string__toISOString;duration_prototype__proto.locale=locale;duration_prototype__proto.localeData=localeData;duration_prototype__proto.toIsoString=deprecate("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",iso_string__toISOString);duration_prototype__proto.lang=lang;addFormatToken("X",0,0,"unix");addFormatToken("x",0,0,"valueOf");addRegexToken("x",matchSigned);addRegexToken("X",matchTimestamp);addParseToken("X",function(input,array,config){config._d=new Date(parseFloat(input,10)*1e3)});addParseToken("x",function(input,array,config){config._d=new Date(toInt(input))});utils_hooks__hooks.version="2.14.1";setHookCallback(local__createLocal);utils_hooks__hooks.fn=momentPrototype;utils_hooks__hooks.min=min;utils_hooks__hooks.max=max;utils_hooks__hooks.now=now;utils_hooks__hooks.utc=create_utc__createUTC;utils_hooks__hooks.unix=moment__createUnix;utils_hooks__hooks.months=lists__listMonths;utils_hooks__hooks.isDate=isDate;utils_hooks__hooks.locale=locale_locales__getSetGlobalLocale;utils_hooks__hooks.invalid=valid__createInvalid;utils_hooks__hooks.duration=create__createDuration;utils_hooks__hooks.isMoment=isMoment;utils_hooks__hooks.weekdays=lists__listWeekdays;utils_hooks__hooks.parseZone=moment__createInZone;utils_hooks__hooks.localeData=locale_locales__getLocale;utils_hooks__hooks.isDuration=isDuration;utils_hooks__hooks.monthsShort=lists__listMonthsShort;utils_hooks__hooks.weekdaysMin=lists__listWeekdaysMin;utils_hooks__hooks.defineLocale=defineLocale;utils_hooks__hooks.updateLocale=updateLocale;utils_hooks__hooks.locales=locale_locales__listLocales;utils_hooks__hooks.weekdaysShort=lists__listWeekdaysShort;utils_hooks__hooks.normalizeUnits=normalizeUnits;utils_hooks__hooks.relativeTimeRounding=duration_humanize__getSetRelativeTimeRounding;utils_hooks__hooks.relativeTimeThreshold=duration_humanize__getSetRelativeTimeThreshold;utils_hooks__hooks.calendarFormat=getCalendarFormat;utils_hooks__hooks.prototype=momentPrototype;var _moment=utils_hooks__hooks;return _moment})},{}],9:[function(require,module,exports){"use strict";var focusNode=require("./focusNode");var AutoFocusMixin={componentDidMount:function(){if(this.props.autoFocus){focusNode(this.getDOMNode())}}};module.exports=AutoFocusMixin},{"./focusNode":127}],10:[function(require,module,exports){"use strict";var EventConstants=require("./EventConstants");var EventPropagators=require("./EventPropagators");var ExecutionEnvironment=require("./ExecutionEnvironment");var FallbackCompositionState=require("./FallbackCompositionState");var SyntheticCompositionEvent=require("./SyntheticCompositionEvent");var SyntheticInputEvent=require("./SyntheticInputEvent");var keyOf=require("./keyOf");var END_KEYCODES=[9,13,27,32];var START_KEYCODE=229;var canUseCompositionEvent=ExecutionEnvironment.canUseDOM&&"CompositionEvent"in window;var documentMode=null;if(ExecutionEnvironment.canUseDOM&&"documentMode"in document){documentMode=document.documentMode}var canUseTextInputEvent=ExecutionEnvironment.canUseDOM&&"TextEvent"in window&&!documentMode&&!isPresto();var useFallbackCompositionData=ExecutionEnvironment.canUseDOM&&(!canUseCompositionEvent||documentMode&&documentMode>8&&documentMode<=11);function isPresto(){var opera=window.opera;return typeof opera==="object"&&typeof opera.version==="function"&&parseInt(opera.version(),10)<=12}var SPACEBAR_CODE=32;var SPACEBAR_CHAR=String.fromCharCode(SPACEBAR_CODE);var topLevelTypes=EventConstants.topLevelTypes;var eventTypes={beforeInput:{phasedRegistrationNames:{bubbled:keyOf({onBeforeInput:null}),captured:keyOf({onBeforeInputCapture:null})},dependencies:[topLevelTypes.topCompositionEnd,topLevelTypes.topKeyPress,topLevelTypes.topTextInput,topLevelTypes.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:keyOf({onCompositionEnd:null}),captured:keyOf({onCompositionEndCapture:null})},dependencies:[topLevelTypes.topBlur,topLevelTypes.topCompositionEnd,topLevelTypes.topKeyDown,topLevelTypes.topKeyPress,topLevelTypes.topKeyUp,topLevelTypes.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:keyOf({onCompositionStart:null}),captured:keyOf({onCompositionStartCapture:null})},dependencies:[topLevelTypes.topBlur,topLevelTypes.topCompositionStart,topLevelTypes.topKeyDown,topLevelTypes.topKeyPress,topLevelTypes.topKeyUp,topLevelTypes.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:keyOf({onCompositionUpdate:null}),captured:keyOf({onCompositionUpdateCapture:null})},dependencies:[topLevelTypes.topBlur,topLevelTypes.topCompositionUpdate,topLevelTypes.topKeyDown,topLevelTypes.topKeyPress,topLevelTypes.topKeyUp,topLevelTypes.topMouseDown]}};var hasSpaceKeypress=false;function isKeypressCommand(nativeEvent){return(nativeEvent.ctrlKey||nativeEvent.altKey||nativeEvent.metaKey)&&!(nativeEvent.ctrlKey&&nativeEvent.altKey)}function getCompositionEventType(topLevelType){switch(topLevelType){case topLevelTypes.topCompositionStart:return eventTypes.compositionStart;case topLevelTypes.topCompositionEnd:return eventTypes.compositionEnd;case topLevelTypes.topCompositionUpdate:return eventTypes.compositionUpdate}}function isFallbackCompositionStart(topLevelType,nativeEvent){return topLevelType===topLevelTypes.topKeyDown&&nativeEvent.keyCode===START_KEYCODE}function isFallbackCompositionEnd(topLevelType,nativeEvent){switch(topLevelType){case topLevelTypes.topKeyUp:return END_KEYCODES.indexOf(nativeEvent.keyCode)!==-1;case topLevelTypes.topKeyDown:return nativeEvent.keyCode!==START_KEYCODE;case topLevelTypes.topKeyPress:case topLevelTypes.topMouseDown:case topLevelTypes.topBlur:return true;default:return false}}function getDataFromCustomEvent(nativeEvent){var detail=nativeEvent.detail;if(typeof detail==="object"&&"data"in detail){return detail.data}return null}var currentComposition=null;function extractCompositionEvent(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var eventType;var fallbackData;if(canUseCompositionEvent){eventType=getCompositionEventType(topLevelType)}else if(!currentComposition){if(isFallbackCompositionStart(topLevelType,nativeEvent)){eventType=eventTypes.compositionStart}}else if(isFallbackCompositionEnd(topLevelType,nativeEvent)){eventType=eventTypes.compositionEnd}if(!eventType){return null}if(useFallbackCompositionData){if(!currentComposition&&eventType===eventTypes.compositionStart){currentComposition=FallbackCompositionState.getPooled(topLevelTarget)}else if(eventType===eventTypes.compositionEnd){if(currentComposition){fallbackData=currentComposition.getData()}}}var event=SyntheticCompositionEvent.getPooled(eventType,topLevelTargetID,nativeEvent);if(fallbackData){event.data=fallbackData}else{var customData=getDataFromCustomEvent(nativeEvent);if(customData!==null){event.data=customData}}EventPropagators.accumulateTwoPhaseDispatches(event);return event}function getNativeBeforeInputChars(topLevelType,nativeEvent){switch(topLevelType){case topLevelTypes.topCompositionEnd:return getDataFromCustomEvent(nativeEvent);case topLevelTypes.topKeyPress:var which=nativeEvent.which;if(which!==SPACEBAR_CODE){return null}hasSpaceKeypress=true;return SPACEBAR_CHAR;case topLevelTypes.topTextInput:var chars=nativeEvent.data;if(chars===SPACEBAR_CHAR&&hasSpaceKeypress){return null}return chars;default:return null}}function getFallbackBeforeInputChars(topLevelType,nativeEvent){if(currentComposition){if(topLevelType===topLevelTypes.topCompositionEnd||isFallbackCompositionEnd(topLevelType,nativeEvent)){var chars=currentComposition.getData();FallbackCompositionState.release(currentComposition);currentComposition=null;return chars}return null}switch(topLevelType){case topLevelTypes.topPaste:return null;case topLevelTypes.topKeyPress:if(nativeEvent.which&&!isKeypressCommand(nativeEvent)){return String.fromCharCode(nativeEvent.which)}return null;case topLevelTypes.topCompositionEnd:return useFallbackCompositionData?null:nativeEvent.data;default:return null}}function extractBeforeInputEvent(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var chars;if(canUseTextInputEvent){chars=getNativeBeforeInputChars(topLevelType,nativeEvent)}else{chars=getFallbackBeforeInputChars(topLevelType,nativeEvent)}if(!chars){return null}var event=SyntheticInputEvent.getPooled(eventTypes.beforeInput,topLevelTargetID,nativeEvent);event.data=chars;EventPropagators.accumulateTwoPhaseDispatches(event);return event}var BeforeInputEventPlugin={eventTypes:eventTypes,extractEvents:function(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){return[extractCompositionEvent(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent),extractBeforeInputEvent(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent)]}};module.exports=BeforeInputEventPlugin},{"./EventConstants":22,"./EventPropagators":27,"./ExecutionEnvironment":28,"./FallbackCompositionState":29,"./SyntheticCompositionEvent":101,"./SyntheticInputEvent":105,
-"./keyOf":149}],11:[function(require,module,exports){"use strict";var isUnitlessNumber={boxFlex:true,boxFlexGroup:true,columnCount:true,flex:true,flexGrow:true,flexPositive:true,flexShrink:true,flexNegative:true,fontWeight:true,lineClamp:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true,fillOpacity:true,strokeDashoffset:true,strokeOpacity:true,strokeWidth:true};function prefixKey(prefix,key){return prefix+key.charAt(0).toUpperCase()+key.substring(1)}var prefixes=["Webkit","ms","Moz","O"];Object.keys(isUnitlessNumber).forEach(function(prop){prefixes.forEach(function(prefix){isUnitlessNumber[prefixKey(prefix,prop)]=isUnitlessNumber[prop]})});var shorthandPropertyExpansions={background:{backgroundImage:true,backgroundPosition:true,backgroundRepeat:true,backgroundColor:true},border:{borderWidth:true,borderStyle:true,borderColor:true},borderBottom:{borderBottomWidth:true,borderBottomStyle:true,borderBottomColor:true},borderLeft:{borderLeftWidth:true,borderLeftStyle:true,borderLeftColor:true},borderRight:{borderRightWidth:true,borderRightStyle:true,borderRightColor:true},borderTop:{borderTopWidth:true,borderTopStyle:true,borderTopColor:true},font:{fontStyle:true,fontVariant:true,fontWeight:true,fontSize:true,lineHeight:true,fontFamily:true}};var CSSProperty={isUnitlessNumber:isUnitlessNumber,shorthandPropertyExpansions:shorthandPropertyExpansions};module.exports=CSSProperty},{}],12:[function(require,module,exports){"use strict";var CSSProperty=require("./CSSProperty");var ExecutionEnvironment=require("./ExecutionEnvironment");var camelizeStyleName=require("./camelizeStyleName");var dangerousStyleValue=require("./dangerousStyleValue");var hyphenateStyleName=require("./hyphenateStyleName");var memoizeStringOnly=require("./memoizeStringOnly");var warning=require("./warning");var processStyleName=memoizeStringOnly(function(styleName){return hyphenateStyleName(styleName)});var styleFloatAccessor="cssFloat";if(ExecutionEnvironment.canUseDOM){if(document.documentElement.style.cssFloat===undefined){styleFloatAccessor="styleFloat"}}if("production"!=="production"){var badVendoredStyleNamePattern=/^(?:webkit|moz|o)[A-Z]/;var badStyleValueWithSemicolonPattern=/;\s*$/;var warnedStyleNames={};var warnedStyleValues={};var warnHyphenatedStyleName=function(name){if(warnedStyleNames.hasOwnProperty(name)&&warnedStyleNames[name]){return}warnedStyleNames[name]=true;"production"!=="production"?warning(false,"Unsupported style property %s. Did you mean %s?",name,camelizeStyleName(name)):null};var warnBadVendoredStyleName=function(name){if(warnedStyleNames.hasOwnProperty(name)&&warnedStyleNames[name]){return}warnedStyleNames[name]=true;"production"!=="production"?warning(false,"Unsupported vendor-prefixed style property %s. Did you mean %s?",name,name.charAt(0).toUpperCase()+name.slice(1)):null};var warnStyleValueWithSemicolon=function(name,value){if(warnedStyleValues.hasOwnProperty(value)&&warnedStyleValues[value]){return}warnedStyleValues[value]=true;"production"!=="production"?warning(false,"Style property values shouldn't contain a semicolon. "+'Try "%s: %s" instead.',name,value.replace(badStyleValueWithSemicolonPattern,"")):null};var warnValidStyle=function(name,value){if(name.indexOf("-")>-1){warnHyphenatedStyleName(name)}else if(badVendoredStyleNamePattern.test(name)){warnBadVendoredStyleName(name)}else if(badStyleValueWithSemicolonPattern.test(value)){warnStyleValueWithSemicolon(name,value)}}}var CSSPropertyOperations={createMarkupForStyles:function(styles){var serialized="";for(var styleName in styles){if(!styles.hasOwnProperty(styleName)){continue}var styleValue=styles[styleName];if("production"!=="production"){warnValidStyle(styleName,styleValue)}if(styleValue!=null){serialized+=processStyleName(styleName)+":";serialized+=dangerousStyleValue(styleName,styleValue)+";"}}return serialized||null},setValueForStyles:function(node,styles){var style=node.style;for(var styleName in styles){if(!styles.hasOwnProperty(styleName)){continue}if("production"!=="production"){warnValidStyle(styleName,styles[styleName])}var styleValue=dangerousStyleValue(styleName,styles[styleName]);if(styleName==="float"){styleName=styleFloatAccessor}if(styleValue){style[styleName]=styleValue}else{var expansion=CSSProperty.shorthandPropertyExpansions[styleName];if(expansion){for(var individualStyleName in expansion){style[individualStyleName]=""}}else{style[styleName]=""}}}}};module.exports=CSSPropertyOperations},{"./CSSProperty":11,"./ExecutionEnvironment":28,"./camelizeStyleName":116,"./dangerousStyleValue":121,"./hyphenateStyleName":141,"./memoizeStringOnly":151,"./warning":162}],13:[function(require,module,exports){"use strict";var PooledClass=require("./PooledClass");var assign=require("./Object.assign");var invariant=require("./invariant");function CallbackQueue(){this._callbacks=null;this._contexts=null}assign(CallbackQueue.prototype,{enqueue:function(callback,context){this._callbacks=this._callbacks||[];this._contexts=this._contexts||[];this._callbacks.push(callback);this._contexts.push(context)},notifyAll:function(){var callbacks=this._callbacks;var contexts=this._contexts;if(callbacks){"production"!=="production"?invariant(callbacks.length===contexts.length,"Mismatched list of contexts in callback queue"):invariant(callbacks.length===contexts.length);this._callbacks=null;this._contexts=null;for(var i=0,l=callbacks.length;i8)}function manualDispatchChangeEvent(nativeEvent){var event=SyntheticEvent.getPooled(eventTypes.change,activeElementID,nativeEvent);EventPropagators.accumulateTwoPhaseDispatches(event);ReactUpdates.batchedUpdates(runEventInBatch,event)}function runEventInBatch(event){EventPluginHub.enqueueEvents(event);EventPluginHub.processEventQueue()}function startWatchingForChangeEventIE8(target,targetID){activeElement=target;activeElementID=targetID;activeElement.attachEvent("onchange",manualDispatchChangeEvent)}function stopWatchingForChangeEventIE8(){if(!activeElement){return}activeElement.detachEvent("onchange",manualDispatchChangeEvent);activeElement=null;activeElementID=null}function getTargetIDForChangeEvent(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType===topLevelTypes.topChange){return topLevelTargetID}}function handleEventsForChangeEventIE8(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType===topLevelTypes.topFocus){stopWatchingForChangeEventIE8();startWatchingForChangeEventIE8(topLevelTarget,topLevelTargetID)}else if(topLevelType===topLevelTypes.topBlur){stopWatchingForChangeEventIE8()}}var isInputEventSupported=false;if(ExecutionEnvironment.canUseDOM){isInputEventSupported=isEventSupported("input")&&(!("documentMode"in document)||document.documentMode>9)}var newValueProp={get:function(){return activeElementValueProp.get.call(this)},set:function(val){activeElementValue=""+val;activeElementValueProp.set.call(this,val)}};function startWatchingForValueChange(target,targetID){activeElement=target;activeElementID=targetID;activeElementValue=target.value;activeElementValueProp=Object.getOwnPropertyDescriptor(target.constructor.prototype,"value");Object.defineProperty(activeElement,"value",newValueProp);activeElement.attachEvent("onpropertychange",handlePropertyChange)}function stopWatchingForValueChange(){if(!activeElement){return}delete activeElement.value;activeElement.detachEvent("onpropertychange",handlePropertyChange);activeElement=null;activeElementID=null;activeElementValue=null;activeElementValueProp=null}function handlePropertyChange(nativeEvent){if(nativeEvent.propertyName!=="value"){return}var value=nativeEvent.srcElement.value;if(value===activeElementValue){return}activeElementValue=value;manualDispatchChangeEvent(nativeEvent)}function getTargetIDForInputEvent(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType===topLevelTypes.topInput){return topLevelTargetID}}function handleEventsForInputEventIE(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType===topLevelTypes.topFocus){stopWatchingForValueChange();startWatchingForValueChange(topLevelTarget,topLevelTargetID)}else if(topLevelType===topLevelTypes.topBlur){stopWatchingForValueChange()}}function getTargetIDForInputEventIE(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType===topLevelTypes.topSelectionChange||topLevelType===topLevelTypes.topKeyUp||topLevelType===topLevelTypes.topKeyDown){if(activeElement&&activeElement.value!==activeElementValue){activeElementValue=activeElement.value;return activeElementID}}}function shouldUseClickEvent(elem){return elem.nodeName==="INPUT"&&(elem.type==="checkbox"||elem.type==="radio")}function getTargetIDForClickEvent(topLevelType,topLevelTarget,topLevelTargetID){if(topLevelType===topLevelTypes.topClick){return topLevelTargetID}}var ChangeEventPlugin={eventTypes:eventTypes,extractEvents:function(topLevelType,topLevelTarget,topLevelTargetID,nativeEvent){var getTargetIDFunc,handleEventFunc;if(shouldUseChangeEvent(topLevelTarget)){if(doesChangeEventBubble){getTargetIDFunc=getTargetIDForChangeEvent}else{handleEventFunc=handleEventsForChangeEventIE8}}else if(isTextInputElement(topLevelTarget)){if(isInputEventSupported){getTargetIDFunc=getTargetIDForInputEvent}else{getTargetIDFunc=getTargetIDForInputEventIE;handleEventFunc=handleEventsForInputEventIE}}else if(shouldUseClickEvent(topLevelTarget)){getTargetIDFunc=getTargetIDForClickEvent}if(getTargetIDFunc){var targetID=getTargetIDFunc(topLevelType,topLevelTarget,topLevelTargetID);if(targetID){var event=SyntheticEvent.getPooled(eventTypes.change,targetID,nativeEvent);EventPropagators.accumulateTwoPhaseDispatches(event);return event}}if(handleEventFunc){handleEventFunc(topLevelType,topLevelTarget,topLevelTargetID)}}};module.exports=ChangeEventPlugin},{"./EventConstants":22,"./EventPluginHub":24,"./EventPropagators":27,"./ExecutionEnvironment":28,"./ReactUpdates":95,"./SyntheticEvent":103,"./isEventSupported":144,"./isTextInputElement":146,"./keyOf":149}],15:[function(require,module,exports){"use strict";var nextReactRootIndex=0;var ClientReactRootIndex={createReactRootIndex:function(){return nextReactRootIndex++}};module.exports=ClientReactRootIndex},{}],16:[function(require,module,exports){"use strict";var Danger=require("./Danger");var ReactMultiChildUpdateTypes=require("./ReactMultiChildUpdateTypes");var setTextContent=require("./setTextContent");var invariant=require("./invariant");function insertChildAt(parentNode,childNode,index){parentNode.insertBefore(childNode,parentNode.childNodes[index]||null)}var DOMChildrenOperations={dangerouslyReplaceNodeWithMarkup:Danger.dangerouslyReplaceNodeWithMarkup,updateTextContent:setTextContent,processUpdates:function(updates,markupList){var update;var initialChildren=null;var updatedChildren=null;for(var i=0;i when using tables, "+"nesting tags like