sp_auth_credentials: "mkwstest/mkwstest"
}
</script>
- <link rel="stylesheet" type="text/css" href="//mkws.indexdata.com/mkws.css" />
+ <link rel="stylesheet" type="text/css" href="tools/htdocs/mkws.css" />
<script type="text/javascript" src="tools/htdocs/jquery-1.10.0.min.js"></script>
<script type="text/javascript" src="tools/htdocs/jquery.json-2.4.js"></script>
<script type="text/javascript" src="tools/htdocs/handlebars-v2.0.0.js"></script>
sp_auth_credentials: "mkwstest/mkwstest"
}
</script>
- <link rel="stylesheet" type="text/css" href="//mkws.indexdata.com/mkws.css" />
+ <link rel="stylesheet" type="text/css" href="tools/htdocs/mkws.css" />
<script type="text/javascript" src="tools/htdocs/jquery-1.10.0.min.js"></script>
<script type="text/javascript" src="tools/htdocs/jquery.json-2.4.js"></script>
<script type="text/javascript" src="tools/htdocs/handlebars-v2.0.0.js"></script>
<script type="text/javascript" src="src/mkws-templates.js"></script>
</head>
<body>
- <div class="mkws-authname"></div>
+ <div class="mkws-auth-name"></div>
<div class="mkws-switch"></div>
<div class="mkws-lang"></div>
<div class="mkws-progress"></div>
// wrapper to provide local copy of the jQuery object.
(function($) {
var log = mkws.log;
+ var _old2new = { // Maps old-style widget names to new-style
+ 'Authname': 'auth-name',
+ 'ConsoleBuilder': 'console-builder',
+ 'Coverart': 'cover-art',
+ 'GoogleImage': 'google-image',
+ 'MOTD': 'motd',
+ 'MOTDContainer': 'motd-container',
+ 'Perpage': 'per-page',
+ 'SearchForm': 'search-form',
+ };
+ // Annoyingly, there is no built-in way to invert a hash
+ var _new2old = {};
+ for (var key in _old2new) {
+ if(_old2new.hasOwnProperty(key)) {
+ _new2old[_old2new[key]] = key;
+ }
+ }
function handleNodeWithTeam(node, callback) {
// First branch for DOM objects; second branch for jQuery objects
for (var i = 0; i < list.length; i++) {
var cname = list[i];
- if (cname.match(/^mkwsTeam_/)) {
+ if (cname.match(/^mkws-team-/)) {
+ // New-style teamnames of the form mkws-team-xyz
+ teamName = cname.replace(/^mkws-team-/, '');
+ } else if (cname.match(/^mkwsTeam_/)) {
+ // Old-style teamnames of the form mkwsTeam_xyz
teamName = cname.replace(/^mkwsTeam_/, '');
+ } else if (cname.match(/^mkws-/)) {
+ // New-style names of the from mkws-foo-bar
+ type = cname.replace(/^mkws-/, '');
} else if (cname.match(/^mkws/)) {
- type = cname.replace(/^mkws/, '');
+ // Old-style names of the form mkwsFooBar
+ var tmp = cname.replace(/^mkws/, '');
+ type = _old2new[tmp] || tmp.toLowerCase();
}
}
for (var tname in mkws.teams) {
var team = mkws.teams[tname];
team.visitWidgets(function(t, w) {
- var w1 = team.widget(t + "-Container-" + from);
- var w2 = team.widget(t + "-Container-" + to);
+ var w1 = team.widget(t + "-container-" + from);
+ var w2 = team.widget(t + "-container-" + to);
if (w1) {
w1.node.hide();
}
var s = "";
for (var type in mkws.widgetType2function) {
if (s) s += ',';
- s += '.mkws' + type;
- s += ',.mkws' + type + "-Container-wide";
- s += ',.mkws' + type + "-Container-narrow";
+ s += '.mkws-' + type;
+ s += ',.mkws-' + type + "-container-wide";
+ s += ',.mkws-' + type + "-container-narrow";
+ // Annoyingly, we also need to recognise old-style names
+ var oldtype = _new2old[type] || type.charAt(0).toUpperCase() + type.slice(1);
+ s += ',.mkws' + oldtype;
+ s += ',.mkws' + oldtype + "-Container-wide";
+ s += ',.mkws' + oldtype + "-Container-narrow";
}
return s;
}
//"use strict";
// $(document).ready(function () {
-mkws.registerWidgetType('Popup', function() {
+mkws.registerWidgetType('popup', function() {
var $ = mkws.$;
var debug = mkws.log;
debug("init popup window");
// switching view between targets and records
function switchView(view) {
- var targets = widgetNode('Targets');
- var results = widgetNode('Results') || widgetNode('Records');
- var blanket = widgetNode('Blanket');
- var motd = widgetNode('MOTD');
+ var targets = widgetNode('targets');
+ var results = widgetNode('results') || widgetNode('records');
+ var blanket = widgetNode('blanket');
+ var motd = widgetNode('motd');
switch(view) {
case 'targets':
-mkws.registerWidgetType('Authname', function() {
+mkws.registerWidgetType('auth-name', function() {
var that = this;
this.team.queue("authenticated").subscribe(function(authName) {
-mkws.registerWidgetType('Builder', function() {
+mkws.registerWidgetType('builder', function() {
var that = this;
var team = this.team;
});
this.node.append(button);
button.click(function() {
- var query = team.widget('Query').value();
- var sort = team.widget('Sort').value();
- var perpage = team.widget('Perpage').value();
+ var query = team.widget('query').value();
+ var sort = team.widget('sort').value();
+ var perpage = team.widget('per-page').value();
var html = ('<div class="mkwsRecords" ' +
'autosearch="' + query + '" ' +
});
});
-mkws.registerWidgetType('ConsoleBuilder', function() {
- mkws.promotionFunction('Builder').call(this);
+mkws.registerWidgetType('console-builder', function() {
+ mkws.promotionFunction('builder').call(this);
this.callback = function(s) {
console.log("generated widget: " + s);
}
-mkws.registerWidgetType('Categories', function() {
+mkws.registerWidgetType('categories', function() {
var that = this;
if (!mkws.authenticated) {
-mkws.registerWidgetType('Log', function() {
+mkws.registerWidgetType('log', function() {
var that = this;
this.team.queue("log").subscribe(function(teamName, timestamp, message) {
// source files.
-mkws.registerWidgetType('Targets', function() {
+mkws.registerWidgetType('targets', function() {
if (!this.config.show_switch) return;
var that = this;
});
-mkws.registerWidgetType('Stat', function() {
+mkws.registerWidgetType('stat', function() {
var that = this;
this.team.queue("stat").subscribe(function(data) {
var template = that.team.loadTemplate(that.config.template || "Stat");
});
-mkws.registerWidgetType('Pager', function() {
+mkws.registerWidgetType('pager', function() {
var that = this;
var M = mkws.M;
});
});
-mkws.registerWidgetType('Details', function() {
+mkws.registerWidgetType('details', function() {
var that = this;
var recid = that.node.attr("data-mkws-recid");
if (this.team.gotRecords()) {
that.autosearch();
});
-mkws.registerWidgetType('Records', function() {
+mkws.registerWidgetType('records', function() {
var that = this;
var team = this.team;
});
-mkws.registerWidgetType('Navi', function() {
+mkws.registerWidgetType('navi', function() {
var that = this;
var teamName = this.team.name();
// It seems this and the Perpage widget doen't need to subscribe to
// anything, since they produce events rather than consuming them.
//
-mkws.registerWidgetType('Sort', function() {
+mkws.registerWidgetType('sort', function() {
var that = this;
this.node.change(function() {
});
-mkws.registerWidgetType('Perpage', function() {
+mkws.registerWidgetType('per-page', function() {
var that = this;
this.node.change(function() {
});
-mkws.registerWidgetType('Done', function() {
+mkws.registerWidgetType('done', function() {
var that = this;
this.team.queue("complete").subscribe(function(n) {
var template = that.team.loadTemplate(that.config.template || "Done");
});
-mkws.registerWidgetType('Switch', function() {
+mkws.registerWidgetType('switch', function() {
if (!this.config.show_switch) return;
var tname = this.team.name();
var output = {};
});
-mkws.registerWidgetType('Search', function() {
+mkws.registerWidgetType('search', function() {
var output = {};
output.team = this.team.name();
output.queryWidth = this.config.query_width;
});
-mkws.registerWidgetType('SearchForm', function() {
+mkws.registerWidgetType('search-form', function() {
var team = this.team;
this.node.submit(function() {
- var val = team.widget('Query').value();
+ var val = team.widget('query').value();
team.newSearch(val);
return false;
});
});
-mkws.registerWidgetType('Results', function() {
+mkws.registerWidgetType('results', function() {
var template = this.team.loadTemplate(this.config.template || "Results");
this.node.html(template({team: this.team.name()}));
this.autosearch();
});
-mkws.registerWidgetType('Ranking', function() {
+mkws.registerWidgetType('ranking', function() {
var output = {};
output.perPage = [];
output.sort = [];
});
-mkws.registerWidgetType('Lang', function() {
+mkws.registerWidgetType('lang', function() {
// dynamic URL or static page? /path/foo?query=test
/* create locale language menu */
if (!this.config.show_lang) return;
});
-mkws.registerWidgetType('MOTD', function() {
- var container = this.team.widget('MOTDContainer');
+mkws.registerWidgetType('motd', function() {
+ var container = this.team.widget('motd-container');
if (container) {
// Move the MOTD from the provided element down into the container
this.node.appendTo(container.node);
// is copied up into its team, allowing it to affect other widgets in
// the team.
//
-mkws.registerWidgetType('Config', function() {
+mkws.registerWidgetType('config', function() {
var c = this.config;
for (var name in c) {
if (c.hasOwnProperty(name)) {
});
-mkws.registerWidgetType('Progress', function() {
+mkws.registerWidgetType('progress', function() {
var that = this;
this.node.hide();
this.team.queue("stat").subscribe(function(data) {
// no actual functionality. We register these to prevent ignorable
// warnings when they occur.
-mkws.registerWidgetType('Query', function() {});
-mkws.registerWidgetType('MOTDContainer', function() {});
-mkws.registerWidgetType('Button', function() {});
+mkws.registerWidgetType('query', function() {});
+mkws.registerWidgetType('motd-container', function() {});
+mkws.registerWidgetType('button', function() {});
})(mkws.$); // jQuery wrapper
// A widget for one record
-mkws.registerWidgetType('Record', function() {
+mkws.registerWidgetType('record', function() {
if (!this.config.maxrecs) this.config.maxrecs = 1;
var that = this;
var team = this.team;
that.autosearch();
});
-mkws.registerWidgetType('Image', function() {
- mkws.promotionFunction('Records').call(this);
+mkws.registerWidgetType('image', function() {
+ mkws.promotionFunction('records').call(this);
if (!this.config.template) this.config.template = 'Image';
});
-mkws.registerWidgetType('GoogleImage', function() {
- mkws.promotionFunction('Image').call(this);
+mkws.registerWidgetType('google-image', function() {
+ mkws.promotionFunction('image').call(this);
if (!this.config.target) this.config.target = 'Google_Images';
});
-mkws.registerWidgetType('Lolcat', function() {
- mkws.promotionFunction('GoogleImage').call(this);
+mkws.registerWidgetType('lolcat', function() {
+ mkws.promotionFunction('google-image').call(this);
if (!this.config.autosearch) this.config.autosearch = 'kitteh';
});
-mkws.registerWidgetType('Coverart', function() {
- mkws.promotionFunction('Image').call(this);
+mkws.registerWidgetType('cover-art', function() {
+ mkws.promotionFunction('image').call(this);
if (!this.config.target) this.config.target = 'AmazonBooks';
});
-mkws.registerWidgetType('Reference', function() {
- mkws.promotionFunction('Record').call(this);
+mkws.registerWidgetType('reference', function() {
+ mkws.promotionFunction('record').call(this);
if (!this.config.target) this.config.target = 'wikimedia_wikipedia_single_result';
if (!this.config.template) this.config.template = 'Reference';
this.config.template_vars.paragraphs = this.config.paragraphs || 0;
-mkws.registerWidgetType('Termlists', function() {
+mkws.registerWidgetType('termlists', function() {
// Initially hide the termlists; display when we get results
var that = this;
var team = this.team;
});
-mkws.registerWidgetType('Facet', function() {
+mkws.registerWidgetType('facet', function() {
var facetConfig = {
xtargets: [ "Sources", 16, false ],
subject: [ "Subjects", 10, true ],
done - number of targets complete
waiting - number of targets waiting
}}
-<span class="mkwsDone">{{#mkws-repeat done}}█{{/mkws-repeat}}</span>
+<span class="mkws-done mkwsDone">{{#mkws-repeat done}}█{{/mkws-repeat}}</span>
{{~#if waiting~}}
-<span class="mkwsWaiting">{{#mkws-repeat waiting}}█{{/mkws-repeat}}</span>
+<span class="mkws-waiting mkwsWaiting">{{#mkws-repeat waiting}}█{{/mkws-repeat}}</span>
{{~/if~}}
team - MKWS team
queryWidth - configured width for search box
}}
-<form name="mkwsSearchForm" class="mkwsSearchForm mkwsTeam_{{team}}" action="">
- <input class="mkwsQuery mkwsTeam_{{team}}" type="text" size="{{queryWidth}}">
- <input class="mkwsButton mkwsTeam_{{team}}" type="submit" value="{{{mkws-translate "Search"}}}">
+<form name="mkws-search-form" class="mkws-search-form mkws-team-{{team}}" action="">
+ <input class="mkws-query mkwsQuery mkws-team-{{team}}" type="text" size="{{queryWidth}}">
+ <input class="mkws-button mkwsButton mkws-team-{{team}}" type="submit" value="{{{mkws-translate "Search"}}}">
</form>
PERL_SCRIPTS= ../bin/bomb.pl
PROG= ../phantom/screenshot.js
MD5= $(shell which md5 md5sum)
-TIMEOUT=5
+TESTS= koha demos mike # koha.url
+TIMEOUT=4
+PREFIX= test
PHANTOMJS_URL= http://cph.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi
PHANTOMJS_URL= http://www.indexdata.com/
all: help
clean:
- rm -f mkws-error.png mkws-error.html
- rm -f ${IMAGES}/*.png ${IMAGES}/*.png.tmp
- rm -f ${IMAGES}/index.html
+ rm -f index-*.html
+ rm -f ${IMAGES}/*.png
distclean: clean
+ rm -f ${IMAGES}/*.png.tmp
test: check
screenshot:
- file=$$(echo "${PHANTOMJS_URL}" | perl -npe 's,(\W),-,g'); \
+ file=${PREFIX}.$$(echo "${PHANTOMJS_URL}" | perl -npe 's,(\W),-,g; s/-$$//;'); \
${PHANTOMJS} ${PROG} ${PHANTOMJS_URL} ${IMAGES}/tmp.$$file.png ${SCREENSHOT_WIDTH_HEIGHT} ${TIMEOUT}; \
mv -f ${IMAGES}/tmp.$$file.png ${IMAGES}/$$file.png
-screenshots: clean
- for i in $$(cat url.txt); do \
- ${MAKE} PHANTOMJS_URL="$$i" TIMEOUT=4 screenshot; \
- done; wait
- ${MAKE} index
+screenshots: clean estimate-time
+ for t in ${TESTS}; do \
+ for i in $$(cat url.$$t); do \
+ ${MAKE} PHANTOMJS_URL="$$i" TIMEOUT=4 PREFIX=$$t screenshot; \
+ done; \
+ ${MAKE} PREFIX=$$t index; \
+ done
+
+estimate-time:
+ @wc -l url.* | tail -n1 | awk '{print "Estimeate run time: " $$1 * (1 + '${TIMEOUT}'), "seconds" }'
+ @echo ""
index:
- cd ${IMAGES}; ls -tr *.png | perl -ne 'chomp; print qq{<h2>$$_</h2><img src="$$_"/><br/><br/><p/>\n}' > index.html
+ ( cd ${IMAGES}; ls -tr ${PREFIX}.*.png | perl -ne 'chomp; print qq{<h2>$$_</h2><img src="'${IMAGES}/'$$_"/><br/><br/><p/>\n}' ) > index-${PREFIX}.html
help:
@echo "make [ all | clean | distclean ]"
@echo " [ screenshots ]"
@echo " [ screenshot | index ]"
@echo ""
+ @echo "Examples: "
+ @echo ""
+ @echo "make TESTS=mike screenshots"
--- /dev/null
+http://example.indexdata.com/simple.html
+http://example.indexdata.com/minimal.html
+http://example.indexdata.com/language.html
+http://example.indexdata.com/mobile.html
+http://example.indexdata.com/lowlevel.html
--- /dev/null
+http://cph.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi
+http://demo.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi
+http://demo.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi2
+http://boston.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi
+http://example.indexdata.com/topic.html?q=sushi
+http://example.indexdata.com/simple.html
+
--- /dev/null
+http://zthes.z3950.org/
+http://sagp.miketaylor.org.uk/
+++ /dev/null
-http://cph.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi
-http://demo.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi
-http://demo.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi2
-http://boston.koha.indexdata.com/cgi-bin/koha/opac-search.pl?q=sushi
-http://example.indexdata.com/topic.html?q=sushi
-http://example.indexdata.com/simple.html
-
-.mkwsLang,
-.mkwsSwitch,
-.mkwsSearch,
-.mkwsTermlists,
-.mkwsFacet,
-.mkwsRanking,
-.mkwsPager,
-.mkwsNavi,
-.mkwsRecords,
-.mkwsRecord,
-.mkwsTargets,
-.mkwsStat,
-.mkwsMOTD {
+.mkwsLang, .mkws-lang,
+.mkwsSwitch, .mkws-switch,
+.mkwsSearch, .mkws-search,
+.mkwsTermlists, .mkws-termlists,
+.mkwsFacet, .mkws-facet,
+.mkwsRanking, .mkws-ranking,
+.mkwsPager, .mkws-pager,
+.mkwsNavi, .mkws-navi,
+.mkwsRecords, .mkws-records,
+.mkwsRecord, .mkws-record,
+.mkwsTargets, .mkws-targets,
+.mkwsStat, .mkws-stat,
+.mkwsMOTD, .mkws-motd {
font-family: Gill Sans, "Gillius ADF", Gillius, GilliusADF, Verdana, Sans-Serif;
}
-.mkwsLang {
+.mkwsLang, .mkws-lang {
float: left;
padding-left: 1em;
padding-top: 0.4em;
}
-.mkwsLang a {
+.mkwsLang a, .mkws-lang a {
background: #d0e0ff;
padding: 1px 4px;
}
-.mkwsLang span {
+.mkwsLang span, .mkws-lang span {
border: solid 1px #d0e0ff;
padding: 0px 3px;
}
-.mkwsSearch {
+.mkwsSearch, .mkws-search {
float: right;
}
-.mkwsSwitch {
+.mkwsSwitch, .mkws-switch {
float: right;
padding-left: 1em;
padding-top: 0.4em;
}
-.mkwsTargets {
+.mkwsTargets, .mkws-targets {
background-color: #fafafa;
}
-.mkwsStat {
+.mkwsStat, .mkws-stat {
margin-top: 10px;
border-top: 1px solid #156a16;
padding-top: 5px;
font-size: small;
}
-.mkwsStat:before {
+.mkwsStat:before, .mkws-stat:before {
content: "Status info";
font-weight: bold;
}
-.mkwsSwitch a,
-.mkwsLang a,
-.mkwsFacet a,
-.mkwsRanking a,
-.mkwsPager a,
-.mkwsNavi a,
-.mkwsRecords a,
-.mkwsRecord a {
+.mkwsSwitch a, .mkws-switch a,
+.mkwsLang a, .mkws-lang a,
+.mkwsFacet a, .mkws-facet a,
+.mkwsRanking a, .mkws-ranking a,
+.mkwsPager a, .mkws-pager a,
+.mkwsNavi a, .mkws-navi a,
+.mkwsRecords a, .mkws-records a,
+.mkwsRecord a, .mkws-record a {
color: #005701;
text-decoration: none;
}
-.mkwsSwitch a:hover,
-.mkwsLang a:hover,
-.mkwsFacet a:hover,
-.mkwsPager a:hover,
-.mkwsRecords a:hover,
-.mkwsRecord a:hover {
+.mkwsSwitch a:hover, .mkws-switch a:hover,
+.mkwsLang a:hover, .mkws-lang a:hover,
+.mkwsFacet a:hover, .mkws-facet a:hover,
+.mkwsPager a:hover, .mkws-pager a:hover,
+.mkwsRecords a:hover, .mkws-records a:hover,
+.mkwsRecord a:hover, .mkws-record a:hover {
text-decoration: underline;
}
-.mkwsNavi a.mkwsRemovable:hover {
+.mkwsNavi a.mkwsRemovable:hover, .mkws-navi a.mkws-removable:hover {
text-decoration: line-through;
}
-.mkwsSearch input.mkwsButton {
+.mkwsSearch input.mkwsButton, .mkws-search input.mkws-button {
border: 3px outset #132194;
background-color: #132194;
padding: 2px;
cursor: pointer;
}
-.mkwsSearch input.mkwsQuery {
+.mkwsSearch input.mkwsQuery, .mkws-search input.mkws-query {
border: 2px inset #e0f0ff;
padding: 3px;
font-size: 12px;
background: #f0f8ff;
}
-.mkwsTermlistsTitle {
+.mkwsTermlistsTitle, .mkws-termlists-title {
font-size: large;
font-weight: bold;
text-transform: uppercase;
}
-.mkwsTermlists {
+.mkwsTermlists, .mkws-termlists {
background: #d0e0ff;
padding: 0.7em;
font-size: small;
-webkit-border-top-right-radius: 10px;
}
-.mkwsTermlists.active {
+.mkwsTermlists.active, .mkws-termlists.active {
display: block;
}
-.mkwsFacet {
+.mkwsFacet, .mkws-facet {
background: #e0f0ff;
padding: 0.7em;
margin-top: 0.7em;
-webkit-border-top-right-radius: 10px;
}
-.mkwsTerm {
+.mkwsTerm, .mkws-term {
clear: both;
}
-.mkwsTerm span {
+.mkwsTerm span, .mkws-term span {
float: right;
}
-.mkwsFacetTitle {
+.mkwsFacetTitle, .mkws-facet-title {
font-weight: bold;
}
-.mkwsSummary {
+.mkwsSummary, .mkws-summary {
padding: 5px;
}
-.mkwsDetails {
+.mkwsDetails, .mkws-details {
border: 1px solid #404040;
background: #e8e8e8;
color: black;
-webkit-border-top-right-radius: 10px;
}
-.mkwsDetails th {
+.mkwsDetails th, .mkws-details th {
text-align: right;
vertical-align: top;
padding-right: 0.6em;
}
-.mkwsDetails th:after {
+.mkwsDetails th:after, .mkws-details th:after {
content: ":";
}
-.mkwsPager {
+.mkwsPager, .mkws-pager {
background: #e0e0e0;
padding: 0.3em;
}
-.mkwsTargets table thead tr td {
+.mkwsTargets table thead tr td, .mkws-targets table thead tr td {
background-color: #132194;
color: white;
font-weight: bold;
padding: 0.2em 0.5em;
}
-.mkwsTargets table tbody tr:nth-child(odd) {
+.mkwsTargets table tbody tr:nth-child(odd), .mkws-targets table tbody tr:nth-child(odd) {
background-color: #e0f0ff;
}
-.mkwsTargets table tbody tr:nth-child(even) {
+.mkwsTargets table tbody tr:nth-child(even), .mkws-targets table tbody tr:nth-child(even) {
background-color: #d0e0ff;
}
-.mkwsTargets table tbody tr td {
+.mkwsTargets table tbody tr td, .mkws-targets table tbody tr td {
padding: 0.2em 0.5em;
}
-.mkwsCurrentPage {
+.mkwsCurrentPage, .mkws-current-page {
padding: 0.1em 0.5em;
background: #508751;
color: white;
}
-.mkwsProgress {
+.mkwsProgress, .mkws-progress {
border: 1px solid #c0c0c0;
float: left;
margin-left: 2em;
padding: 0 0.3em;
}
-.mkwsProgress .mkwsDone { color: #005701 }
-.mkwsProgress .mkwsWaiting { color: #c0c0c0 }
+.mkwsProgress .mkwsDone, .mkws-progress .mkws-done { color: #005701 }
+.mkwsProgress .mkwsWaiting, .mkws-progress .mkws-waiting { color: #c0c0c0 }
-.mkwsResults table {
+.mkwsResults table, .mkws-results table {
display: inline-table /* only for Firefox! */
}