From 9332f3c7acc82b04e5d0aeeffb308c539ae9b1c2 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Tue, 25 Sep 2018 14:24:42 +0300 Subject: [PATCH] Add polyfills for older browsers. requestAnimationFrame and btoa. --- docs/assets/js/vendor/base64.js | 65 +++++++++++++++++++ .../vendor/requestAnimationFrame-polyfill.js | 32 +++++++++ grunt/configBridge.json | 2 + 3 files changed, 99 insertions(+) create mode 100644 docs/assets/js/vendor/base64.js create mode 100644 docs/assets/js/vendor/requestAnimationFrame-polyfill.js diff --git a/docs/assets/js/vendor/base64.js b/docs/assets/js/vendor/base64.js new file mode 100644 index 0000000000..bd68efef72 --- /dev/null +++ b/docs/assets/js/vendor/base64.js @@ -0,0 +1,65 @@ +;(function () { + + var object = + typeof exports != 'undefined' ? exports : + typeof self != 'undefined' ? self : // #8: web workers + $.global; // #31: ExtendScript + + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + function InvalidCharacterError(message) { + this.message = message; + } + InvalidCharacterError.prototype = new Error; + InvalidCharacterError.prototype.name = 'InvalidCharacterError'; + + // encoder + // [https://gist.github.com/999166] by [https://github.com/nignag] + object.btoa || ( + object.btoa = function (input) { + var str = String(input); + for ( + // initialize result and counter + var block, charCode, idx = 0, map = chars, output = ''; + // if the next str index does not exist: + // change the mapping table to "=" + // check if d has no fractional digits + str.charAt(idx | 0) || (map = '=', idx % 1); + // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 + output += map.charAt(63 & block >> 8 - idx % 1 * 8) + ) { + charCode = str.charCodeAt(idx += 3/4); + if (charCode > 0xFF) { + throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."); + } + block = block << 8 | charCode; + } + return output; + }); + + // decoder + // [https://gist.github.com/1020396] by [https://github.com/atk] + object.atob || ( + object.atob = function (input) { + var str = String(input).replace(/[=]+$/, ''); // #31: ExtendScript bad parse of /= + if (str.length % 4 == 1) { + throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded."); + } + for ( + // initialize result and counters + var bc = 0, bs, buffer, idx = 0, output = ''; + // get next character + buffer = str.charAt(idx++); + // character found in table? initialize bit storage and add its ascii value; + ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, + // and if not first of each 4 characters, + // convert the first 8 bits to one ascii character + bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0 + ) { + // try to find character in table (0-63, not found => -1) + buffer = chars.indexOf(buffer); + } + return output; + }); + +}()); diff --git a/docs/assets/js/vendor/requestAnimationFrame-polyfill.js b/docs/assets/js/vendor/requestAnimationFrame-polyfill.js new file mode 100644 index 0000000000..8c273154ec --- /dev/null +++ b/docs/assets/js/vendor/requestAnimationFrame-polyfill.js @@ -0,0 +1,32 @@ +// https://gist.github.com/paulirish/1579671 +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/ +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating + +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel + +// MIT license + +(function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] + || window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; +}()); diff --git a/grunt/configBridge.json b/grunt/configBridge.json index 8e035b5a51..943ed237ef 100644 --- a/grunt/configBridge.json +++ b/grunt/configBridge.json @@ -11,6 +11,8 @@ "../assets/js/src/customizer.js" ], "docsJs": [ + "../assets/js/vendor/requestAnimationFrame-polyfill.js", + "../assets/js/vendor/base64.js", "../assets/js/vendor/holder.min.js", "../assets/js/vendor/clipboard.min.js", "../assets/js/vendor/anchor.min.js",