Skip to content
This repository has been archived by the owner on Sep 21, 2022. It is now read-only.

Commit

Permalink
Bundle all client scripts in one minified file
Browse files Browse the repository at this point in the history
This saves us request count and time
  • Loading branch information
scf2k authored and Sergey Tatarintsev committed Apr 6, 2015
1 parent 36b2a62 commit cf03bdc
Show file tree
Hide file tree
Showing 7 changed files with 439 additions and 401 deletions.
204 changes: 101 additions & 103 deletions lib/browser/client-scripts/gemini.coverage.js
@@ -1,126 +1,124 @@
(function(window) {
/*jshint browser:true, node:false*/
'use strict';
var exports = window.__gemini || {};
/*jshint browserify:true*/
'use strict';

exports.collectCoverage = function collectCoverage(rect) {
var coverage = {},
sheets = document.styleSheets;
try {
for (var i = 0; i < sheets.length; i++) {
var href = sheets[i].href,
rules = getRules(sheets[i]);
var util = require('./util'),
rect = require('./rect');

if (rules.ignored) {
coverage[href] = rules;
continue;
}
var ctx = {
// media rule counter
// coverage for media rules is stored by its index within stylesheet
media: -1,
href: href,
coverage: coverage
};
for (var r = 0; r < rules.length; r++) {
coverageForRule(rules[r], rect, ctx);
}
exports.collectCoverage = function collectCoverage(rect) {
var coverage = {},
sheets = document.styleSheets;
try {
for (var i = 0; i < sheets.length; i++) {
var href = sheets[i].href,
rules = getRules(sheets[i]);

if (rules.ignored) {
coverage[href] = rules;
continue;
}
} catch (e) {
return {
error: 'JS',
message: e.stack || e.message
var ctx = {
// media rule counter
// coverage for media rules is stored by its index within stylesheet
media: -1,
href: href,
coverage: coverage
};
for (var r = 0; r < rules.length; r++) {
coverageForRule(rules[r], rect, ctx);
}
}
} catch (e) {
return {
error: 'JS',
message: e.stack || e.message
};
}

return coverage;
};
return coverage;
};

function getRules(styleSheet) {
try {
return styleSheet.cssRules || styleSheet.rules;
} catch (e) {
if (e.name === 'SecurityError') {
return {
ignored: true,
message: 'Unable to read stylesheet rules due to the same origin policy'
};
}
throw e;
function getRules(styleSheet) {
try {
return styleSheet.cssRules || styleSheet.rules;
} catch (e) {
if (e.name === 'SecurityError') {
return {
ignored: true,
message: 'Unable to read stylesheet rules due to the same origin policy'
};
}
throw e;
}
}

function coverageForRule(rule, area, ctx) {
if (rule.cssRules || rule.styleSheet) {
if (rule.conditionText) {
ctx.media++;
if (!window.matchMedia(rule.conditionText).matches) {
return;
}
}

var rules = rule.cssRules || rule.styleSheet.cssRules;
for (var r = 0; r < rules.length; r++) {
coverageForRule(rules[r], area, ctx);
function coverageForRule(rule, area, ctx) {
if (rule.cssRules || rule.styleSheet) {
if (rule.conditionText) {
ctx.media++;
if (!window.matchMedia(rule.conditionText).matches) {
return;
}

return;
}

if (!rule.selectorText) {
return;
var rules = rule.cssRules || rule.styleSheet.cssRules;
for (var r = 0; r < rules.length; r++) {
coverageForRule(rules[r], area, ctx);
}

exports.each(rule.selectorText.split(','), function(selector) {
var within,
matches = document.querySelectorAll(selector);
return;
}

if (!rule.selectorText) {
return;
}

selector = selector.trim();
util.each(rule.selectorText.split(','), function(selector) {
var within,
matches = document.querySelectorAll(selector);

var re = /:{1,2}(?:after|before|first-letter|first-line|selection)(:{1,2}\w+)?$/;
// if selector contains pseudo-elements cut it off and try to find element without it
if (matches.length === 0 && re.test(selector)) {
matches = document.querySelectorAll(selector.replace(re, '$1'));
}
selector = selector.trim();

if (matches.length > 0) {
for (var match = 0; match < matches.length; match++) {
var w = elemWithinArea(matches[match], area);
if (within === undefined) {
within = w;
}
if (within) {
break;
}
if (w !== undefined) {
within = w;
}
}
}
var re = /:{1,2}(?:after|before|first-letter|first-line|selection)(:{1,2}\w+)?$/;
// if selector contains pseudo-elements cut it off and try to find element without it
if (matches.length === 0 && re.test(selector)) {
matches = document.querySelectorAll(selector.replace(re, '$1'));
}

var byfile = ctx.coverage[ctx.href] = ctx.coverage[ctx.href] || {};
if (rule.parentRule && rule.parentRule.conditionText) {
selector = '?' + ctx.media + ':' + selector;
}
if (within !== undefined && (!byfile[selector] || !byfile[selector].within)) {
byfile[selector] = {
within: within
};
if (matches.length > 0) {
for (var match = 0; match < matches.length; match++) {
var w = elemWithinArea(matches[match], area);
if (within === undefined) {
within = w;
}
if (within) {
break;
}
if (w !== undefined) {
within = w;
}
}
});
}
}

/**
* returns undefined when not within, false when overlaps, true when within
*/
function elemWithinArea(elem, captureRect) {
var elemRect = window.__gemini.getAbsoluteClientRect(elem);
if (captureRect.rectInside(elemRect)) {
return true;
} else if (elemRect.rectInside(captureRect)) {
return false;
var byfile = ctx.coverage[ctx.href] = ctx.coverage[ctx.href] || {};
if (rule.parentRule && rule.parentRule.conditionText) {
selector = '?' + ctx.media + ':' + selector;
}
}
if (within !== undefined && (!byfile[selector] || !byfile[selector].within)) {
byfile[selector] = {
within: within
};
}
});
}

window.__gemini = exports;
}(window));
/**
* returns undefined when not within, false when overlaps, true when within
*/
function elemWithinArea(elem, captureRect) {
var elemRect = rect.getAbsoluteClientRect(elem);
if (captureRect.rectInside(elemRect)) {
return true;
} else if (elemRect.rectInside(captureRect)) {
return false;
}
}

0 comments on commit cf03bdc

Please sign in to comment.