Difference between revisions of "Template:Waterloo"

(Undo revision 309835 by Mastwood (talk))
(Undo revision 309828 by Mastwood (talk))
Line 1: Line 1:
 
<html>
 
<html>
  
<script>
+
/*
/* breakpoints.js v0.1-dev | @ajlkn | MIT licensed */
+
Industrious by TEMPLATED
 +
templated.co @templatedco
 +
Released for free under the Creative Commons Attribution 3.0 license (templated.co/license)
 +
*/
  
var breakpoints = (function() { "use strict"; var _ = {
 
 
/**
 
* List.
 
* @var {array}
 
*/
 
list: null,
 
 
/**
 
* Media cache.
 
* @var {object}
 
*/
 
media: {},
 
 
/**
 
* Events.
 
* @var {array}
 
*/
 
events: [],
 
 
/**
 
* Initialize.
 
* @param {array} list List.
 
*/
 
init: function(list) {
 
 
// Set list.
 
_.list = list;
 
 
// Add event listeners.
 
window.addEventListener('resize', _.poll);
 
window.addEventListener('orientationchange', _.poll);
 
window.addEventListener('load', _.poll);
 
window.addEventListener('fullscreenchange', _.poll);
 
 
},
 
 
/**
 
* Determines if a given query is active.
 
* @param {string} query Query.
 
* @return {bool} True if yes, false if no.
 
*/
 
active: function(query) {
 
 
var breakpoint, op, media,
 
a, x, y, units;
 
 
// Media for this query doesn't exist? Generate it.
 
if (!(query in _.media)) {
 
 
// Determine operator, breakpoint.
 
 
// Greater than or equal.
 
if (query.substr(0, 2) == '>=') {
 
 
op = 'gte';
 
breakpoint = query.substr(2);
 
 
}
 
 
// Less than or equal.
 
else if (query.substr(0, 2) == '<=') {
 
 
op = 'lte';
 
breakpoint = query.substr(2);
 
 
}
 
 
// Greater than.
 
else if (query.substr(0, 1) == '>') {
 
 
op = 'gt';
 
breakpoint = query.substr(1);
 
 
}
 
 
// Less than.
 
else if (query.substr(0, 1) == '<') {
 
 
op = 'lt';
 
breakpoint = query.substr(1);
 
 
}
 
 
// Not.
 
else if (query.substr(0, 1) == '!') {
 
 
op = 'not';
 
breakpoint = query.substr(1);
 
 
}
 
 
// Equal.
 
else {
 
 
op = 'eq';
 
breakpoint = query;
 
 
}
 
 
// Build media.
 
if (breakpoint && breakpoint in _.list) {
 
 
a = _.list[breakpoint];
 
 
// Range.
 
if (Array.isArray(a)) {
 
 
x = parseInt(a[0]);
 
y = parseInt(a[1]);
 
 
if (!isNaN(x))
 
units = a[0].substr(String(x).length);
 
else if (!isNaN(y))
 
units = a[1].substr(String(y).length);
 
else
 
return;
 
 
// Max only.
 
if (isNaN(x)) {
 
 
switch (op) {
 
 
// Greater than or equal (>= 0 / anything)
 
case 'gte':
 
media = 'screen';
 
break;
 
 
// Less than or equal (<= y)
 
case 'lte':
 
media = 'screen and (max-width: ' + y + units + ')';
 
break;
 
 
// Greater than (> y)
 
case 'gt':
 
media = 'screen and (min-width: ' + (y + 1) + units + ')';
 
break;
 
 
// Less than (< 0 / invalid)
 
case 'lt':
 
media = 'screen and (max-width: -1px)';
 
break;
 
 
// Not (> y)
 
case 'not':
 
media = 'screen and (min-width: ' + (y + 1) + units + ')';
 
break;
 
 
// Equal (<= y)
 
default:
 
media = 'screen and (max-width: ' + y + units + ')';
 
break;
 
 
}
 
 
}
 
 
// Min only.
 
else if (isNaN(y)) {
 
 
switch (op) {
 
 
// Greater than or equal (>= x)
 
case 'gte':
 
media = 'screen and (min-width: ' + x + units + ')';
 
break;
 
 
// Less than or equal (<= inf / anything)
 
case 'lte':
 
media = 'screen';
 
break;
 
 
// Greater than (> inf / invalid)
 
case 'gt':
 
media = 'screen and (max-width: -1px)';
 
break;
 
 
// Less than (< x)
 
case 'lt':
 
media = 'screen and (max-width: ' + (x - 1) + units + ')';
 
break;
 
 
// Not (< x)
 
case 'not':
 
media = 'screen and (max-width: ' + (x - 1) + units + ')';
 
break;
 
 
// Equal (>= x)
 
default:
 
media = 'screen and (min-width: ' + x + units + ')';
 
break;
 
 
}
 
 
}
 
 
// Min and max.
 
else {
 
 
switch (op) {
 
 
// Greater than or equal.
 
case 'gte':
 
media = 'screen and (min-width: ' + x + units + ')';
 
break;
 
 
// Less than or equal.
 
case 'lte':
 
media = 'screen and (max-width: ' + y + units + ')';
 
break;
 
 
// Greater than.
 
case 'gt':
 
media = 'screen and (min-width: ' + (y + 1) + units + ')';
 
break;
 
 
// Less than.
 
case 'lt':
 
media = 'screen and (max-width: ' + (x - 1) + units + ')';
 
break;
 
 
// Not.
 
case 'not':
 
media = 'screen and (max-width: ' + (x - 1) + units + '), screen and (min-width: ' + (y + 1) + units + ')';
 
break;
 
 
// Equal.
 
default:
 
media = 'screen and (min-width: ' + x + units + ') and (max-width: ' + y + units + ')';
 
break;
 
 
}
 
 
}
 
 
}
 
 
// String.
 
else {
 
 
// Missing a media type? Prefix with "screen".
 
if (a.charAt(0) == '(')
 
media = 'screen and ' + a;
 
 
// Otherwise, use as-is.
 
else
 
media = a;
 
 
}
 
 
}
 
 
// Cache.
 
_.media[query] = (media ? media : false);
 
 
}
 
 
return (
 
_.media[query] === false
 
? false
 
: window.matchMedia(_.media[query]).matches
 
);
 
 
},
 
 
/**
 
* Registers an event.
 
* @param {string} query Query.
 
* @param {function} handler Handler.
 
*/
 
on: function(query, handler) {
 
 
// Register event.
 
_.events.push({
 
query: query,
 
handler: handler,
 
state: false
 
});
 
 
// Query active *right now*? Call handler.
 
if (_.active(query))
 
(handler)();
 
 
},
 
 
/**
 
* Polls for events.
 
*/
 
poll: function() {
 
 
var i, e;
 
 
// Step through events.
 
for (i=0; i < _.events.length; i++) {
 
 
// Get event.
 
e = _.events[i];
 
 
// Active?
 
if (_.active(e.query)) {
 
 
// Hasn't been called yet?
 
if (!e.state) {
 
 
// Mark as called.
 
e.state = true;
 
 
// Call handler.
 
(e.handler)();
 
 
}
 
 
}
 
 
// Otherwise ...
 
else {
 
 
// Previously called?
 
if (e.state) {
 
 
// Unmark as called.
 
e.state = false;
 
 
}
 
 
}
 
 
}
 
 
},
 
 
}; function __(list) { _.init(list); }; __._ = _; __.on = function(query, handler) { _.on(query, handler); }; __.active = function(query) { return _.active(query); }; return __; })();
 
 
// UMD Wrapper (github.com/umdjs/umd/blob/master/returnExports.js | @umdjs + @nason)
 
(function(root, factory) {
 
 
// AMD.
 
if (typeof define === 'function' && define.amd)
 
define([], factory);
 
 
// Node.
 
else if (typeof exports === 'object')
 
module.exports = factory();
 
 
// Breakpoints global.
 
else
 
root.breakpoints = factory();
 
 
}(this, function() { return breakpoints; }));
 
</script>
 
 
<script>
 
<script>
 
(function($) {
 
(function($) {

Revision as of 22:06, 17 October 2019

/* Industrious by TEMPLATED templated.co @templatedco Released for free under the Creative Commons Attribution 3.0 license (templated.co/license) */