summaryrefslogtreecommitdiffstats
path: root/afb-client/bower_components/viewport-units-buggyfill
diff options
context:
space:
mode:
Diffstat (limited to 'afb-client/bower_components/viewport-units-buggyfill')
-rw-r--r--afb-client/bower_components/viewport-units-buggyfill/.bower.json30
-rwxr-xr-xafb-client/bower_components/viewport-units-buggyfill/Gruntfile.js19
-rwxr-xr-xafb-client/bower_components/viewport-units-buggyfill/bower.json20
-rwxr-xr-xafb-client/bower_components/viewport-units-buggyfill/package.json43
-rw-r--r--afb-client/bower_components/viewport-units-buggyfill/viewport-units-buggyfill.hacks.js138
-rwxr-xr-xafb-client/bower_components/viewport-units-buggyfill/viewport-units-buggyfill.js347
6 files changed, 597 insertions, 0 deletions
diff --git a/afb-client/bower_components/viewport-units-buggyfill/.bower.json b/afb-client/bower_components/viewport-units-buggyfill/.bower.json
new file mode 100644
index 0000000..ca2be55
--- /dev/null
+++ b/afb-client/bower_components/viewport-units-buggyfill/.bower.json
@@ -0,0 +1,30 @@
+{
+ "name": "viewport-units-buggyfill",
+ "version": "0.4.1",
+ "main": [
+ "./viewport-units-buggyfill.js",
+ "./viewport-units-buggyfill.hacks.js"
+ ],
+ "ignore": [
+ "**/.*",
+ "examples",
+ "*.html",
+ "*.css",
+ "*.md"
+ ],
+ "keywords": [
+ "ios",
+ "safari",
+ "viewport"
+ ],
+ "homepage": "https://github.com/rodneyrehm/viewport-units-buggyfill",
+ "_release": "0.4.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.4.1",
+ "commit": "78773d57c98637e1461da53c4917ca44dc1b3d33"
+ },
+ "_source": "git://github.com/rodneyrehm/viewport-units-buggyfill.git",
+ "_target": "~0.4.1",
+ "_originalSource": "viewport-units-buggyfill"
+} \ No newline at end of file
diff --git a/afb-client/bower_components/viewport-units-buggyfill/Gruntfile.js b/afb-client/bower_components/viewport-units-buggyfill/Gruntfile.js
new file mode 100755
index 0000000..a8e10ee
--- /dev/null
+++ b/afb-client/bower_components/viewport-units-buggyfill/Gruntfile.js
@@ -0,0 +1,19 @@
+module.exports = function(grunt) {
+ 'use strict';
+
+ var jshintOptions = grunt.file.readJSON('.jshintrc');
+ jshintOptions.reporter = require('jshint-stylish');
+
+ grunt.initConfig({
+ jshint: {
+ options: jshintOptions,
+ target: [
+ 'Gruntfile.js',
+ 'viewport-units-buggyfill.js'
+ ]
+ }
+ });
+
+ grunt.loadNpmTasks('grunt-contrib-jshint');
+ grunt.registerTask('lint', 'jshint');
+};
diff --git a/afb-client/bower_components/viewport-units-buggyfill/bower.json b/afb-client/bower_components/viewport-units-buggyfill/bower.json
new file mode 100755
index 0000000..3b3c4da
--- /dev/null
+++ b/afb-client/bower_components/viewport-units-buggyfill/bower.json
@@ -0,0 +1,20 @@
+{
+ "name": "viewport-units-buggyfill",
+ "version": "0.4.1",
+ "main": [
+ "./viewport-units-buggyfill.js",
+ "./viewport-units-buggyfill.hacks.js"
+ ],
+ "ignore": [
+ "**/.*",
+ "examples",
+ "*.html",
+ "*.css",
+ "*.md"
+ ],
+ "keywords": [
+ "ios",
+ "safari",
+ "viewport"
+ ]
+} \ No newline at end of file
diff --git a/afb-client/bower_components/viewport-units-buggyfill/package.json b/afb-client/bower_components/viewport-units-buggyfill/package.json
new file mode 100755
index 0000000..d7803fc
--- /dev/null
+++ b/afb-client/bower_components/viewport-units-buggyfill/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "viewport-units-buggyfill",
+ "version": "0.4.1",
+ "title": "Viewport Units Buggyfill for Mobile Safari",
+ "description": "Making viewport units (vh|vw|vmin|vmax) work properly in Mobile Safari",
+ "homepage": "http://github.com/rodneyrehm/viewport-units-buggyfill/",
+ "author": {
+ "name": "Rodney Rehm",
+ "url": "http://rodneyrehm.de"
+ },
+ "contributors": [{
+ "name": "Zoltan Hawryluk",
+ "url": "http://www.useragentman.com"
+ }],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/rodneyrehm/viewport-units-buggyfill.git"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/mit-license"
+ }
+ ],
+ "keywords": [
+ "ios",
+ "safari",
+ "viewport"
+ ],
+ "main": "./viewport-units-buggyfill.js",
+ "files": [
+ "viewport-units-buggyfill.js",
+ "viewport-units-buggyfill.hacks.js"
+ ],
+ "scripts": {
+ "lint": "grunt lint"
+ },
+ "devDependencies": {
+ "jshint-stylish": "~0.1.5",
+ "grunt": "~0.4.2",
+ "grunt-contrib-jshint": "~0.8.0"
+ }
+}
diff --git a/afb-client/bower_components/viewport-units-buggyfill/viewport-units-buggyfill.hacks.js b/afb-client/bower_components/viewport-units-buggyfill/viewport-units-buggyfill.hacks.js
new file mode 100644
index 0000000..b931629
--- /dev/null
+++ b/afb-client/bower_components/viewport-units-buggyfill/viewport-units-buggyfill.hacks.js
@@ -0,0 +1,138 @@
+/*!
+ * viewport-units-buggyfill.hacks v0.4.1
+ * @web: https://github.com/rodneyrehm/viewport-units-buggyfill/
+ * @author: Zoltan Hawryluk - http://www.useragentman.com/
+ */
+
+(function (root, factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define([], factory);
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like enviroments that support module.exports,
+ // like Node.
+ module.exports = factory();
+ } else {
+ // Browser globals (root is window)
+ root.viewportUnitsBuggyfillHacks = factory();
+ }
+}(this, function () {
+ 'use strict';
+
+ var options;
+ var calcExpression = /calc\(/g;
+ var quoteExpression = /[\"\']/g;
+ var urlExpression = /url\([^\)]*\)/g;
+ var isOldInternetExplorer = false;
+ var supportsVminmax = true;
+ var supportsVminmaxCalc = true;
+
+ // WARNING!
+ // Do not remove the following conditional comment.
+ // It is required to identify the current version of IE
+
+ /*@cc_on
+
+ @if (@_jscript_version <= 10)
+ isOldInternetExplorer = true;
+ supportsVminmaxCalc = false;
+ supportsVminmax = false;
+ @end
+
+ @*/
+
+ // iOS SAFARI, IE9: abuse "content" if "use_css_content_hack" specified
+ // IE9: abuse "behavior" if "use_css_behavior_hack" specified
+ function checkHacks(declarations, rule, name, value) {
+ if (!options.contentHack && !options.behaviorHack) {
+ return;
+ }
+
+ if (name !== 'content' && name !== 'behavior') {
+ return;
+ }
+
+ var needsCalcFix = (options.contentHack && !supportsVminmaxCalc && name === 'content' && value.indexOf('use_css_content_hack') > -1);
+ var needsVminVmaxFix = (options.behaviorHack && !supportsVminmax && name === 'behavior' && value.indexOf('use_css_behavior_hack') > -1);
+ if (!needsCalcFix && !needsVminVmaxFix) {
+ return;
+ }
+
+ var fakeRules = value.replace(quoteExpression, '');
+ if (needsVminVmaxFix) {
+ fakeRules = fakeRules.replace(urlExpression, '');
+ }
+
+ fakeRules.split(';').forEach(function(fakeRuleElement) {
+ var fakeRule = fakeRuleElement.split(':');
+ if (fakeRule.length !== 2) {
+ return;
+ }
+
+ var name = fakeRule[0].trim();
+ var value = fakeRule[1].trim();
+ if (name === 'use_css_content_hack' || name === 'use_css_behavior_hack') {
+ return;
+ }
+
+ declarations.push([rule, name, value]);
+ if (calcExpression.test(value)) {
+ var webkitValue = value.replace(calcExpression, '-webkit-calc(');
+ declarations.push([rule, name, webkitValue]);
+ }
+ });
+ }
+
+ return {
+ required: function(options) {
+ return options.isMobileSafari || isOldInternetExplorer;
+ },
+
+ initialize: function(initOptions) {
+ options = initOptions;
+
+ // Test viewport units support in calc() expressions
+ var div = document.createElement('div');
+ div.style.width = '1vmax';
+ supportsVminmax = div.style.width !== '';
+
+ // there is no accurate way to detect this programmatically.
+ if (options.isMobileSafari) {
+ supportsVminmaxCalc = false;
+ }
+ },
+
+ initializeEvents: function(options, refresh, _refresh) {
+ if (options.force) {
+ return;
+ }
+
+ if (isOldInternetExplorer && !options._listeningToResize) {
+ window.addEventListener('resize', _refresh, true);
+ options._listeningToResize = true;
+ }
+ },
+
+ findDeclarations: function(declarations, rule, name, value) {
+ if (name === null) {
+ // KeyframesRule does not have a CSS-PropertyName
+ return;
+ }
+
+ checkHacks(declarations, rule, name, value);
+ },
+
+ overwriteDeclaration: function(rule, name, _value) {
+ if (isOldInternetExplorer && name === 'filter') {
+ // remove unit "px" from complex value, e.g.:
+ // filter: progid:DXImageTransform.Microsoft.DropShadow(OffX=5.4px, OffY=3.9px, Color=#000000);
+ _value = _value.replace(/px/g, '');
+ }
+
+ return _value;
+ }
+ };
+
+}));
diff --git a/afb-client/bower_components/viewport-units-buggyfill/viewport-units-buggyfill.js b/afb-client/bower_components/viewport-units-buggyfill/viewport-units-buggyfill.js
new file mode 100755
index 0000000..242af2a
--- /dev/null
+++ b/afb-client/bower_components/viewport-units-buggyfill/viewport-units-buggyfill.js
@@ -0,0 +1,347 @@
+/*!
+ * viewport-units-buggyfill v0.4.1
+ * @web: https://github.com/rodneyrehm/viewport-units-buggyfill/
+ * @author: Rodney Rehm - http://rodneyrehm.de/en/
+ */
+
+(function (root, factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define([], factory);
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like enviroments that support module.exports,
+ // like Node.
+ module.exports = factory();
+ } else {
+ // Browser globals (root is window)
+ root.viewportUnitsBuggyfill = factory();
+ }
+}(this, function () {
+ 'use strict';
+ /*global document, window, location, XMLHttpRequest, XDomainRequest*/
+
+ var initialized = false;
+ var options;
+ var isMobileSafari = /(iPhone|iPod|iPad).+AppleWebKit/i.test(window.navigator.userAgent);
+ var viewportUnitExpression = /([+-]?[0-9.]+)(vh|vw|vmin|vmax)/g;
+ var forEach = [].forEach;
+ var dimensions;
+ var declarations;
+ var styleNode;
+ var isOldInternetExplorer = false;
+
+ // Do not remove the following comment!
+ // It is a conditional comment used to
+ // identify old Internet Explorer versions
+
+ /*@cc_on
+
+ @if (@_jscript_version <= 10)
+ isOldInternetExplorer = true;
+ @end
+
+ @*/
+
+ function debounce(func, wait) {
+ var timeout;
+ return function() {
+ var context = this;
+ var args = arguments;
+ var callback = function() {
+ func.apply(context, args);
+ };
+
+ clearTimeout(timeout);
+ timeout = setTimeout(callback, wait);
+ };
+ }
+
+ // from http://stackoverflow.com/questions/326069/how-to-identify-if-a-webpage-is-being-loaded-inside-an-iframe-or-directly-into-t
+ function inIframe() {
+ try {
+ return window.self !== window.top;
+ } catch (e) {
+ return true;
+ }
+ }
+
+ function initialize(initOptions) {
+ if (initialized) {
+ return;
+ }
+
+ if (initOptions === true) {
+ initOptions = {
+ force: true
+ };
+ }
+
+ options = initOptions || {};
+ options.isMobileSafari = isMobileSafari;
+
+ if (!options.force && !isMobileSafari && !isOldInternetExplorer && (!options.hacks || !options.hacks.required(options))) {
+ // this buggyfill only applies to mobile safari
+ return;
+ }
+
+ options.hacks && options.hacks.initialize(options);
+
+ initialized = true;
+ styleNode = document.createElement('style');
+ styleNode.id = 'patched-viewport';
+ document.head.appendChild(styleNode);
+
+ // Issue #6: Cross Origin Stylesheets are not accessible through CSSOM,
+ // therefore download and inject them as <style> to circumvent SOP.
+ importCrossOriginLinks(function() {
+ var _refresh = debounce(refresh, options.refreshDebounceWait || 100);
+ // doing a full refresh rather than updateStyles because an orientationchange
+ // could activate different stylesheets
+ window.addEventListener('orientationchange', _refresh, true);
+ // orientationchange might have happened while in a different window
+ window.addEventListener('pageshow', _refresh, true);
+
+ if (options.force || isOldInternetExplorer || inIframe()) {
+ window.addEventListener('resize', _refresh, true);
+ options._listeningToResize = true;
+ }
+
+ options.hacks && options.hacks.initializeEvents(options, refresh, _refresh);
+
+ refresh();
+ });
+ }
+
+ function updateStyles() {
+ styleNode.textContent = getReplacedViewportUnits();
+ }
+
+ function refresh() {
+ if (!initialized) {
+ return;
+ }
+
+ findProperties();
+
+ // iOS Safari will report window.innerWidth and .innerHeight as 0
+ // unless a timeout is used here.
+ // TODO: figure out WHY innerWidth === 0
+ setTimeout(function() {
+ updateStyles();
+ }, 1);
+ }
+
+ function findProperties() {
+ declarations = [];
+ forEach.call(document.styleSheets, function(sheet) {
+ if (sheet.ownerNode.id === 'patched-viewport' || !sheet.cssRules) {
+ // skip entire sheet because no rules ara present or it's the target-element of the buggyfill
+ return;
+ }
+
+ if (sheet.media && sheet.media.mediaText && window.matchMedia && !window.matchMedia(sheet.media.mediaText).matches) {
+ // skip entire sheet because media attribute doesn't match
+ return;
+ }
+
+ forEach.call(sheet.cssRules, findDeclarations);
+ });
+
+ return declarations;
+ }
+
+ function findDeclarations(rule) {
+ if (rule.type === 7) {
+ var value = rule.cssText;
+ viewportUnitExpression.lastIndex = 0;
+ if (viewportUnitExpression.test(value)) {
+ // KeyframesRule does not have a CSS-PropertyName
+ declarations.push([rule, null, value]);
+ options.hacks && options.hacks.findDeclarations(declarations, rule, null, value);
+ }
+
+ return;
+ }
+
+ if (!rule.style) {
+ if (!rule.cssRules) {
+ return;
+ }
+
+ forEach.call(rule.cssRules, function(_rule) {
+ findDeclarations(_rule);
+ });
+
+ return;
+ }
+
+ forEach.call(rule.style, function(name) {
+ var value = rule.style.getPropertyValue(name);
+ viewportUnitExpression.lastIndex = 0;
+ if (viewportUnitExpression.test(value)) {
+ declarations.push([rule, name, value]);
+ options.hacks && options.hacks.findDeclarations(declarations, rule, name, value);
+ }
+ });
+ }
+
+ function getReplacedViewportUnits() {
+ dimensions = getViewport();
+
+ var css = [];
+ var buffer = [];
+ var open;
+ var close;
+
+ declarations.forEach(function(item) {
+ var _item = overwriteDeclaration.apply(null, item);
+ var _open = _item.selector.length ? (_item.selector.join(' {\n') + ' {\n') : '';
+ var _close = new Array(_item.selector.length + 1).join('\n}');
+
+ if (!_open || _open !== open) {
+ if (buffer.length) {
+ css.push(open + buffer.join('\n') + close);
+ buffer.length = 0;
+ }
+
+ if (_open) {
+ open = _open;
+ close = _close;
+ buffer.push(_item.content);
+ } else {
+ css.push(_item.content);
+ open = null;
+ close = null;
+ }
+
+ return;
+ }
+
+ if (_open && !open) {
+ open = _open;
+ close = _close;
+ }
+
+ buffer.push(_item.content);
+ });
+
+ if (buffer.length) {
+ css.push(open + buffer.join('\n') + close);
+ }
+
+ return css.join('\n\n');
+ }
+
+ function overwriteDeclaration(rule, name, value) {
+ var _value = value.replace(viewportUnitExpression, replaceValues);
+ var _selectors = [];
+
+ if (options.hacks) {
+ _value = options.hacks.overwriteDeclaration(rule, name, _value);
+ }
+
+ if (name) {
+ // skipping KeyframesRule
+ _selectors.push(rule.selectorText);
+ _value = name + ': ' + _value + ';';
+ }
+
+ var _rule = rule.parentRule;
+ while (_rule) {
+ _selectors.unshift('@media ' + _rule.media.mediaText);
+ _rule = _rule.parentRule;
+ }
+
+ return {
+ selector: _selectors,
+ content: _value
+ };
+ }
+
+ function replaceValues(match, number, unit) {
+ var _base = dimensions[unit];
+ var _number = parseFloat(number) / 100;
+ return (_number * _base) + 'px';
+ }
+
+ function getViewport() {
+ var vh = window.innerHeight;
+ var vw = window.innerWidth;
+
+ return {
+ vh: vh,
+ vw: vw,
+ vmax: Math.max(vw, vh),
+ vmin: Math.min(vw, vh)
+ };
+ }
+
+ function importCrossOriginLinks(next) {
+ var _waiting = 0;
+ var decrease = function() {
+ _waiting--;
+ if (!_waiting) {
+ next();
+ }
+ };
+
+ forEach.call(document.styleSheets, function(sheet) {
+ if (!sheet.href || origin(sheet.href) === origin(location.href)) {
+ // skip <style> and <link> from same origin
+ return;
+ }
+
+ _waiting++;
+ convertLinkToStyle(sheet.ownerNode, decrease);
+ });
+
+ if (!_waiting) {
+ next();
+ }
+ }
+
+ function origin(url) {
+ return url.slice(0, url.indexOf('/', url.indexOf('://') + 3));
+ }
+
+ function convertLinkToStyle(link, next) {
+ getCors(link.href, function() {
+ var style = document.createElement('style');
+ style.media = link.media;
+ style.setAttribute('data-href', link.href);
+ style.textContent = this.responseText;
+ link.parentNode.replaceChild(style, link);
+ next();
+ }, next);
+ }
+
+ function getCors(url, success, error) {
+ var xhr = new XMLHttpRequest();
+ if ('withCredentials' in xhr) {
+ // XHR for Chrome/Firefox/Opera/Safari.
+ xhr.open('GET', url, true);
+ } else if (typeof XDomainRequest !== 'undefined') {
+ // XDomainRequest for IE.
+ xhr = new XDomainRequest();
+ xhr.open('GET', url);
+ } else {
+ throw new Error('cross-domain XHR not supported');
+ }
+
+ xhr.onload = success;
+ xhr.onerror = error;
+ xhr.send();
+ return xhr;
+ }
+
+ return {
+ version: '0.4.1',
+ findProperties: findProperties,
+ getCss: getReplacedViewportUnits,
+ init: initialize,
+ refresh: refresh
+ };
+
+}));