Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

gemini-gui

Package Overview
Dependencies
Maintainers
3
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gemini-gui - npm Package Compare versions

Comparing version 0.3.1 to 0.3.2

6

CHANGELOG.md
# Changelog
## 0.3.2 - 2015-11-02
* Correctly mark tests from different suite paths in html-report (@sipayrt).
* Add ability to pass arguments to gemini config (@sipayrt).
* Run tests only in browsers from sets (@sipayrt).
## 0.3.1 - 2015-10-06

@@ -4,0 +10,0 @@

8

lib/app.js

@@ -30,8 +30,8 @@ 'use strict';

var Gemini = findGemini();
this._gemini = new Gemini(options.configFile, options);
this.browserIds = this._gemini.browserIds;
this._gemini = new Gemini(options.configFile, {cli: true, env: true});
var browserIds = this._gemini.browserIds;
this.referenceDirs = _.zipObject(
this.browserIds,
this.browserIds.map(function(browserId) {
browserIds,
browserIds.map(function(browserId) {
return this._gemini.config.forBrowser(browserId).screenshotsDir;

@@ -38,0 +38,0 @@ }.bind(this))

@@ -6,73 +6,24 @@ 'use strict';

pkg = require('../package.json'),
server = require('./server');
server = require('./server'),
program = require('commander');
module.exports = require('coa').Cmd()
.name(process.argv[1])
.title(pkg.description)
.helpful()
.opt()
.name('version')
.title('Show version')
.long('version')
.flag()
.end()
.opt()
.name('port')
.title('Port to launch server on')
.long('port')
.short('p')
.def(8000)
.end()
.opt()
.name('hostname')
.title('Hostname to launch server on')
.long('hostname')
.short('h')
.def('localhost')
.end()
.opt()
.name('configFile')
.title('Gemini config file')
.long('config')
.short('c')
.val(function(config) {
return path.resolve(config);
})
.end()
.opt()
.name('rootUrl')
.long('root-url').short('r')
.title('Override root url')
.end()
.opt()
.name('gridUrl')
.long('grid-url').short('g')
.title('Override grid url')
.end()
.opt()
.name('screenshotsDir')
.long('screenshots-dir').short('s')
.title('Override screenshots dir')
.end()
.opt()
.name('debug')
.long('debug')
.flag()
.title('Turn on debugging output to the console')
.end()
.arg()
.name('testFiles')
.title('Paths to files or directories, containing tests')
.arr()
.end()
.act(function(options, args) {
if (options.version) {
return pkg.version;
}
exports.run = function() {
program
.version(pkg.version)
.allowUnknownOption(true)
.option('-p, --port <port>', 'Port to launch server on', 8000)
.option('-h, --hostname <hostname>', 'Hostname to launch server on', 'localhost')
.option('-c, --config <file>', 'Gemini config file', path.resolve)
.parse(process.argv);
options.testFiles = args.testFiles;
return server.start(options).then(function(result) {
console.log('GUI is running at %s', chalk.cyan(result.url));
opener(result.url);
});
program.on('--help', function() {
console.log('Also you can override gemini config options.');
console.log('See all possible options in gemini documentation.');
});
program.testFiles = [].concat(program.args);
server.start(program).then(function(result) {
console.log('GUI is running at %s', chalk.cyan(result.url));
opener(result.url);
}).done();
};

@@ -94,3 +94,3 @@ /*jshint browser:true*/

var query = {
suite: {id: domNode.getAttribute('data-suite-id')},
suite: {path: domNode.getAttribute('data-suite-path')},
state: {name: domNode.getAttribute('data-state-name')},

@@ -97,0 +97,0 @@ browserId: domNode.getAttribute('data-browser-id')

@@ -33,3 +33,3 @@ 'use strict';

function Section(node, parent) {
this.suite = {id: node.getAttribute('data-suite-id')};
this.suite = {path: node.getAttribute('data-suite-path')};
this.state = {name: node.getAttribute('data-state-name')};

@@ -36,0 +36,0 @@ this.browserId = node.getAttribute('data-browser-id');

@@ -11,9 +11,9 @@ 'use strict';

add: function(item) {
if (!item.suite || item.suite.id == null) {
if (!item.suite || item.suite.path == null) {
return;
}
var indexData = this._index[item.suite.id];
var indexData = this._index[item.suite.path];
if (!indexData) {
indexData = this._index[item.suite.id] = {
indexData = this._index[item.suite.path] = {
suite: null,

@@ -45,3 +45,3 @@ states: {}

find: function(query) {
var indexData = query.suite && this._index[query.suite.id];
var indexData = query.suite && this._index[query.suite.path];
if (!indexData) {

@@ -48,0 +48,0 @@ return null;

(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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";function SectionList(){this._sectionsIndex=new Index,this._sections=map.call(document.querySelectorAll(".section"),function(t){var e=this._findParentSectionNode(t),n=new Section(t,e&&this._sectionForNode(e));return this._sectionsIndex.add(n),n},this)}var Section=require("./section"),Index=require("../common/tests-index"),map=Array.prototype.map,every=Array.prototype.every;SectionList.prototype={constructor:SectionList,expandAll:function(){this._sections.forEach(function(t){t.expand()})},collapseAll:function(){this._sections.forEach(function(t){t.collapse()})},expandErrors:function(){this._sections.forEach(function(t){t.expandIfError()})},markAllAsQueued:function(){this._sections.forEach(function(t){t.status="queued"})},markIfFinished:function(t){if("fail"!==t.status){var e=t.domNode.querySelectorAll(".section"),n=every.call(e,function(t){return this._sectionForNode(t).isFinished()},this);n&&(t.status="success")}},findSection:function(t){return this._sectionsIndex.find(t)},findParent:function(t){if(t.browserId)return this.findSection({suite:t.suite,state:t.state});if(t.state&&t.state.name)return this.findSection({suite:t.suite});var e=this._findParentSectionNode(t.domNode);return e?this._sectionForNode(e):null},_findParentSectionNode:function(t){for(;t=t.parentNode;)if(t.classList&&t.classList.contains("section"))return t;return null},_sectionForNode:function(t){var e={suite:{id:t.getAttribute("data-suite-id")},state:{name:t.getAttribute("data-state-name")},browserId:t.getAttribute("data-browser-id")};return this.findSection(e)}},module.exports=SectionList;
"use strict";function SectionList(){this._sectionsIndex=new Index,this._sections=map.call(document.querySelectorAll(".section"),function(t){var e=this._findParentSectionNode(t),n=new Section(t,e&&this._sectionForNode(e));return this._sectionsIndex.add(n),n},this)}var Section=require("./section"),Index=require("../common/tests-index"),map=Array.prototype.map,every=Array.prototype.every;SectionList.prototype={constructor:SectionList,expandAll:function(){this._sections.forEach(function(t){t.expand()})},collapseAll:function(){this._sections.forEach(function(t){t.collapse()})},expandErrors:function(){this._sections.forEach(function(t){t.expandIfError()})},markAllAsQueued:function(){this._sections.forEach(function(t){t.status="queued"})},markIfFinished:function(t){if("fail"!==t.status){var e=t.domNode.querySelectorAll(".section"),n=every.call(e,function(t){return this._sectionForNode(t).isFinished()},this);n&&(t.status="success")}},findSection:function(t){return this._sectionsIndex.find(t)},findParent:function(t){if(t.browserId)return this.findSection({suite:t.suite,state:t.state});if(t.state&&t.state.name)return this.findSection({suite:t.suite});var e=this._findParentSectionNode(t.domNode);return e?this._sectionForNode(e):null},_findParentSectionNode:function(t){for(;t=t.parentNode;)if(t.classList&&t.classList.contains("section"))return t;return null},_sectionForNode:function(t){var e={suite:{path:t.getAttribute("data-suite-path")},state:{name:t.getAttribute("data-state-name")},browserId:t.getAttribute("data-browser-id")};return this.findSection(e)}},module.exports=SectionList;
},{"../common/tests-index":5,"./section":2}],2:[function(require,module,exports){
"use strict";function statusClass(t){return"section_status_"+t}function getInitialStatus(t){for(var s,e=0;e<statusList.length;e++)if(s=statusList[e],t.classList.contains(statusClass(s)))return s;return null}function Section(t,s){this.suite={id:t.getAttribute("data-suite-id")},this.state={name:t.getAttribute("data-state-name")},this.browserId=t.getAttribute("data-browser-id"),this.domNode=t,this._status=getInitialStatus(t),this._titleNode=t.querySelector(".section__title"),this._bodyNode=t.querySelector(".section__body"),this._titleNode.addEventListener("click",this.toggle.bind(this)),this._parent=s}var successTemplate=require("../views/partials/success-result.hbs"),failTemplate=require("../views/partials/fail-result.hbs"),errorTemplate=require("../views/partials/error-result.hbs"),skipTemplate=require("../views/partials/skip-result.hbs"),xhr=require("./xhr"),statusList=["idle","queued","running","success","fail","skip"];Section.prototype={constructor:Section,expand:function(){this.domNode.classList.remove("section_collapsed")},collapse:function(){this.domNode.classList.add("section_collapsed")},toggle:function(){this.domNode.classList.toggle("section_collapsed")},get status(){return this._status},set status(t){this._status&&this.domNode.classList.remove(statusClass(this._status)),this._status=t,this.domNode.classList.add(statusClass(this._status))},expandIfError:function(){"fail"===this.status?this.expand():this.collapse()},setAsFailure:function(t){this.status="fail",this._bodyNode.innerHTML=failTemplate(t);var s=this._bodyNode.querySelector(".image-box__replace");s.addEventListener("click",this.updateReference.bind(this))},setAsSuccess:function(t){var s=this.domNode.querySelector(".section."+statusClass("fail"));s||(this.status="success",t&&(this._bodyNode.innerHTML=successTemplate(t)),this._parent&&"fail"===this._parent.status&&this._parent.setAsSuccess())},setAsSkipped:function(){this.status="skipped",this._bodyNode.innerHTML=skipTemplate()},setAsError:function(t){this.status="fail",this._bodyNode.innerHTML=errorTemplate(t)},isFinished:function(){return"queued"!==this.status&&"running"!==this.status},updateReference:function(){var t=this,s={suite:this.suite,state:this.state,browserId:this.browserId};xhr.post("/update-ref",s,function(s,e){s||t.setAsSuccess(e)})}},module.exports=Section;
"use strict";function statusClass(t){return"section_status_"+t}function getInitialStatus(t){for(var s,e=0;e<statusList.length;e++)if(s=statusList[e],t.classList.contains(statusClass(s)))return s;return null}function Section(t,s){this.suite={path:t.getAttribute("data-suite-path")},this.state={name:t.getAttribute("data-state-name")},this.browserId=t.getAttribute("data-browser-id"),this.domNode=t,this._status=getInitialStatus(t),this._titleNode=t.querySelector(".section__title"),this._bodyNode=t.querySelector(".section__body"),this._titleNode.addEventListener("click",this.toggle.bind(this)),this._parent=s}var successTemplate=require("../views/partials/success-result.hbs"),failTemplate=require("../views/partials/fail-result.hbs"),errorTemplate=require("../views/partials/error-result.hbs"),skipTemplate=require("../views/partials/skip-result.hbs"),xhr=require("./xhr"),statusList=["idle","queued","running","success","fail","skip"];Section.prototype={constructor:Section,expand:function(){this.domNode.classList.remove("section_collapsed")},collapse:function(){this.domNode.classList.add("section_collapsed")},toggle:function(){this.domNode.classList.toggle("section_collapsed")},get status(){return this._status},set status(t){this._status&&this.domNode.classList.remove(statusClass(this._status)),this._status=t,this.domNode.classList.add(statusClass(this._status))},expandIfError:function(){"fail"===this.status?this.expand():this.collapse()},setAsFailure:function(t){this.status="fail",this._bodyNode.innerHTML=failTemplate(t);var s=this._bodyNode.querySelector(".image-box__replace");s.addEventListener("click",this.updateReference.bind(this))},setAsSuccess:function(t){var s=this.domNode.querySelector(".section."+statusClass("fail"));s||(this.status="success",t&&(this._bodyNode.innerHTML=successTemplate(t)),this._parent&&"fail"===this._parent.status&&this._parent.setAsSuccess())},setAsSkipped:function(){this.status="skipped",this._bodyNode.innerHTML=skipTemplate()},setAsError:function(t){this.status="fail",this._bodyNode.innerHTML=errorTemplate(t)},isFinished:function(){return"queued"!==this.status&&"running"!==this.status},updateReference:function(){var t=this,s={suite:this.suite,state:this.state,browserId:this.browserId};xhr.post("/update-ref",s,function(s,e){s||t.setAsSuccess(e)})}},module.exports=Section;
},{"../views/partials/error-result.hbs":7,"../views/partials/fail-result.hbs":8,"../views/partials/skip-result.hbs":9,"../views/partials/success-result.hbs":10,"./xhr":3}],3:[function(require,module,exports){

@@ -10,3 +10,3 @@ "use strict";exports.post=function(e,n,t){t||(t=n,n=null);var s=new XMLHttpRequest;s.open("POST",e,!0),s.setRequestHeader("Content-Type","application/json"),s.onload=function(){var e=JSON.parse(s.responseText);200===s.status?t(null,e):t(new Error(e.error))},n?s.send(JSON.stringify(n)):s.send()};

},{"../views/partials/cswitcher.hbs":6,"./section-list":1,"./xhr":3,"hbsfy/runtime":18}],5:[function(require,module,exports){
"use strict";function TestsIndex(){this._index={}}TestsIndex.prototype={constructor:TestsIndex,add:function(t){if(t.suite&&null!=t.suite.id){var e=this._index[t.suite.id];if(e||(e=this._index[t.suite.id]={suite:null,states:{}}),!t.state||null==t.state.name)return void(e.suite=t);var s=e.states[t.state.name];return s||(s=e.states[t.state.name]={state:null,browsers:{}}),null==t.browserId?void(s.state=t):void(s.browsers[t.browserId]=t)}},find:function(t){var e=t.suite&&this._index[t.suite.id];if(!e)return null;if(!t.state||null==t.state.name)return e.suite;var s=e.states[t.state.name];return s?null==t.browserId?s.state:s.browsers[t.browserId]||null:null}},module.exports=TestsIndex;
"use strict";function TestsIndex(){this._index={}}TestsIndex.prototype={constructor:TestsIndex,add:function(t){if(t.suite&&null!=t.suite.path){var e=this._index[t.suite.path];if(e||(e=this._index[t.suite.path]={suite:null,states:{}}),!t.state||null==t.state.name)return void(e.suite=t);var s=e.states[t.state.name];return s||(s=e.states[t.state.name]={state:null,browsers:{}}),null==t.browserId?void(s.state=t):void(s.browsers[t.browserId]=t)}},find:function(t){var e=t.suite&&this._index[t.suite.path];if(!e)return null;if(!t.state||null==t.state.name)return e.suite;var s=e.states[t.state.name];return s?null==t.browserId?s.state:s.browsers[t.browserId]||null:null}},module.exports=TestsIndex;
},{}],6:[function(require,module,exports){

@@ -13,0 +13,0 @@ var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(e,i,c,r,s){return this.compilerInfo=[4,">= 1.0.0"],c=this.merge(c,e.helpers),s=s||{},'<div class="cswitcher">\n <div data-id="1" class="cswitcher__item cswitcher_color_1 cswitcher__item_selected"></div>\n <div data-id="2" class="cswitcher__item cswitcher_color_2"></div>\n <div data-id="3" class="cswitcher__item cswitcher_color_3"></div>\n</div>\n'});

@@ -1,1 +0,1 @@

{"version":3,"file":"bundle.js","sources":["node_modules/browserify/node_modules/browser-pack/_prelude.js","lib/client","lib/client/section-list.js","lib/client/xhr.js","lib/views/partials/cswitcher.hbs","node_modules/hbsfy/runtime.js","lib/client/section.js","lib/common/tests-index.js","node_modules/handlebars/runtime.js","node_modules/handlebars/dist/cjs/handlebars.runtime.js","lib/views/partials/success-result.hbs","lib/views/partials/fail-result.hbs","lib/views/partials/error-result.hbs","lib/views/partials/skip-result.hbs","node_modules/handlebars/dist/cjs/handlebars/base.js","node_modules/handlebars/dist/cjs/handlebars/safe-string.js","node_modules/handlebars/dist/cjs/handlebars/exception.js","node_modules/handlebars/dist/cjs/handlebars/utils.js","node_modules/handlebars/dist/cjs/handlebars/runtime.js"],"names":["SectionList","this","_sectionsIndex","Index","_sections","map","call","document","querySelectorAll","node","parentNode","_findParentSectionNode","section","Section","_sectionForNode","add","require","Array","prototype","every","constructor","expandAll","forEach","expand","collapseAll","collapse","expandErrors","expandIfError","markAllAsQueued","status","markIfFinished","nodes","domNode","allChildrenFinished","isFinished","findSection","query","find","findParent","browserId","suite","state","name","parentSectionNode","classList","contains","id","getAttribute","module","exports","post","url","data","callback","xhr","XMLHttpRequest","open","setRequestHeader","onload","JSON","parse","responseText","Error","error","send","stringify","HandlebarsCompiler","template","Handlebars","depth0","helpers","partials","compilerInfo","merge","statusClass","getInitialStatus","sectionNode","i","statusList","length","parent","_status","_titleNode","querySelector","_bodyNode","addEventListener","toggle","bind","_parent","successTemplate","failTemplate","errorTemplate","skipTemplate","remove",{"end":{"file":"?","comments_before":[],"nlb":false,"endpos":1596,"endcol":14,"endline":58,"pos":1590,"col":8,"line":58,"value":"status","type":"name"},"start":{"file":"?","comments_before":[],"nlb":false,"endpos":1596,"endcol":14,"endline":58,"pos":1590,"col":8,"line":58,"value":"status","type":"name"},"name":"status"},"value","setAsFailure","results","innerHTML","replaceButton","updateReference","setAsSuccess","failedChild","setAsSkipped","setAsError","_this","postData","response","TestsIndex","_index","item","indexData","states","stateData","browsers","base","SafeString","Exception","Utils","runtime","create","hb","HandlebarsEnvironment","extend","VM","spec","stack1","helper","buffer","self","functionType","escapeExpression","invokePartial","cswitcher","referenceURL","hash","currentURL","diffURL","stack","registerDefaultHelpers","instance","registerHelper","arg","arguments","undefined","context","options","inverse","fn","isFunction","isArray","each","ret","createFrame","j","index","first","last","key","hasOwnProperty","conditional","includeZero","isEmpty","level","parseInt","log","obj","logger","VERSION","COMPILER_REVISION","REVISION_CHANGES",1,2,3,4,"toString","objectType","not","registerPartial","str","methodMap","DEBUG","INFO","WARN","ERROR","method","console","object","string","message","line","firstLine","firstColumn","tmp","idx","errorProps","lineNumber","column","escapeChar","chr","escape","Object","possible","test","replace","badChars","&","<",">","\"","'","`","checkRevision","compilerRevision","currentRevision","runtimeVersions","compilerVersions","templateSpec","env","invokePartialWrapper","partial","result","apply","compile","container","programs","program","programWrapper","param","common","programWithDepth","noop","namespace","args","slice","prog","concat","depth","Function"],"mappings":"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","sourcesContent":["(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<r.length;o++)s(r[o]);return s})","\"use strict\";function failAllParents(e){for(;e=sections.findParent(e);)e.status=\"fail\",e.expand()}function listenForEvents(){var e=new EventSource(\"/events\");e.addEventListener(\"beginSuite\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite});s&&\"queued\"===s.status&&(s.status=\"running\")}),e.addEventListener(\"beginState\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state});s&&\"queued\"===s.status&&(s.status=\"running\")}),e.addEventListener(\"endTest\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state,browserId:t.browserId});t.equal?s.setAsSuccess(t):(s.setAsFailure(t),s.expand(),failAllParents(s))}),e.addEventListener(\"skipState\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state,browserId:t.browserId});s.setAsSkipped();var n=sections.findSection({suite:t.suite,state:t.state});sections.markIfFinished(n)}),e.addEventListener(\"error\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state,browserId:t.browserId});s.setAsError({stack:t.stack}),s.expand(),failAllParents(s)}),e.addEventListener(\"endState\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state});sections.markIfFinished(s)}),e.addEventListener(\"endSuite\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state,browserId:t.browserId});sections.markIfFinished(s)}),e.addEventListener(\"end\",function(e){runButton.disabled=!1})}function run(){runButton.disabled=!0,xhr.post(\"/run\",function(e,t){e||sections.markAllAsQueued()})}function handleColorSwitch(e,t){var s=findClosest(e,\"image-box\");t.forEach(function(e){e.classList.remove(\"cswitcher__item_selected\")}),forEach.call(s.classList,function(e){/cswitcher_color_\\d+/.test(e)&&s.classList.remove(e)}),e.classList.add(\"cswitcher__item_selected\"),s.classList.add(\"cswitcher_color_\"+e.dataset.id)}function bodyClick(e){var t=e.target;t.classList.contains(\"cswitcher__item\")&&handleColorSwitch(t,filter.call(t.parentNode.childNodes,function(e){return e.nodeType===Node.ELEMENT_NODE}))}function findClosest(e,t){for(;e=e.parentNode;)if(e.classList.contains(t))return e}var SectionList=require(\"./section-list\"),xhr=require(\"./xhr\"),byId=document.getElementById.bind(document),runButton,sections,forEach=Array.prototype.forEach,filter=Array.prototype.filter,hbruntime=require(\"hbsfy/runtime\");hbruntime.registerPartial(\"cswitcher\",require(\"../views/partials/cswitcher.hbs\")),document.addEventListener(\"DOMContentLoaded\",function(){sections=new SectionList,runButton=byId(\"run\"),listenForEvents(),byId(\"expandAll\").addEventListener(\"click\",sections.expandAll.bind(sections)),byId(\"collapseAll\").addEventListener(\"click\",sections.collapseAll.bind(sections)),byId(\"expandErrors\").addEventListener(\"click\",sections.expandErrors.bind(sections)),runButton.addEventListener(\"click\",run),document.body.addEventListener(\"click\",bodyClick)});","/*jshint browser:true*/\n'use strict';\nvar Section = require('./section'),\n Index = require('../common/tests-index'),\n map = Array.prototype.map,\n every = Array.prototype.every;\n\nfunction SectionList() {\n this._sectionsIndex = new Index();\n this._sections = map.call(document.querySelectorAll('.section'), function(node) {\n var parentNode = this._findParentSectionNode(node),\n section = new Section(node, parentNode && this._sectionForNode(parentNode));\n\n this._sectionsIndex.add(section);\n return section;\n }, this);\n}\n\nSectionList.prototype = {\n constructor: SectionList,\n\n expandAll: function() {\n this._sections.forEach(function(section) {\n section.expand();\n });\n },\n\n collapseAll: function() {\n this._sections.forEach(function(section) {\n section.collapse();\n });\n },\n\n expandErrors: function() {\n this._sections.forEach(function(section) {\n section.expandIfError();\n });\n },\n\n markAllAsQueued: function() {\n this._sections.forEach(function(section) {\n section.status = 'queued';\n });\n },\n\n markIfFinished: function(section) {\n if (section.status === 'fail') {\n //already marked as fail\n return;\n }\n var nodes = section.domNode.querySelectorAll('.section');\n var allChildrenFinished = every.call(nodes, function(node) {\n return this._sectionForNode(node).isFinished();\n }, this);\n\n if (allChildrenFinished) {\n section.status = 'success';\n }\n },\n\n findSection: function(query) {\n return this._sectionsIndex.find(query);\n },\n\n findParent: function(section) {\n if (section.browserId) {\n return this.findSection({\n suite: section.suite,\n state: section.state\n });\n }\n\n if (section.state && section.state.name) {\n return this.findSection({suite: section.suite});\n }\n var parentSectionNode = this._findParentSectionNode(section.domNode);\n if (parentSectionNode) {\n return this._sectionForNode(parentSectionNode);\n }\n return null;\n },\n\n _findParentSectionNode: function(node) {\n while ((node = node.parentNode)) {\n if (node.classList && node.classList.contains('section')) {\n return node;\n }\n }\n return null;\n },\n\n _sectionForNode: function(domNode) {\n var query = {\n suite: {id: domNode.getAttribute('data-suite-id')},\n state: {name: domNode.getAttribute('data-state-name')},\n browserId: domNode.getAttribute('data-browser-id')\n };\n\n return this.findSection(query);\n }\n};\n\nmodule.exports = SectionList;\n","/*jshint browser:true*/\n'use strict';\n\nexports.post = function(url, data, callback) {\n if (!callback) {\n callback = data;\n data = null;\n }\n var xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.onload = function() {\n var data = JSON.parse(xhr.responseText);\n if (xhr.status === 200) {\n callback(null, data);\n } else {\n callback(new Error(data.error));\n }\n };\n\n if (data) {\n xhr.send(JSON.stringify(data));\n } else {\n xhr.send();\n }\n};\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n \n\n\n return \"<div class=\\\"cswitcher\\\">\\n <div data-id=\\\"1\\\" class=\\\"cswitcher__item cswitcher_color_1 cswitcher__item_selected\\\"></div>\\n <div data-id=\\\"2\\\" class=\\\"cswitcher__item cswitcher_color_2\\\"></div>\\n <div data-id=\\\"3\\\" class=\\\"cswitcher__item cswitcher_color_3\\\"></div>\\n</div>\\n\";\n });\n","module.exports = require(\"handlebars/runtime\")[\"default\"];\n","'use strict';\nvar successTemplate = require('../views/partials/success-result.hbs'),\n failTemplate = require('../views/partials/fail-result.hbs'),\n errorTemplate = require('../views/partials/error-result.hbs'),\n skipTemplate = require('../views/partials/skip-result.hbs'),\n xhr = require('./xhr');\n\nvar statusList = [\n 'idle',\n 'queued',\n 'running',\n 'success',\n 'fail',\n 'skip'\n];\n\nfunction statusClass(status) {\n return 'section_status_' + status;\n}\n\nfunction getInitialStatus(sectionNode) {\n var status;\n for (var i = 0; i< statusList.length; i++) {\n status = statusList[i];\n if (sectionNode.classList.contains(statusClass(status))) {\n return status;\n }\n }\n return null;\n}\n\nfunction Section(node, parent) {\n this.suite = {id: node.getAttribute('data-suite-id')};\n this.state = {name: node.getAttribute('data-state-name')};\n this.browserId = node.getAttribute('data-browser-id');\n this.domNode = node;\n this._status = getInitialStatus(node);\n this._titleNode = node.querySelector('.section__title');\n this._bodyNode = node.querySelector('.section__body');\n this._titleNode.addEventListener('click', this.toggle.bind(this));\n this._parent = parent;\n}\n\nSection.prototype = {\n constructor: Section,\n expand:function() {\n this.domNode.classList.remove('section_collapsed');\n },\n\n collapse: function() {\n this.domNode.classList.add('section_collapsed');\n },\n\n toggle: function() {\n this.domNode.classList.toggle('section_collapsed');\n },\n\n get status() {\n return this._status;\n },\n\n set status(value) {\n if (this._status) {\n this.domNode.classList.remove(statusClass(this._status));\n }\n\n this._status = value;\n this.domNode.classList.add(statusClass(this._status));\n },\n\n expandIfError: function() {\n if (this.status === 'fail') {\n this.expand();\n } else {\n this.collapse();\n }\n },\n\n setAsFailure: function(results) {\n this.status = 'fail';\n this._bodyNode.innerHTML = failTemplate(results);\n var replaceButton = this._bodyNode.querySelector('.image-box__replace');\n replaceButton.addEventListener('click', this.updateReference.bind(this));\n },\n\n setAsSuccess: function(results) {\n var failedChild = this.domNode.querySelector('.section.' + statusClass('fail'));\n if (failedChild) {\n return;\n }\n\n this.status = 'success';\n if (results) {\n this._bodyNode.innerHTML = successTemplate(results);\n }\n\n if (this._parent && this._parent.status === 'fail') {\n this._parent.setAsSuccess();\n }\n },\n\n setAsSkipped: function() {\n this.status = 'skipped';\n this._bodyNode.innerHTML = skipTemplate();\n },\n\n setAsError: function(error) {\n this.status = 'fail';\n this._bodyNode.innerHTML = errorTemplate(error);\n },\n\n isFinished: function() {\n return this.status !== 'queued' &&\n this.status !== 'running';\n },\n\n updateReference: function() {\n var _this = this,\n postData = {\n suite: this.suite,\n state: this.state,\n browserId: this.browserId\n };\n xhr.post('/update-ref', postData, function(error, response) {\n if (!error) {\n _this.setAsSuccess(response);\n }\n });\n }\n};\n\nmodule.exports = Section;\n","'use strict';\n\nfunction TestsIndex() {\n this._index = {};\n}\n\nTestsIndex.prototype = {\n constructor: TestsIndex,\n\n add: function(item) {\n if (!item.suite || item.suite.id == null) {\n return;\n }\n\n var indexData = this._index[item.suite.id];\n if (!indexData) {\n indexData = this._index[item.suite.id] = {\n suite: null,\n states: {}\n };\n }\n\n if (!item.state || item.state.name == null) {\n indexData.suite = item;\n return;\n }\n\n var stateData = indexData.states[item.state.name];\n if (!stateData) {\n stateData = indexData.states[item.state.name] = {\n state: null,\n browsers: {}\n };\n }\n\n if (item.browserId == null) {\n stateData.state = item;\n return;\n }\n stateData.browsers[item.browserId] = item;\n },\n\n find: function(query) {\n var indexData = query.suite && this._index[query.suite.id];\n if (!indexData) {\n return null;\n }\n if (!query.state || query.state.name == null) {\n return indexData.suite;\n }\n var stateData = indexData.states[query.state.name];\n if (!stateData) {\n return null;\n }\n\n if (query.browserId == null) {\n return stateData.state;\n }\n\n return stateData.browsers[query.browserId] || null;\n }\n};\n\nmodule.exports = TestsIndex;\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime');\n","\"use strict\";\n/*globals Handlebars: true */\nvar base = require(\"./handlebars/base\");\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\nvar SafeString = require(\"./handlebars/safe-string\")[\"default\"];\nvar Exception = require(\"./handlebars/exception\")[\"default\"];\nvar Utils = require(\"./handlebars/utils\");\nvar runtime = require(\"./handlebars/runtime\");\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nvar create = function() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = SafeString;\n hb.Exception = Exception;\n hb.Utils = Utils;\n\n hb.VM = runtime;\n hb.template = function(spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n};\n\nvar Handlebars = create();\nHandlebars.create = create;\n\nexports[\"default\"] = Handlebars;","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); partials = this.merge(partials, Handlebars.partials); data = data || {};\n var buffer = \"\", stack1, helper, self=this, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"image-box\\\">\\n \";\n stack1 = self.invokePartial(partials.cswitcher, 'cswitcher', depth0, helpers, partials, data);\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"image-box__image\\\">\\n <img src=\\\"\";\n if (helper = helpers.referenceURL) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.referenceURL); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" alt=\\\"Reference image\\\">\\n </div>\\n</div>\\n\";\n return buffer;\n });\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); partials = this.merge(partials, Handlebars.partials); data = data || {};\n var buffer = \"\", stack1, helper, self=this, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"image-box\\\">\\n \";\n stack1 = self.invokePartial(partials.cswitcher, 'cswitcher', depth0, helpers, partials, data);\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"image-box__image\\\">\\n <div class=\\\"image-box__title\\\">Reference</div>\\n <img src=\\\"\";\n if (helper = helpers.referenceURL) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.referenceURL); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" alt=\\\"Reference image\\\">\\n </div>\\n <button class=\\\"button image-box__replace\\\">&#x2b05;</button>\\n <div class=\\\"image-box__image\\\">\\n <div class=\\\"image-box__title\\\">Current</div>\\n <img src=\\\"\";\n if (helper = helpers.currentURL) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.currentURL); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" alt=\\\"Current image\\\">\\n </div>\\n <div class=\\\"image-box__image\\\">\\n <div class=\\\"image-box__title\\\">Diff</div>\\n <img src=\\\"\";\n if (helper = helpers.diffURL) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.diffURL); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" alt=\\\"Diff image\\\">\\n </div>\\n</div>\\n\";\n return buffer;\n });\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<pre class=\\\"stacktrace\\\">\\n\";\n if (helper = helpers.stack) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.stack); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n</pre>\\n\";\n return buffer;\n });\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n \n\n\n return \"<p>Test skipped</p>\\n\";\n });\n","\"use strict\";\nvar Utils = require(\"./utils\");\nvar Exception = require(\"./exception\")[\"default\"];\n\nvar VERSION = \"1.3.0\";\nexports.VERSION = VERSION;var COMPILER_REVISION = 4;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '>= 1.0.0'\n};\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar isArray = Utils.isArray,\n isFunction = Utils.isFunction,\n toString = Utils.toString,\n objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n\n registerDefaultHelpers(this);\n}\n\nexports.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: logger,\n log: log,\n\n registerHelper: function(name, fn, inverse) {\n if (toString.call(name) === objectType) {\n if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); }\n Utils.extend(this.helpers, name);\n } else {\n if (inverse) { fn.not = inverse; }\n this.helpers[name] = fn;\n }\n },\n\n registerPartial: function(name, str) {\n if (toString.call(name) === objectType) {\n Utils.extend(this.partials, name);\n } else {\n this.partials[name] = str;\n }\n }\n};\n\nfunction registerDefaultHelpers(instance) {\n instance.registerHelper('helperMissing', function(arg) {\n if(arguments.length === 2) {\n return undefined;\n } else {\n throw new Exception(\"Missing helper: '\" + arg + \"'\");\n }\n });\n\n instance.registerHelper('blockHelperMissing', function(context, options) {\n var inverse = options.inverse || function() {}, fn = options.fn;\n\n if (isFunction(context)) { context = context.call(this); }\n\n if(context === true) {\n return fn(this);\n } else if(context === false || context == null) {\n return inverse(this);\n } else if (isArray(context)) {\n if(context.length > 0) {\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n return fn(context);\n }\n });\n\n instance.registerHelper('each', function(context, options) {\n var fn = options.fn, inverse = options.inverse;\n var i = 0, ret = \"\", data;\n\n if (isFunction(context)) { context = context.call(this); }\n\n if (options.data) {\n data = createFrame(options.data);\n }\n\n if(context && typeof context === 'object') {\n if (isArray(context)) {\n for(var j = context.length; i<j; i++) {\n if (data) {\n data.index = i;\n data.first = (i === 0);\n data.last = (i === (context.length-1));\n }\n ret = ret + fn(context[i], { data: data });\n }\n } else {\n for(var key in context) {\n if(context.hasOwnProperty(key)) {\n if(data) { \n data.key = key; \n data.index = i;\n data.first = (i === 0);\n }\n ret = ret + fn(context[key], {data: data});\n i++;\n }\n }\n }\n }\n\n if(i === 0){\n ret = inverse(this);\n }\n\n return ret;\n });\n\n instance.registerHelper('if', function(conditional, options) {\n if (isFunction(conditional)) { conditional = conditional.call(this); }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function(conditional, options) {\n return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});\n });\n\n instance.registerHelper('with', function(context, options) {\n if (isFunction(context)) { context = context.call(this); }\n\n if (!Utils.isEmpty(context)) return options.fn(context);\n });\n\n instance.registerHelper('log', function(context, options) {\n var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;\n instance.log(level, context);\n });\n}\n\nvar logger = {\n methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },\n\n // State enum\n DEBUG: 0,\n INFO: 1,\n WARN: 2,\n ERROR: 3,\n level: 3,\n\n // can be overridden in the host environment\n log: function(level, obj) {\n if (logger.level <= level) {\n var method = logger.methodMap[level];\n if (typeof console !== 'undefined' && console[method]) {\n console[method].call(console, obj);\n }\n }\n }\n};\nexports.logger = logger;\nfunction log(level, obj) { logger.log(level, obj); }\n\nexports.log = log;var createFrame = function(object) {\n var obj = {};\n Utils.extend(obj, object);\n return obj;\n};\nexports.createFrame = createFrame;","\"use strict\";\n// Build out our basic SafeString type\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = function() {\n return \"\" + this.string;\n};\n\nexports[\"default\"] = SafeString;","\"use strict\";\n\nvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var line;\n if (node && node.firstLine) {\n line = node.firstLine;\n\n message += ' - ' + line + ':' + node.firstColumn;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n if (line) {\n this.lineNumber = line;\n this.column = node.firstColumn;\n }\n}\n\nException.prototype = new Error();\n\nexports[\"default\"] = Exception;","\"use strict\";\n/*jshint -W004 */\nvar SafeString = require(\"./safe-string\")[\"default\"];\n\nvar escape = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#x27;\",\n \"`\": \"&#x60;\"\n};\n\nvar badChars = /[&<>\"'`]/g;\nvar possible = /[&<>\"'`]/;\n\nfunction escapeChar(chr) {\n return escape[chr] || \"&amp;\";\n}\n\nfunction extend(obj, value) {\n for(var key in value) {\n if(Object.prototype.hasOwnProperty.call(value, key)) {\n obj[key] = value[key];\n }\n }\n}\n\nexports.extend = extend;var toString = Object.prototype.toString;\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\nvar isFunction = function(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\nif (isFunction(/x/)) {\n isFunction = function(value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nvar isFunction;\nexports.isFunction = isFunction;\nvar isArray = Array.isArray || function(value) {\n return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;\n};\nexports.isArray = isArray;\n\nfunction escapeExpression(string) {\n // don't escape SafeStrings, since they're already safe\n if (string instanceof SafeString) {\n return string.toString();\n } else if (!string && string !== 0) {\n return \"\";\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = \"\" + string;\n\n if(!possible.test(string)) { return string; }\n return string.replace(badChars, escapeChar);\n}\n\nexports.escapeExpression = escapeExpression;function isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nexports.isEmpty = isEmpty;","\"use strict\";\nvar Utils = require(\"./utils\");\nvar Exception = require(\"./exception\")[\"default\"];\nvar COMPILER_REVISION = require(\"./base\").COMPILER_REVISION;\nvar REVISION_CHANGES = require(\"./base\").REVISION_CHANGES;\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = COMPILER_REVISION;\n\n if (compilerRevision !== currentRevision) {\n if (compilerRevision < currentRevision) {\n var runtimeVersions = REVISION_CHANGES[currentRevision],\n compilerVersions = REVISION_CHANGES[compilerRevision];\n throw new Exception(\"Template was precompiled with an older version of Handlebars than the current runtime. \"+\n \"Please update your precompiler to a newer version (\"+runtimeVersions+\") or downgrade your runtime to an older version (\"+compilerVersions+\").\");\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new Exception(\"Template was precompiled with a newer version of Handlebars than the current runtime. \"+\n \"Please update your runtime to a newer version (\"+compilerInfo[1]+\").\");\n }\n }\n}\n\nexports.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial\n\nfunction template(templateSpec, env) {\n if (!env) {\n throw new Exception(\"No environment passed to template\");\n }\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as psuedo-supported APIs.\n var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {\n var result = env.VM.invokePartial.apply(this, arguments);\n if (result != null) { return result; }\n\n if (env.compile) {\n var options = { helpers: helpers, partials: partials, data: data };\n partials[name] = env.compile(partial, { data: data !== undefined }, env);\n return partials[name](context, options);\n } else {\n throw new Exception(\"The partial \" + name + \" could not be compiled when running in runtime-only mode\");\n }\n };\n\n // Just add water\n var container = {\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n programs: [],\n program: function(i, fn, data) {\n var programWrapper = this.programs[i];\n if(data) {\n programWrapper = program(i, fn, data);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = program(i, fn);\n }\n return programWrapper;\n },\n merge: function(param, common) {\n var ret = param || common;\n\n if (param && common && (param !== common)) {\n ret = {};\n Utils.extend(ret, common);\n Utils.extend(ret, param);\n }\n return ret;\n },\n programWithDepth: env.VM.programWithDepth,\n noop: env.VM.noop,\n compilerInfo: null\n };\n\n return function(context, options) {\n options = options || {};\n var namespace = options.partial ? options : env,\n helpers,\n partials;\n\n if (!options.partial) {\n helpers = options.helpers;\n partials = options.partials;\n }\n var result = templateSpec.call(\n container,\n namespace, context,\n helpers,\n partials,\n options.data);\n\n if (!options.partial) {\n env.VM.checkRevision(container.compilerInfo);\n }\n\n return result;\n };\n}\n\nexports.template = template;function programWithDepth(i, fn, data /*, $depth */) {\n var args = Array.prototype.slice.call(arguments, 3);\n\n var prog = function(context, options) {\n options = options || {};\n\n return fn.apply(this, [context, options.data || data].concat(args));\n };\n prog.program = i;\n prog.depth = args.length;\n return prog;\n}\n\nexports.programWithDepth = programWithDepth;function program(i, fn, data) {\n var prog = function(context, options) {\n options = options || {};\n\n return fn(context, options.data || data);\n };\n prog.program = i;\n prog.depth = 0;\n return prog;\n}\n\nexports.program = program;function invokePartial(partial, name, context, helpers, partials, data) {\n var options = { partial: true, helpers: helpers, partials: partials, data: data };\n\n if(partial === undefined) {\n throw new Exception(\"The partial \" + name + \" could not be found\");\n } else if(partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nexports.invokePartial = invokePartial;function noop() { return \"\"; }\n\nexports.noop = noop;"]}
{"version":3,"file":"bundle.js","sources":["node_modules/browserify/node_modules/browser-pack/_prelude.js","lib/client","lib/client/section-list.js","lib/client/xhr.js","lib/views/partials/cswitcher.hbs","node_modules/hbsfy/runtime.js","lib/client/section.js","lib/common/tests-index.js","node_modules/handlebars/runtime.js","node_modules/handlebars/dist/cjs/handlebars.runtime.js","lib/views/partials/success-result.hbs","lib/views/partials/fail-result.hbs","lib/views/partials/error-result.hbs","lib/views/partials/skip-result.hbs","node_modules/handlebars/dist/cjs/handlebars/base.js","node_modules/handlebars/dist/cjs/handlebars/safe-string.js","node_modules/handlebars/dist/cjs/handlebars/exception.js","node_modules/handlebars/dist/cjs/handlebars/utils.js","node_modules/handlebars/dist/cjs/handlebars/runtime.js"],"names":["SectionList","this","_sectionsIndex","Index","_sections","map","call","document","querySelectorAll","node","parentNode","_findParentSectionNode","section","Section","_sectionForNode","add","require","Array","prototype","every","constructor","expandAll","forEach","expand","collapseAll","collapse","expandErrors","expandIfError","markAllAsQueued","status","markIfFinished","nodes","domNode","allChildrenFinished","isFinished","findSection","query","find","findParent","browserId","suite","state","name","parentSectionNode","classList","contains","path","getAttribute","module","exports","post","url","data","callback","xhr","XMLHttpRequest","open","setRequestHeader","onload","JSON","parse","responseText","Error","error","send","stringify","HandlebarsCompiler","template","Handlebars","depth0","helpers","partials","compilerInfo","merge","statusClass","getInitialStatus","sectionNode","i","statusList","length","parent","_status","_titleNode","querySelector","_bodyNode","addEventListener","toggle","bind","_parent","successTemplate","failTemplate","errorTemplate","skipTemplate","remove",{"end":{"file":"?","comments_before":[],"nlb":false,"endpos":1600,"endcol":14,"endline":58,"pos":1594,"col":8,"line":58,"value":"status","type":"name"},"start":{"file":"?","comments_before":[],"nlb":false,"endpos":1600,"endcol":14,"endline":58,"pos":1594,"col":8,"line":58,"value":"status","type":"name"},"name":"status"},"value","setAsFailure","results","innerHTML","replaceButton","updateReference","setAsSuccess","failedChild","setAsSkipped","setAsError","_this","postData","response","TestsIndex","_index","item","indexData","states","stateData","browsers","base","SafeString","Exception","Utils","runtime","create","hb","HandlebarsEnvironment","extend","VM","spec","stack1","helper","buffer","self","functionType","escapeExpression","invokePartial","cswitcher","referenceURL","hash","currentURL","diffURL","stack","registerDefaultHelpers","instance","registerHelper","arg","arguments","undefined","context","options","inverse","fn","isFunction","isArray","each","ret","createFrame","j","index","first","last","key","hasOwnProperty","conditional","includeZero","isEmpty","level","parseInt","log","obj","logger","VERSION","COMPILER_REVISION","REVISION_CHANGES",1,2,3,4,"toString","objectType","not","registerPartial","str","methodMap","DEBUG","INFO","WARN","ERROR","method","console","object","string","message","line","firstLine","firstColumn","tmp","idx","errorProps","lineNumber","column","escapeChar","chr","escape","Object","possible","test","replace","badChars","&","<",">","\"","'","`","checkRevision","compilerRevision","currentRevision","runtimeVersions","compilerVersions","templateSpec","env","invokePartialWrapper","partial","result","apply","compile","container","programs","program","programWrapper","param","common","programWithDepth","noop","namespace","args","slice","prog","concat","depth","Function"],"mappings":"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","sourcesContent":["(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<r.length;o++)s(r[o]);return s})","\"use strict\";function failAllParents(e){for(;e=sections.findParent(e);)e.status=\"fail\",e.expand()}function listenForEvents(){var e=new EventSource(\"/events\");e.addEventListener(\"beginSuite\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite});s&&\"queued\"===s.status&&(s.status=\"running\")}),e.addEventListener(\"beginState\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state});s&&\"queued\"===s.status&&(s.status=\"running\")}),e.addEventListener(\"endTest\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state,browserId:t.browserId});t.equal?s.setAsSuccess(t):(s.setAsFailure(t),s.expand(),failAllParents(s))}),e.addEventListener(\"skipState\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state,browserId:t.browserId});s.setAsSkipped();var n=sections.findSection({suite:t.suite,state:t.state});sections.markIfFinished(n)}),e.addEventListener(\"error\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state,browserId:t.browserId});s.setAsError({stack:t.stack}),s.expand(),failAllParents(s)}),e.addEventListener(\"endState\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state});sections.markIfFinished(s)}),e.addEventListener(\"endSuite\",function(e){var t=JSON.parse(e.data),s=sections.findSection({suite:t.suite,state:t.state,browserId:t.browserId});sections.markIfFinished(s)}),e.addEventListener(\"end\",function(e){runButton.disabled=!1})}function run(){runButton.disabled=!0,xhr.post(\"/run\",function(e,t){e||sections.markAllAsQueued()})}function handleColorSwitch(e,t){var s=findClosest(e,\"image-box\");t.forEach(function(e){e.classList.remove(\"cswitcher__item_selected\")}),forEach.call(s.classList,function(e){/cswitcher_color_\\d+/.test(e)&&s.classList.remove(e)}),e.classList.add(\"cswitcher__item_selected\"),s.classList.add(\"cswitcher_color_\"+e.dataset.id)}function bodyClick(e){var t=e.target;t.classList.contains(\"cswitcher__item\")&&handleColorSwitch(t,filter.call(t.parentNode.childNodes,function(e){return e.nodeType===Node.ELEMENT_NODE}))}function findClosest(e,t){for(;e=e.parentNode;)if(e.classList.contains(t))return e}var SectionList=require(\"./section-list\"),xhr=require(\"./xhr\"),byId=document.getElementById.bind(document),runButton,sections,forEach=Array.prototype.forEach,filter=Array.prototype.filter,hbruntime=require(\"hbsfy/runtime\");hbruntime.registerPartial(\"cswitcher\",require(\"../views/partials/cswitcher.hbs\")),document.addEventListener(\"DOMContentLoaded\",function(){sections=new SectionList,runButton=byId(\"run\"),listenForEvents(),byId(\"expandAll\").addEventListener(\"click\",sections.expandAll.bind(sections)),byId(\"collapseAll\").addEventListener(\"click\",sections.collapseAll.bind(sections)),byId(\"expandErrors\").addEventListener(\"click\",sections.expandErrors.bind(sections)),runButton.addEventListener(\"click\",run),document.body.addEventListener(\"click\",bodyClick)});","/*jshint browser:true*/\n'use strict';\nvar Section = require('./section'),\n Index = require('../common/tests-index'),\n map = Array.prototype.map,\n every = Array.prototype.every;\n\nfunction SectionList() {\n this._sectionsIndex = new Index();\n this._sections = map.call(document.querySelectorAll('.section'), function(node) {\n var parentNode = this._findParentSectionNode(node),\n section = new Section(node, parentNode && this._sectionForNode(parentNode));\n\n this._sectionsIndex.add(section);\n return section;\n }, this);\n}\n\nSectionList.prototype = {\n constructor: SectionList,\n\n expandAll: function() {\n this._sections.forEach(function(section) {\n section.expand();\n });\n },\n\n collapseAll: function() {\n this._sections.forEach(function(section) {\n section.collapse();\n });\n },\n\n expandErrors: function() {\n this._sections.forEach(function(section) {\n section.expandIfError();\n });\n },\n\n markAllAsQueued: function() {\n this._sections.forEach(function(section) {\n section.status = 'queued';\n });\n },\n\n markIfFinished: function(section) {\n if (section.status === 'fail') {\n //already marked as fail\n return;\n }\n var nodes = section.domNode.querySelectorAll('.section');\n var allChildrenFinished = every.call(nodes, function(node) {\n return this._sectionForNode(node).isFinished();\n }, this);\n\n if (allChildrenFinished) {\n section.status = 'success';\n }\n },\n\n findSection: function(query) {\n return this._sectionsIndex.find(query);\n },\n\n findParent: function(section) {\n if (section.browserId) {\n return this.findSection({\n suite: section.suite,\n state: section.state\n });\n }\n\n if (section.state && section.state.name) {\n return this.findSection({suite: section.suite});\n }\n var parentSectionNode = this._findParentSectionNode(section.domNode);\n if (parentSectionNode) {\n return this._sectionForNode(parentSectionNode);\n }\n return null;\n },\n\n _findParentSectionNode: function(node) {\n while ((node = node.parentNode)) {\n if (node.classList && node.classList.contains('section')) {\n return node;\n }\n }\n return null;\n },\n\n _sectionForNode: function(domNode) {\n var query = {\n suite: {path: domNode.getAttribute('data-suite-path')},\n state: {name: domNode.getAttribute('data-state-name')},\n browserId: domNode.getAttribute('data-browser-id')\n };\n\n return this.findSection(query);\n }\n};\n\nmodule.exports = SectionList;\n","/*jshint browser:true*/\n'use strict';\n\nexports.post = function(url, data, callback) {\n if (!callback) {\n callback = data;\n data = null;\n }\n var xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.onload = function() {\n var data = JSON.parse(xhr.responseText);\n if (xhr.status === 200) {\n callback(null, data);\n } else {\n callback(new Error(data.error));\n }\n };\n\n if (data) {\n xhr.send(JSON.stringify(data));\n } else {\n xhr.send();\n }\n};\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n \n\n\n return \"<div class=\\\"cswitcher\\\">\\n <div data-id=\\\"1\\\" class=\\\"cswitcher__item cswitcher_color_1 cswitcher__item_selected\\\"></div>\\n <div data-id=\\\"2\\\" class=\\\"cswitcher__item cswitcher_color_2\\\"></div>\\n <div data-id=\\\"3\\\" class=\\\"cswitcher__item cswitcher_color_3\\\"></div>\\n</div>\\n\";\n });\n","module.exports = require(\"handlebars/runtime\")[\"default\"];\n","'use strict';\nvar successTemplate = require('../views/partials/success-result.hbs'),\n failTemplate = require('../views/partials/fail-result.hbs'),\n errorTemplate = require('../views/partials/error-result.hbs'),\n skipTemplate = require('../views/partials/skip-result.hbs'),\n xhr = require('./xhr');\n\nvar statusList = [\n 'idle',\n 'queued',\n 'running',\n 'success',\n 'fail',\n 'skip'\n];\n\nfunction statusClass(status) {\n return 'section_status_' + status;\n}\n\nfunction getInitialStatus(sectionNode) {\n var status;\n for (var i = 0; i< statusList.length; i++) {\n status = statusList[i];\n if (sectionNode.classList.contains(statusClass(status))) {\n return status;\n }\n }\n return null;\n}\n\nfunction Section(node, parent) {\n this.suite = {path: node.getAttribute('data-suite-path')};\n this.state = {name: node.getAttribute('data-state-name')};\n this.browserId = node.getAttribute('data-browser-id');\n this.domNode = node;\n this._status = getInitialStatus(node);\n this._titleNode = node.querySelector('.section__title');\n this._bodyNode = node.querySelector('.section__body');\n this._titleNode.addEventListener('click', this.toggle.bind(this));\n this._parent = parent;\n}\n\nSection.prototype = {\n constructor: Section,\n expand:function() {\n this.domNode.classList.remove('section_collapsed');\n },\n\n collapse: function() {\n this.domNode.classList.add('section_collapsed');\n },\n\n toggle: function() {\n this.domNode.classList.toggle('section_collapsed');\n },\n\n get status() {\n return this._status;\n },\n\n set status(value) {\n if (this._status) {\n this.domNode.classList.remove(statusClass(this._status));\n }\n\n this._status = value;\n this.domNode.classList.add(statusClass(this._status));\n },\n\n expandIfError: function() {\n if (this.status === 'fail') {\n this.expand();\n } else {\n this.collapse();\n }\n },\n\n setAsFailure: function(results) {\n this.status = 'fail';\n this._bodyNode.innerHTML = failTemplate(results);\n var replaceButton = this._bodyNode.querySelector('.image-box__replace');\n replaceButton.addEventListener('click', this.updateReference.bind(this));\n },\n\n setAsSuccess: function(results) {\n var failedChild = this.domNode.querySelector('.section.' + statusClass('fail'));\n if (failedChild) {\n return;\n }\n\n this.status = 'success';\n if (results) {\n this._bodyNode.innerHTML = successTemplate(results);\n }\n\n if (this._parent && this._parent.status === 'fail') {\n this._parent.setAsSuccess();\n }\n },\n\n setAsSkipped: function() {\n this.status = 'skipped';\n this._bodyNode.innerHTML = skipTemplate();\n },\n\n setAsError: function(error) {\n this.status = 'fail';\n this._bodyNode.innerHTML = errorTemplate(error);\n },\n\n isFinished: function() {\n return this.status !== 'queued' &&\n this.status !== 'running';\n },\n\n updateReference: function() {\n var _this = this,\n postData = {\n suite: this.suite,\n state: this.state,\n browserId: this.browserId\n };\n xhr.post('/update-ref', postData, function(error, response) {\n if (!error) {\n _this.setAsSuccess(response);\n }\n });\n }\n};\n\nmodule.exports = Section;\n","'use strict';\n\nfunction TestsIndex() {\n this._index = {};\n}\n\nTestsIndex.prototype = {\n constructor: TestsIndex,\n\n add: function(item) {\n if (!item.suite || item.suite.path == null) {\n return;\n }\n\n var indexData = this._index[item.suite.path];\n if (!indexData) {\n indexData = this._index[item.suite.path] = {\n suite: null,\n states: {}\n };\n }\n\n if (!item.state || item.state.name == null) {\n indexData.suite = item;\n return;\n }\n\n var stateData = indexData.states[item.state.name];\n if (!stateData) {\n stateData = indexData.states[item.state.name] = {\n state: null,\n browsers: {}\n };\n }\n\n if (item.browserId == null) {\n stateData.state = item;\n return;\n }\n stateData.browsers[item.browserId] = item;\n },\n\n find: function(query) {\n var indexData = query.suite && this._index[query.suite.path];\n if (!indexData) {\n return null;\n }\n if (!query.state || query.state.name == null) {\n return indexData.suite;\n }\n var stateData = indexData.states[query.state.name];\n if (!stateData) {\n return null;\n }\n\n if (query.browserId == null) {\n return stateData.state;\n }\n\n return stateData.browsers[query.browserId] || null;\n }\n};\n\nmodule.exports = TestsIndex;\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime');\n","\"use strict\";\n/*globals Handlebars: true */\nvar base = require(\"./handlebars/base\");\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\nvar SafeString = require(\"./handlebars/safe-string\")[\"default\"];\nvar Exception = require(\"./handlebars/exception\")[\"default\"];\nvar Utils = require(\"./handlebars/utils\");\nvar runtime = require(\"./handlebars/runtime\");\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nvar create = function() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = SafeString;\n hb.Exception = Exception;\n hb.Utils = Utils;\n\n hb.VM = runtime;\n hb.template = function(spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n};\n\nvar Handlebars = create();\nHandlebars.create = create;\n\nexports[\"default\"] = Handlebars;","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); partials = this.merge(partials, Handlebars.partials); data = data || {};\n var buffer = \"\", stack1, helper, self=this, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"image-box\\\">\\n \";\n stack1 = self.invokePartial(partials.cswitcher, 'cswitcher', depth0, helpers, partials, data);\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"image-box__image\\\">\\n <img src=\\\"\";\n if (helper = helpers.referenceURL) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.referenceURL); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" alt=\\\"Reference image\\\">\\n </div>\\n</div>\\n\";\n return buffer;\n });\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); partials = this.merge(partials, Handlebars.partials); data = data || {};\n var buffer = \"\", stack1, helper, self=this, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"image-box\\\">\\n \";\n stack1 = self.invokePartial(partials.cswitcher, 'cswitcher', depth0, helpers, partials, data);\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"image-box__image\\\">\\n <div class=\\\"image-box__title\\\">Reference</div>\\n <img src=\\\"\";\n if (helper = helpers.referenceURL) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.referenceURL); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" alt=\\\"Reference image\\\">\\n </div>\\n <button class=\\\"button image-box__replace\\\">&#x2b05;</button>\\n <div class=\\\"image-box__image\\\">\\n <div class=\\\"image-box__title\\\">Current</div>\\n <img src=\\\"\";\n if (helper = helpers.currentURL) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.currentURL); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" alt=\\\"Current image\\\">\\n </div>\\n <div class=\\\"image-box__image\\\">\\n <div class=\\\"image-box__title\\\">Diff</div>\\n <img src=\\\"\";\n if (helper = helpers.diffURL) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.diffURL); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" alt=\\\"Diff image\\\">\\n </div>\\n</div>\\n\";\n return buffer;\n });\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<pre class=\\\"stacktrace\\\">\\n\";\n if (helper = helpers.stack) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.stack); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n</pre>\\n\";\n return buffer;\n });\n","// hbsfy compiled Handlebars template\nvar HandlebarsCompiler = require('hbsfy/runtime');\nmodule.exports = HandlebarsCompiler.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n \n\n\n return \"<p>Test skipped</p>\\n\";\n });\n","\"use strict\";\nvar Utils = require(\"./utils\");\nvar Exception = require(\"./exception\")[\"default\"];\n\nvar VERSION = \"1.3.0\";\nexports.VERSION = VERSION;var COMPILER_REVISION = 4;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '>= 1.0.0'\n};\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar isArray = Utils.isArray,\n isFunction = Utils.isFunction,\n toString = Utils.toString,\n objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n\n registerDefaultHelpers(this);\n}\n\nexports.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: logger,\n log: log,\n\n registerHelper: function(name, fn, inverse) {\n if (toString.call(name) === objectType) {\n if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); }\n Utils.extend(this.helpers, name);\n } else {\n if (inverse) { fn.not = inverse; }\n this.helpers[name] = fn;\n }\n },\n\n registerPartial: function(name, str) {\n if (toString.call(name) === objectType) {\n Utils.extend(this.partials, name);\n } else {\n this.partials[name] = str;\n }\n }\n};\n\nfunction registerDefaultHelpers(instance) {\n instance.registerHelper('helperMissing', function(arg) {\n if(arguments.length === 2) {\n return undefined;\n } else {\n throw new Exception(\"Missing helper: '\" + arg + \"'\");\n }\n });\n\n instance.registerHelper('blockHelperMissing', function(context, options) {\n var inverse = options.inverse || function() {}, fn = options.fn;\n\n if (isFunction(context)) { context = context.call(this); }\n\n if(context === true) {\n return fn(this);\n } else if(context === false || context == null) {\n return inverse(this);\n } else if (isArray(context)) {\n if(context.length > 0) {\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n return fn(context);\n }\n });\n\n instance.registerHelper('each', function(context, options) {\n var fn = options.fn, inverse = options.inverse;\n var i = 0, ret = \"\", data;\n\n if (isFunction(context)) { context = context.call(this); }\n\n if (options.data) {\n data = createFrame(options.data);\n }\n\n if(context && typeof context === 'object') {\n if (isArray(context)) {\n for(var j = context.length; i<j; i++) {\n if (data) {\n data.index = i;\n data.first = (i === 0);\n data.last = (i === (context.length-1));\n }\n ret = ret + fn(context[i], { data: data });\n }\n } else {\n for(var key in context) {\n if(context.hasOwnProperty(key)) {\n if(data) { \n data.key = key; \n data.index = i;\n data.first = (i === 0);\n }\n ret = ret + fn(context[key], {data: data});\n i++;\n }\n }\n }\n }\n\n if(i === 0){\n ret = inverse(this);\n }\n\n return ret;\n });\n\n instance.registerHelper('if', function(conditional, options) {\n if (isFunction(conditional)) { conditional = conditional.call(this); }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function(conditional, options) {\n return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});\n });\n\n instance.registerHelper('with', function(context, options) {\n if (isFunction(context)) { context = context.call(this); }\n\n if (!Utils.isEmpty(context)) return options.fn(context);\n });\n\n instance.registerHelper('log', function(context, options) {\n var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;\n instance.log(level, context);\n });\n}\n\nvar logger = {\n methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },\n\n // State enum\n DEBUG: 0,\n INFO: 1,\n WARN: 2,\n ERROR: 3,\n level: 3,\n\n // can be overridden in the host environment\n log: function(level, obj) {\n if (logger.level <= level) {\n var method = logger.methodMap[level];\n if (typeof console !== 'undefined' && console[method]) {\n console[method].call(console, obj);\n }\n }\n }\n};\nexports.logger = logger;\nfunction log(level, obj) { logger.log(level, obj); }\n\nexports.log = log;var createFrame = function(object) {\n var obj = {};\n Utils.extend(obj, object);\n return obj;\n};\nexports.createFrame = createFrame;","\"use strict\";\n// Build out our basic SafeString type\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = function() {\n return \"\" + this.string;\n};\n\nexports[\"default\"] = SafeString;","\"use strict\";\n\nvar errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var line;\n if (node && node.firstLine) {\n line = node.firstLine;\n\n message += ' - ' + line + ':' + node.firstColumn;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n if (line) {\n this.lineNumber = line;\n this.column = node.firstColumn;\n }\n}\n\nException.prototype = new Error();\n\nexports[\"default\"] = Exception;","\"use strict\";\n/*jshint -W004 */\nvar SafeString = require(\"./safe-string\")[\"default\"];\n\nvar escape = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#x27;\",\n \"`\": \"&#x60;\"\n};\n\nvar badChars = /[&<>\"'`]/g;\nvar possible = /[&<>\"'`]/;\n\nfunction escapeChar(chr) {\n return escape[chr] || \"&amp;\";\n}\n\nfunction extend(obj, value) {\n for(var key in value) {\n if(Object.prototype.hasOwnProperty.call(value, key)) {\n obj[key] = value[key];\n }\n }\n}\n\nexports.extend = extend;var toString = Object.prototype.toString;\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\nvar isFunction = function(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\nif (isFunction(/x/)) {\n isFunction = function(value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nvar isFunction;\nexports.isFunction = isFunction;\nvar isArray = Array.isArray || function(value) {\n return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;\n};\nexports.isArray = isArray;\n\nfunction escapeExpression(string) {\n // don't escape SafeStrings, since they're already safe\n if (string instanceof SafeString) {\n return string.toString();\n } else if (!string && string !== 0) {\n return \"\";\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = \"\" + string;\n\n if(!possible.test(string)) { return string; }\n return string.replace(badChars, escapeChar);\n}\n\nexports.escapeExpression = escapeExpression;function isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nexports.isEmpty = isEmpty;","\"use strict\";\nvar Utils = require(\"./utils\");\nvar Exception = require(\"./exception\")[\"default\"];\nvar COMPILER_REVISION = require(\"./base\").COMPILER_REVISION;\nvar REVISION_CHANGES = require(\"./base\").REVISION_CHANGES;\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = COMPILER_REVISION;\n\n if (compilerRevision !== currentRevision) {\n if (compilerRevision < currentRevision) {\n var runtimeVersions = REVISION_CHANGES[currentRevision],\n compilerVersions = REVISION_CHANGES[compilerRevision];\n throw new Exception(\"Template was precompiled with an older version of Handlebars than the current runtime. \"+\n \"Please update your precompiler to a newer version (\"+runtimeVersions+\") or downgrade your runtime to an older version (\"+compilerVersions+\").\");\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new Exception(\"Template was precompiled with a newer version of Handlebars than the current runtime. \"+\n \"Please update your runtime to a newer version (\"+compilerInfo[1]+\").\");\n }\n }\n}\n\nexports.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial\n\nfunction template(templateSpec, env) {\n if (!env) {\n throw new Exception(\"No environment passed to template\");\n }\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as psuedo-supported APIs.\n var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {\n var result = env.VM.invokePartial.apply(this, arguments);\n if (result != null) { return result; }\n\n if (env.compile) {\n var options = { helpers: helpers, partials: partials, data: data };\n partials[name] = env.compile(partial, { data: data !== undefined }, env);\n return partials[name](context, options);\n } else {\n throw new Exception(\"The partial \" + name + \" could not be compiled when running in runtime-only mode\");\n }\n };\n\n // Just add water\n var container = {\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n programs: [],\n program: function(i, fn, data) {\n var programWrapper = this.programs[i];\n if(data) {\n programWrapper = program(i, fn, data);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = program(i, fn);\n }\n return programWrapper;\n },\n merge: function(param, common) {\n var ret = param || common;\n\n if (param && common && (param !== common)) {\n ret = {};\n Utils.extend(ret, common);\n Utils.extend(ret, param);\n }\n return ret;\n },\n programWithDepth: env.VM.programWithDepth,\n noop: env.VM.noop,\n compilerInfo: null\n };\n\n return function(context, options) {\n options = options || {};\n var namespace = options.partial ? options : env,\n helpers,\n partials;\n\n if (!options.partial) {\n helpers = options.helpers;\n partials = options.partials;\n }\n var result = templateSpec.call(\n container,\n namespace, context,\n helpers,\n partials,\n options.data);\n\n if (!options.partial) {\n env.VM.checkRevision(container.compilerInfo);\n }\n\n return result;\n };\n}\n\nexports.template = template;function programWithDepth(i, fn, data /*, $depth */) {\n var args = Array.prototype.slice.call(arguments, 3);\n\n var prog = function(context, options) {\n options = options || {};\n\n return fn.apply(this, [context, options.data || data].concat(args));\n };\n prog.program = i;\n prog.depth = args.length;\n return prog;\n}\n\nexports.programWithDepth = programWithDepth;function program(i, fn, data) {\n var prog = function(context, options) {\n options = options || {};\n\n return fn(context, options.data || data);\n };\n prog.program = i;\n prog.depth = 0;\n return prog;\n}\n\nexports.program = program;function invokePartial(partial, name, context, helpers, partials, data) {\n var options = { partial: true, helpers: helpers, partials: partials, data: data };\n\n if(partial === undefined) {\n throw new Exception(\"The partial \" + name + \" could not be found\");\n } else if(partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nexports.invokePartial = invokePartial;function noop() { return \"\"; }\n\nexports.noop = noop;"]}

@@ -44,3 +44,3 @@ 'use strict';

_getBrowsersData: function(suite, state) {
return this._app.browserIds.map(function(browserId) {
return suite.browsers.map(function(browserId) {
var fullPath = this._app.getScreenshotPath(suite, state.name, browserId),

@@ -47,0 +47,0 @@ data = {

{
"name": "gemini-gui",
"version": "0.3.1",
"version": "0.3.2",
"description": "GUI for gemini testing utility",

@@ -20,3 +20,3 @@ "main": "lib/index.js",

"chalk": "^1.0.0",
"coa": "^0.4.1",
"commander": "^2.9.0",
"express": "^4.8.6",

@@ -26,2 +26,3 @@ "express-handlebars": "^1.0.3",

"json-stringify-safe": "^5.0.1",
"lodash": "^3.10.1",
"opener": "^1.4.0",

@@ -32,4 +33,3 @@ "q": "^1.0.1",

"semver": "^3.0.1",
"temp": "^0.8.1",
"lodash": "^3.10.1"
"temp": "^0.8.1"
},

@@ -36,0 +36,0 @@ "devDependencies": {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc