diff --git a/app/AppStart/UISample.js b/app/AppStart/UISample.js index 96e0ec6..209c931 100644 --- a/app/AppStart/UISample.js +++ b/app/AppStart/UISample.js @@ -2,7 +2,7 @@ * * @author jskonst */ -define('UISample', ['orm', 'forms', 'ui','FancyWidget', '../CustomWidgets/Button'], function (Orm, Forms, Ui,FancyWidget, Button, ModuleName) { +define('UISample', ['orm', 'forms', 'ui','FancyWidget', '../CustomWidgets/Button', '../CustomWidgets/Dropdown'], function (Orm, Forms, Ui,FancyWidget, Button, Dropdown, ModuleName) { function module_constructor() { var self = this , model = Orm.loadModel(ModuleName) @@ -18,11 +18,18 @@ define('UISample', ['orm', 'forms', 'ui','FancyWidget', '../CustomWidgets/Button var btn = new Button(form.pnlPlaceholder3); btn.height=30; - btn.width=60; + btn.width=160; + btn.text = "Another text"; btn.onActionPerformed = function(){ console.log("hello world"); } + //dropdown + var dropdown = new Dropdown(form.pnlPlaceholder4); + dropdown.height=30; + dropdown.width=350; + dropdown.text="Hello"; +// btn.text = "Another text"; diff --git a/app/AppStart/UISample.layout b/app/AppStart/UISample.layout index 2f2e60e..d526bff 100644 --- a/app/AppStart/UISample.layout +++ b/app/AppStart/UISample.layout @@ -1,9 +1,12 @@ - + + + + diff --git a/app/CustomWidgets/Button.js b/app/CustomWidgets/Button.js index 783efcf..146388f 100644 --- a/app/CustomWidgets/Button.js +++ b/app/CustomWidgets/Button.js @@ -9,7 +9,8 @@ define(['forms/box-pane'],function (BoxPane) { function GreatButton(placeholder) { var self = this; - //Button or any other widget could be created by own hands here + //Button or any other widget could be created by own hands here + //div var greatBtn = new BoxPane(); greatBtn.element.className+="btn btn-primary"; @@ -18,6 +19,9 @@ define(['forms/box-pane'],function (BoxPane) { var pnlPlaceholder = placeholder; pnlPlaceholder.add(greatBtn); + //Text + //greatBtn.element.innerHTML = 'Some text'; + //Sizes Object.defineProperty(this,'height', { set:function(val){greatBtn.height=val;} @@ -32,6 +36,10 @@ define(['forms/box-pane'],function (BoxPane) { set:function(aAction){ greatBtn.element.addEventListener("click",aAction);} }); + Object.defineProperty(this,'text', { + set:function(val){greatBtn.element.innerHTML = val;} + }); + } return GreatButton; diff --git a/app/CustomWidgets/Dropdown.js b/app/CustomWidgets/Dropdown.js new file mode 100644 index 0000000..75f00a8 --- /dev/null +++ b/app/CustomWidgets/Dropdown.js @@ -0,0 +1,82 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + + +define(['forms/box-pane'],function (BoxPane) { + function Dropdown(placeholder) { + var self = this; + + //Button or any other widget could be created by own hands here + //div dropdown + var dropdown = new BoxPane(); + dropdown.element.className+="dropdown"; + + + //Button + var dBtn = new BoxPane(); + dBtn.element.className+="btn btn-default dropdown-toggle"; + dBtn.element.type+="button"; + dBtn.element.id+="dropdownMenu1"; + dBtn.element.setAttribute("data-toggle", "dropdown"); + dBtn.element.setAttribute("aria-haspopup","true"); + dBtn.element.setAttribute("aria-expanded", "true"); + dropdown.add(dBtn); + + + // List + var list = new BoxPane(); + list.element.innerHTML = ''; + dropdown.add(list); +// var UlDropdown = document.createElement('ul'); +// UlDropdown.element.className+="dropdown-menu"; +// UlDropdown.element.setAttribute("aria-labelledby", "dropdownMenu1"); +// dropdown.add(UlDropdown); +// +// var LiDropdown = document.createElement('li'); +// UlDropdown.add(LiDropdown); +// +// var LinkDropdown = document.createElement('a'); +// LiDropdown.add(LinkDropdown); + + //and + var pnlPlaceholder = placeholder; + pnlPlaceholder.add(dropdown); + + //Text + //greatBtn.element.innerHTML = 'Some text'; + + //Sizes + + Object.defineProperty(this,'width', { + set:function(val){pnlPlaceholder.width=val;} + }); + + Object.defineProperty(this,'height', { + set:function(val){dropdown.height=val;} + }); + + Object.defineProperty(this,'text', { + set:function(val){dBtn.element.innerHTML = val + " "+ "";} + }); + + + + + } + return Dropdown; +}); \ No newline at end of file diff --git a/application-start.html b/application-start.html index b90dff6..cc2690f 100644 --- a/application-start.html +++ b/application-start.html @@ -7,8 +7,16 @@ + + + - + + + + + + diff --git a/ball/assest/vendor/Blob.js b/ball/assest/vendor/Blob.js new file mode 100644 index 0000000..2e41b8a --- /dev/null +++ b/ball/assest/vendor/Blob.js @@ -0,0 +1,211 @@ +/* Blob.js + * A Blob implementation. + * 2014-07-24 + * + * By Eli Grey, http://eligrey.com + * By Devin Samarin, https://github.com/dsamarin + * License: X11/MIT + * See https://github.com/eligrey/Blob.js/blob/master/LICENSE.md + */ + +/*global self, unescape */ +/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, + plusplus: true */ + +/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ + +(function (view) { + "use strict"; + + view.URL = view.URL || view.webkitURL; + + if (view.Blob && view.URL) { + try { + new Blob; + return; + } catch (e) {} + } + + // Internally we use a BlobBuilder implementation to base Blob off of + // in order to support older browsers that only have BlobBuilder + var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) { + var + get_class = function(object) { + return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; + } + , FakeBlobBuilder = function BlobBuilder() { + this.data = []; + } + , FakeBlob = function Blob(data, type, encoding) { + this.data = data; + this.size = data.length; + this.type = type; + this.encoding = encoding; + } + , FBB_proto = FakeBlobBuilder.prototype + , FB_proto = FakeBlob.prototype + , FileReaderSync = view.FileReaderSync + , FileException = function(type) { + this.code = this[this.name = type]; + } + , file_ex_codes = ( + "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR " + + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR" + ).split(" ") + , file_ex_code = file_ex_codes.length + , real_URL = view.URL || view.webkitURL || view + , real_create_object_URL = real_URL.createObjectURL + , real_revoke_object_URL = real_URL.revokeObjectURL + , URL = real_URL + , btoa = view.btoa + , atob = view.atob + + , ArrayBuffer = view.ArrayBuffer + , Uint8Array = view.Uint8Array + + , origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/ + ; + FakeBlob.fake = FB_proto.fake = true; + while (file_ex_code--) { + FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1; + } + // Polyfill URL + if (!real_URL.createObjectURL) { + URL = view.URL = function(uri) { + var + uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a") + , uri_origin + ; + uri_info.href = uri; + if (!("origin" in uri_info)) { + if (uri_info.protocol.toLowerCase() === "data:") { + uri_info.origin = null; + } else { + uri_origin = uri.match(origin); + uri_info.origin = uri_origin && uri_origin[1]; + } + } + return uri_info; + }; + } + URL.createObjectURL = function(blob) { + var + type = blob.type + , data_URI_header + ; + if (type === null) { + type = "application/octet-stream"; + } + if (blob instanceof FakeBlob) { + data_URI_header = "data:" + type; + if (blob.encoding === "base64") { + return data_URI_header + ";base64," + blob.data; + } else if (blob.encoding === "URI") { + return data_URI_header + "," + decodeURIComponent(blob.data); + } if (btoa) { + return data_URI_header + ";base64," + btoa(blob.data); + } else { + return data_URI_header + "," + encodeURIComponent(blob.data); + } + } else if (real_create_object_URL) { + return real_create_object_URL.call(real_URL, blob); + } + }; + URL.revokeObjectURL = function(object_URL) { + if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) { + real_revoke_object_URL.call(real_URL, object_URL); + } + }; + FBB_proto.append = function(data/*, endings*/) { + var bb = this.data; + // decode data to a binary string + if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) { + var + str = "" + , buf = new Uint8Array(data) + , i = 0 + , buf_len = buf.length + ; + for (; i < buf_len; i++) { + str += String.fromCharCode(buf[i]); + } + bb.push(str); + } else if (get_class(data) === "Blob" || get_class(data) === "File") { + if (FileReaderSync) { + var fr = new FileReaderSync; + bb.push(fr.readAsBinaryString(data)); + } else { + // async FileReader won't work as BlobBuilder is sync + throw new FileException("NOT_READABLE_ERR"); + } + } else if (data instanceof FakeBlob) { + if (data.encoding === "base64" && atob) { + bb.push(atob(data.data)); + } else if (data.encoding === "URI") { + bb.push(decodeURIComponent(data.data)); + } else if (data.encoding === "raw") { + bb.push(data.data); + } + } else { + if (typeof data !== "string") { + data += ""; // convert unsupported types to strings + } + // decode UTF-16 to binary string + bb.push(unescape(encodeURIComponent(data))); + } + }; + FBB_proto.getBlob = function(type) { + if (!arguments.length) { + type = null; + } + return new FakeBlob(this.data.join(""), type, "raw"); + }; + FBB_proto.toString = function() { + return "[object BlobBuilder]"; + }; + FB_proto.slice = function(start, end, type) { + var args = arguments.length; + if (args < 3) { + type = null; + } + return new FakeBlob( + this.data.slice(start, args > 1 ? end : this.data.length) + , type + , this.encoding + ); + }; + FB_proto.toString = function() { + return "[object Blob]"; + }; + FB_proto.close = function() { + this.size = 0; + delete this.data; + }; + return FakeBlobBuilder; + }(view)); + + view.Blob = function(blobParts, options) { + var type = options ? (options.type || "") : ""; + var builder = new BlobBuilder(); + if (blobParts) { + for (var i = 0, len = blobParts.length; i < len; i++) { + if (Uint8Array && blobParts[i] instanceof Uint8Array) { + builder.append(blobParts[i].buffer); + } + else { + builder.append(blobParts[i]); + } + } + } + var blob = builder.getBlob(type); + if (!blob.slice && blob.webkitSlice) { + blob.slice = blob.webkitSlice; + } + return blob; + }; + + var getPrototypeOf = Object.getPrototypeOf || function(object) { + return object.__proto__; + }; + view.Blob.prototype = getPrototypeOf(new view.Blob()); +}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this)); diff --git a/ball/assest/vendor/FileSaver.js b/ball/assest/vendor/FileSaver.js new file mode 100644 index 0000000..c8f36fb --- /dev/null +++ b/ball/assest/vendor/FileSaver.js @@ -0,0 +1,248 @@ +/* FileSaver.js + * A saveAs() FileSaver implementation. + * 2015-03-04 + * + * By Eli Grey, http://eligrey.com + * License: X11/MIT + * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md + */ + +/*global self */ +/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ + +/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ + +var saveAs = saveAs + // IE 10+ (native saveAs) + || (typeof navigator !== "undefined" && + navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator)) + // Everyone else + || (function(view) { + "use strict"; + // IE <10 is explicitly unsupported + if (typeof navigator !== "undefined" && + /MSIE [1-9]\./.test(navigator.userAgent)) { + return; + } + var + doc = view.document + // only get URL when necessary in case Blob.js hasn't overridden it yet + , get_URL = function() { + return view.URL || view.webkitURL || view; + } + , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") + , can_use_save_link = "download" in save_link + , click = function(node) { + var event = doc.createEvent("MouseEvents"); + event.initMouseEvent( + "click", true, false, view, 0, 0, 0, 0, 0 + , false, false, false, false, 0, null + ); + node.dispatchEvent(event); + } + , webkit_req_fs = view.webkitRequestFileSystem + , req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem + , throw_outside = function(ex) { + (view.setImmediate || view.setTimeout)(function() { + throw ex; + }, 0); + } + , force_saveable_type = "application/octet-stream" + , fs_min_size = 0 + // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and + // https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047 + // for the reasoning behind the timeout and revocation flow + , arbitrary_revoke_timeout = 500 // in ms + , revoke = function(file) { + var revoker = function() { + if (typeof file === "string") { // file is an object URL + get_URL().revokeObjectURL(file); + } else { // file is a File + file.remove(); + } + }; + if (view.chrome) { + revoker(); + } else { + setTimeout(revoker, arbitrary_revoke_timeout); + } + } + , dispatch = function(filesaver, event_types, event) { + event_types = [].concat(event_types); + var i = event_types.length; + while (i--) { + var listener = filesaver["on" + event_types[i]]; + if (typeof listener === "function") { + try { + listener.call(filesaver, event || filesaver); + } catch (ex) { + throw_outside(ex); + } + } + } + } + , FileSaver = function(blob, name) { + // First try a.download, then web filesystem, then object URLs + var + filesaver = this + , type = blob.type + , blob_changed = false + , object_url + , target_view + , dispatch_all = function() { + dispatch(filesaver, "writestart progress write writeend".split(" ")); + } + // on any filesys errors revert to saving with object URLs + , fs_error = function() { + // don't create more object URLs than needed + if (blob_changed || !object_url) { + object_url = get_URL().createObjectURL(blob); + } + if (target_view) { + target_view.location.href = object_url; + } else { + var new_tab = view.open(object_url, "_blank"); + if (new_tab == undefined && typeof safari !== "undefined") { + //Apple do not allow window.open, see http://bit.ly/1kZffRI + view.location.href = object_url + } + } + filesaver.readyState = filesaver.DONE; + dispatch_all(); + revoke(object_url); + } + , abortable = function(func) { + return function() { + if (filesaver.readyState !== filesaver.DONE) { + return func.apply(this, arguments); + } + }; + } + , create_if_not_found = {create: true, exclusive: false} + , slice + ; + filesaver.readyState = filesaver.INIT; + if (!name) { + name = "download"; + } + if (can_use_save_link) { + object_url = get_URL().createObjectURL(blob); + save_link.href = object_url; + save_link.download = name; + click(save_link); + filesaver.readyState = filesaver.DONE; + dispatch_all(); + revoke(object_url); + return; + } + // prepend BOM for UTF-8 XML and text/plain types + if (/^\s*(?:text\/(?:plain|xml)|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { + blob = new Blob(["\ufeff", blob], {type: blob.type}); + } + // Object and web filesystem URLs have a problem saving in Google Chrome when + // viewed in a tab, so I force save with application/octet-stream + // http://code.google.com/p/chromium/issues/detail?id=91158 + // Update: Google errantly closed 91158, I submitted it again: + // https://code.google.com/p/chromium/issues/detail?id=389642 + if (view.chrome && type && type !== force_saveable_type) { + slice = blob.slice || blob.webkitSlice; + blob = slice.call(blob, 0, blob.size, force_saveable_type); + blob_changed = true; + } + // Since I can't be sure that the guessed media type will trigger a download + // in WebKit, I append .download to the filename. + // https://bugs.webkit.org/show_bug.cgi?id=65440 + if (webkit_req_fs && name !== "download") { + name += ".download"; + } + if (type === force_saveable_type || webkit_req_fs) { + target_view = view; + } + if (!req_fs) { + fs_error(); + return; + } + fs_min_size += blob.size; + req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) { + fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) { + var save = function() { + dir.getFile(name, create_if_not_found, abortable(function(file) { + file.createWriter(abortable(function(writer) { + writer.onwriteend = function(event) { + target_view.location.href = file.toURL(); + filesaver.readyState = filesaver.DONE; + dispatch(filesaver, "writeend", event); + revoke(file); + }; + writer.onerror = function() { + var error = writer.error; + if (error.code !== error.ABORT_ERR) { + fs_error(); + } + }; + "writestart progress write abort".split(" ").forEach(function(event) { + writer["on" + event] = filesaver["on" + event]; + }); + writer.write(blob); + filesaver.abort = function() { + writer.abort(); + filesaver.readyState = filesaver.DONE; + }; + filesaver.readyState = filesaver.WRITING; + }), fs_error); + }), fs_error); + }; + dir.getFile(name, {create: false}, abortable(function(file) { + // delete file if it already exists + file.remove(); + save(); + }), abortable(function(ex) { + if (ex.code === ex.NOT_FOUND_ERR) { + save(); + } else { + fs_error(); + } + })); + }), fs_error); + }), fs_error); + } + , FS_proto = FileSaver.prototype + , saveAs = function(blob, name) { + return new FileSaver(blob, name); + } + ; + FS_proto.abort = function() { + var filesaver = this; + filesaver.readyState = filesaver.DONE; + dispatch(filesaver, "abort"); + }; + FS_proto.readyState = FS_proto.INIT = 0; + FS_proto.WRITING = 1; + FS_proto.DONE = 2; + + FS_proto.error = + FS_proto.onwritestart = + FS_proto.onprogress = + FS_proto.onwrite = + FS_proto.onabort = + FS_proto.onerror = + FS_proto.onwriteend = + null; + + return saveAs; +}( + typeof self !== "undefined" && self + || typeof window !== "undefined" && window + || this.content +)); +// `self` is undefined in Firefox for Android content script context +// while `this` is nsIContentFrameMessageManager +// with an attribute `content` that corresponds to the window + +if (typeof module !== "undefined" && module.exports) { + module.exports.saveAs = saveAs; +} else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) { + define([], function() { + return saveAs; + }); +} diff --git a/ball/assest/vendor/ZeroClipboard.min.js b/ball/assest/vendor/ZeroClipboard.min.js new file mode 100644 index 0000000..5640234 --- /dev/null +++ b/ball/assest/vendor/ZeroClipboard.min.js @@ -0,0 +1,9 @@ +/*! +* ZeroClipboard +* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface. +* Copyright (c) 2014 Jon Rohan, James M. Greene +* Licensed MIT +* http://zeroclipboard.org/ +* v1.3.5 +*/ +!function(a){"use strict";function b(a){return a.replace(/,/g,".").replace(/[^0-9\.]/g,"")}function c(a){return parseFloat(b(a))>=10}var d,e={bridge:null,version:"0.0.0",disabled:null,outdated:null,ready:null},f={},g=0,h={},i=0,j={},k=null,l=null,m=function(){var a,b,c,d,e="ZeroClipboard.swf";if(document.currentScript&&(d=document.currentScript.src));else{var f=document.getElementsByTagName("script");if("readyState"in f[0])for(a=f.length;a--&&("interactive"!==f[a].readyState||!(d=f[a].src)););else if("loading"===document.readyState)d=f[f.length-1].src;else{for(a=f.length;a--;){if(c=f[a].src,!c){b=null;break}if(c=c.split("#")[0].split("?")[0],c=c.slice(0,c.lastIndexOf("/")+1),null==b)b=c;else if(b!==c){b=null;break}}null!==b&&(d=b)}}return d&&(d=d.split("#")[0].split("?")[0],e=d.slice(0,d.lastIndexOf("/")+1)+e),e}(),n=function(){var a=/\-([a-z])/g,b=function(a,b){return b.toUpperCase()};return function(c){return c.replace(a,b)}}(),o=function(b,c){var d,e,f;return a.getComputedStyle?d=a.getComputedStyle(b,null).getPropertyValue(c):(e=n(c),d=b.currentStyle?b.currentStyle[e]:b.style[e]),"cursor"!==c||d&&"auto"!==d||(f=b.tagName.toLowerCase(),"a"!==f)?d:"pointer"},p=function(b){b||(b=a.event);var c;this!==a?c=this:b.target?c=b.target:b.srcElement&&(c=b.srcElement),K.activate(c)},q=function(a,b,c){a&&1===a.nodeType&&(a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c))},r=function(a,b,c){a&&1===a.nodeType&&(a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&a.detachEvent("on"+b,c))},s=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},t=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if(b&&"string"==typeof b||void 0===b){var c=(b||"").split(/\s+/);if(1===a.nodeType&&a.className)if(b){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}else a.className=""}return a},u=function(){var a,b,c,d=1;return"function"==typeof document.body.getBoundingClientRect&&(a=document.body.getBoundingClientRect(),b=a.right-a.left,c=document.body.offsetWidth,d=Math.round(b/c*100)/100),d},v=function(b,c){var d={left:0,top:0,width:0,height:0,zIndex:B(c)-1};if(b.getBoundingClientRect){var e,f,g,h=b.getBoundingClientRect();"pageXOffset"in a&&"pageYOffset"in a?(e=a.pageXOffset,f=a.pageYOffset):(g=u(),e=Math.round(document.documentElement.scrollLeft/g),f=Math.round(document.documentElement.scrollTop/g));var i=document.documentElement.clientLeft||0,j=document.documentElement.clientTop||0;d.left=h.left+e-i,d.top=h.top+f-j,d.width="width"in h?h.width:h.right-h.left,d.height="height"in h?h.height:h.bottom-h.top}return d},w=function(a,b){var c=null==b||b&&b.cacheBust===!0&&b.useNoCache===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+(new Date).getTime():""},x=function(b){var c,d,e,f=[],g=[],h=[];if(b.trustedOrigins&&("string"==typeof b.trustedOrigins?g.push(b.trustedOrigins):"object"==typeof b.trustedOrigins&&"length"in b.trustedOrigins&&(g=g.concat(b.trustedOrigins))),b.trustedDomains&&("string"==typeof b.trustedDomains?g.push(b.trustedDomains):"object"==typeof b.trustedDomains&&"length"in b.trustedDomains&&(g=g.concat(b.trustedDomains))),g.length)for(c=0,d=g.length;d>c;c++)if(g.hasOwnProperty(c)&&g[c]&&"string"==typeof g[c]){if(e=E(g[c]),!e)continue;if("*"===e){h=[e];break}h.push.apply(h,[e,"//"+e,a.location.protocol+"//"+e])}return h.length&&f.push("trustedOrigins="+encodeURIComponent(h.join(","))),"string"==typeof b.jsModuleId&&b.jsModuleId&&f.push("jsModuleId="+encodeURIComponent(b.jsModuleId)),f.join("&")},y=function(a,b,c){if("function"==typeof b.indexOf)return b.indexOf(a,c);var d,e=b.length;for("undefined"==typeof c?c=0:0>c&&(c=e+c),d=c;e>d;d++)if(b.hasOwnProperty(d)&&b[d]===a)return d;return-1},z=function(a){if("string"==typeof a)throw new TypeError("ZeroClipboard doesn't accept query strings.");return a.length?a:[a]},A=function(b,c,d,e){e?a.setTimeout(function(){b.apply(c,d)},0):b.apply(c,d)},B=function(a){var b,c;return a&&("number"==typeof a&&a>0?b=a:"string"==typeof a&&(c=parseInt(a,10))&&!isNaN(c)&&c>0&&(b=c)),b||("number"==typeof N.zIndex&&N.zIndex>0?b=N.zIndex:"string"==typeof N.zIndex&&(c=parseInt(N.zIndex,10))&&!isNaN(c)&&c>0&&(b=c)),b||0},C=function(a,b){if(a&&b!==!1&&"undefined"!=typeof console&&console&&(console.warn||console.log)){var c="`"+a+"` is deprecated. See docs for more info:\n https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations";console.warn?console.warn(c):console.log(c)}},D=function(){var a,b,c,d,e,f,g=arguments[0]||{};for(a=1,b=arguments.length;b>a;a++)if(null!=(c=arguments[a]))for(d in c)if(c.hasOwnProperty(d)){if(e=g[d],f=c[d],g===f)continue;void 0!==f&&(g[d]=f)}return g},E=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},F=function(){var a=function(a,b){var c,d,e;if(null!=a&&"*"!==b[0]&&("string"==typeof a&&(a=[a]),"object"==typeof a&&"length"in a))for(c=0,d=a.length;d>c;c++)if(a.hasOwnProperty(c)&&(e=E(a[c]))){if("*"===e){b.length=0,b.push("*");break}-1===y(e,b)&&b.push(e)}},b={always:"always",samedomain:"sameDomain",never:"never"};return function(c,d){var e,f=d.allowScriptAccess;if("string"==typeof f&&(e=f.toLowerCase())&&/^always|samedomain|never$/.test(e))return b[e];var g=E(d.moviePath);null===g&&(g=c);var h=[];a(d.trustedOrigins,h),a(d.trustedDomains,h);var i=h.length;if(i>0){if(1===i&&"*"===h[0])return"always";if(-1!==y(c,h))return 1===i&&c===g?"sameDomain":"always"}return"never"}}(),G=function(a){if(null==a)return[];if(Object.keys)return Object.keys(a);var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},H=function(a){if(a)for(var b in a)a.hasOwnProperty(b)&&delete a[b];return a},I=function(){try{return document.activeElement}catch(a){}return null},J=function(){var a=!1;if("boolean"==typeof e.disabled)a=e.disabled===!1;else{if("function"==typeof ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(a=!0)}catch(b){}!a&&navigator.mimeTypes["application/x-shockwave-flash"]&&(a=!0)}return a},K=function(a,b){return this instanceof K?(this.id=""+g++,h[this.id]={instance:this,elements:[],handlers:{}},a&&this.clip(a),"undefined"!=typeof b&&(C("new ZeroClipboard(elements, options)",N.debug),K.config(b)),this.options=K.config(),"boolean"!=typeof e.disabled&&(e.disabled=!J()),e.disabled===!1&&e.outdated!==!0&&null===e.bridge&&(e.outdated=!1,e.ready=!1,O()),void 0):new K(a,b)};K.prototype.setText=function(a){return a&&""!==a&&(f["text/plain"]=a,e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setText?e.bridge.setText(a):e.ready=!1),this},K.prototype.setSize=function(a,b){return e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setSize?e.bridge.setSize(a,b):e.ready=!1,this};var L=function(a){e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setHandCursor?e.bridge.setHandCursor(a):e.ready=!1};K.prototype.destroy=function(){this.unclip(),this.off(),delete h[this.id]};var M=function(){var a,b,c,d=[],e=G(h);for(a=0,b=e.length;b>a;a++)c=h[e[a]].instance,c&&c instanceof K&&d.push(c);return d};K.version="1.3.5";var N={swfPath:m,trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceHandCursor:!1,zIndex:999999999,debug:!0,title:null,autoActivate:!0};K.config=function(a){"object"==typeof a&&null!==a&&D(N,a);{if("string"!=typeof a||!a){var b={};for(var c in N)N.hasOwnProperty(c)&&(b[c]="object"==typeof N[c]&&null!==N[c]?"length"in N[c]?N[c].slice(0):D({},N[c]):N[c]);return b}if(N.hasOwnProperty(a))return N[a]}},K.destroy=function(){K.deactivate();for(var a in h)if(h.hasOwnProperty(a)&&h[a]){var b=h[a].instance;b&&"function"==typeof b.destroy&&b.destroy()}var c=P(e.bridge);c&&c.parentNode&&(c.parentNode.removeChild(c),e.ready=null,e.bridge=null)},K.activate=function(a){d&&(t(d,N.hoverClass),t(d,N.activeClass)),d=a,s(a,N.hoverClass),Q();var b=N.title||a.getAttribute("title");if(b){var c=P(e.bridge);c&&c.setAttribute("title",b)}var f=N.forceHandCursor===!0||"pointer"===o(a,"cursor");L(f)},K.deactivate=function(){var a=P(e.bridge);a&&(a.style.left="0px",a.style.top="-9999px",a.removeAttribute("title")),d&&(t(d,N.hoverClass),t(d,N.activeClass),d=null)};var O=function(){var b,c,d=document.getElementById("global-zeroclipboard-html-bridge");if(!d){var f=K.config();f.jsModuleId="string"==typeof k&&k||"string"==typeof l&&l||null;var g=F(a.location.host,N),h=x(f),i=N.moviePath+w(N.moviePath,N),j=' ';d=document.createElement("div"),d.id="global-zeroclipboard-html-bridge",d.setAttribute("class","global-zeroclipboard-container"),d.style.position="absolute",d.style.left="0px",d.style.top="-9999px",d.style.width="15px",d.style.height="15px",d.style.zIndex=""+B(N.zIndex),document.body.appendChild(d),d.innerHTML=j}b=document["global-zeroclipboard-flash-bridge"],b&&(c=b.length)&&(b=b[c-1]),e.bridge=b||d.children[0].lastElementChild},P=function(a){for(var b=/^OBJECT|EMBED$/,c=a&&a.parentNode;c&&b.test(c.nodeName)&&c.parentNode;)c=c.parentNode;return c||null},Q=function(){if(d){var a=v(d,N.zIndex),b=P(e.bridge);b&&(b.style.top=a.top+"px",b.style.left=a.left+"px",b.style.width=a.width+"px",b.style.height=a.height+"px",b.style.zIndex=a.zIndex+1),e.ready===!0&&e.bridge&&"function"==typeof e.bridge.setSize?e.bridge.setSize(a.width,a.height):e.ready=!1}return this};K.prototype.on=function(a,b){var c,d,f,g={},i=h[this.id]&&h[this.id].handlers;if("string"==typeof a&&a)f=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)a.hasOwnProperty(c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.on(c,a[c]);if(f&&f.length){for(c=0,d=f.length;d>c;c++)a=f[c].replace(/^on/,""),g[a]=!0,i[a]||(i[a]=[]),i[a].push(b);g.noflash&&e.disabled&&T.call(this,"noflash",{}),g.wrongflash&&e.outdated&&T.call(this,"wrongflash",{flashVersion:e.version}),g.load&&e.ready&&T.call(this,"load",{flashVersion:e.version})}return this},K.prototype.off=function(a,b){var c,d,e,f,g,i=h[this.id]&&h[this.id].handlers;if(0===arguments.length)f=G(i);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)a.hasOwnProperty(c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=i[a],g&&g.length)if(b)for(e=y(b,g);-1!==e;)g.splice(e,1),e=y(b,g,e);else i[a].length=0;return this},K.prototype.handlers=function(a){var b,c=null,d=h[this.id]&&h[this.id].handlers;if(d){if("string"==typeof a&&a)return d[a]?d[a].slice(0):null;c={};for(b in d)d.hasOwnProperty(b)&&d[b]&&(c[b]=d[b].slice(0))}return c};var R=function(b,c,d,e){var f=h[this.id]&&h[this.id].handlers[b];if(f&&f.length){var g,i,j,k=c||this;for(g=0,i=f.length;i>g;g++)j=f[g],c=k,"string"==typeof j&&"function"==typeof a[j]&&(j=a[j]),"object"==typeof j&&j&&"function"==typeof j.handleEvent&&(c=j,j=j.handleEvent),"function"==typeof j&&A(j,c,d,e)}return this};K.prototype.clip=function(a){a=z(a);for(var b=0;bd;d++)f=h[c[d]].instance,f&&f instanceof K&&g.push(f);return g};N.hoverClass="zeroclipboard-is-hover",N.activeClass="zeroclipboard-is-active",N.trustedOrigins=null,N.allowScriptAccess=null,N.useNoCache=!0,N.moviePath="ZeroClipboard.swf",K.detectFlashSupport=function(){return C("ZeroClipboard.detectFlashSupport",N.debug),J()},K.dispatch=function(a,b){if("string"==typeof a&&a){var c=a.toLowerCase().replace(/^on/,"");if(c)for(var e=d&&N.autoActivate===!0?S(d):M(),f=0,g=e.length;g>f;f++)T.call(e[f],c,b)}},K.prototype.setHandCursor=function(a){return C("ZeroClipboard.prototype.setHandCursor",N.debug),a="boolean"==typeof a?a:!!a,L(a),N.forceHandCursor=a,this},K.prototype.reposition=function(){return C("ZeroClipboard.prototype.reposition",N.debug),Q()},K.prototype.receiveEvent=function(a,b){if(C("ZeroClipboard.prototype.receiveEvent",N.debug),"string"==typeof a&&a){var c=a.toLowerCase().replace(/^on/,"");c&&T.call(this,c,b)}},K.prototype.setCurrent=function(a){return C("ZeroClipboard.prototype.setCurrent",N.debug),K.activate(a),this},K.prototype.resetBridge=function(){return C("ZeroClipboard.prototype.resetBridge",N.debug),K.deactivate(),this},K.prototype.setTitle=function(a){if(C("ZeroClipboard.prototype.setTitle",N.debug),a=a||N.title||d&&d.getAttribute("title")){var b=P(e.bridge);b&&b.setAttribute("title",a)}return this},K.setDefaults=function(a){C("ZeroClipboard.setDefaults",N.debug),K.config(a)},K.prototype.addEventListener=function(a,b){return C("ZeroClipboard.prototype.addEventListener",N.debug),this.on(a,b)},K.prototype.removeEventListener=function(a,b){return C("ZeroClipboard.prototype.removeEventListener",N.debug),this.off(a,b)},K.prototype.ready=function(){return C("ZeroClipboard.prototype.ready",N.debug),e.ready===!0};var T=function(a,g){a=a.toLowerCase().replace(/^on/,"");var h=g&&g.flashVersion&&b(g.flashVersion)||null,i=d,j=!0;switch(a){case"load":if(h){if(!c(h))return T.call(this,"onWrongFlash",{flashVersion:h}),void 0;e.outdated=!1,e.ready=!0,e.version=h}break;case"wrongflash":h&&!c(h)&&(e.outdated=!0,e.ready=!1,e.version=h);break;case"mouseover":s(i,N.hoverClass);break;case"mouseout":N.autoActivate===!0&&K.deactivate();break;case"mousedown":s(i,N.activeClass);break;case"mouseup":t(i,N.activeClass);break;case"datarequested":if(i){var k=i.getAttribute("data-clipboard-target"),l=k?document.getElementById(k):null;if(l){var m=l.value||l.textContent||l.innerText;m&&this.setText(m)}else{var n=i.getAttribute("data-clipboard-text");n&&this.setText(n)}}j=!1;break;case"complete":H(f),i&&i!==I()&&i.focus&&i.focus()}var o=i,p=[this,g];return R.call(this,a,o,p,j)};"function"==typeof define&&define.amd?define(["require","exports","module"],function(a,b,c){return k=c&&c.id||null,K}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports&&"function"==typeof a.require?(l=module.id||null,module.exports=K):a.ZeroClipboard=K}(function(){return this}()); \ No newline at end of file diff --git a/ball/assest/vendor/anchor.js b/ball/assest/vendor/anchor.js new file mode 100644 index 0000000..248821f --- /dev/null +++ b/ball/assest/vendor/anchor.js @@ -0,0 +1,196 @@ +/*! + * AnchorJS - v1.0.1 - 2015-05-15 + * https://github.com/bryanbraun/anchorjs + * Copyright (c) 2015 Bryan Braun; Licensed MIT + */ + +function AnchorJS(options) { + 'use strict'; + + this.options = options || {}; + + this._applyRemainingDefaultOptions = function(opts) { + this.options.icon = this.options.hasOwnProperty('icon') ? opts.icon : ''; // Accepts characters (and also URLs?), like '#', '¶', '❡', or '§'. + this.options.visible = this.options.hasOwnProperty('visible') ? opts.visible : 'hover'; // Also accepts 'always' + this.options.placement = this.options.hasOwnProperty('placement') ? opts.placement : 'right'; // Also accepts 'left' + this.options.class = this.options.hasOwnProperty('class') ? opts.class : ''; // Accepts any class name. + }; + + this._applyRemainingDefaultOptions(options); + + this.add = function(selector) { + var elements, + elsWithIds, + idList, + elementID, + i, + roughText, + tidyText, + index, + count, + newTidyText, + readableID, + anchor, + div, + anchorNodes; + + this._applyRemainingDefaultOptions(this.options); + + // Provide a sensible default selector, if none is given. + if (!selector) { + selector = 'h1, h2, h3, h4, h5, h6'; + } else if (typeof selector !== 'string') { + throw new Error('The selector provided to AnchorJS was invalid.'); + } + + elements = document.querySelectorAll(selector); + if (elements.length === 0) { + return false; + } + + this._addBaselineStyles(); + + // We produce a list of existing IDs so we don't generate a duplicate. + elsWithIds = document.querySelectorAll('[id]'); + idList = [].map.call(elsWithIds, function assign(el) { + return el.id; + }); + + for (i = 0; i < elements.length; i++) { + + if (elements[i].hasAttribute('id')) { + elementID = elements[i].getAttribute('id'); + } else { + roughText = elements[i].textContent; + + // Refine it so it makes a good ID. Strip out non-safe characters, replace + // spaces with hyphens, truncate to 32 characters, and make toLowerCase. + // + // Example string: // '⚡⚡⚡ Unicode icons are cool--but don't belong in a URL.' + tidyText = roughText.replace(/[^\w\s-]/gi, '') // ' Unicode icons are cool--but dont belong in a URL' + .replace(/\s+/g, '-') // '-Unicode-icons-are-cool--but-dont-belong-in-a-URL' + .replace(/-{2,}/g, '-') // '-Unicode-icons-are-cool-but-dont-belong-in-a-URL' + .substring(0, 32) // '-Unicode-icons-are-cool-but-dont' + .replace(/^-+|-+$/gm, '') // 'Unicode-icons-are-cool-but-dont' + .toLowerCase(); // 'unicode-icons-are-cool-but-dont' + + // Compare our generated ID to existing IDs (and increment it if needed) + // before we add it to the page. + newTidyText = tidyText; + count = 0; + do { + if (index !== undefined) { + newTidyText = tidyText + '-' + count; + } + // .indexOf is supported in IE9+. + index = idList.indexOf(newTidyText); + count += 1; + } while (index !== -1); + index = undefined; + idList.push(newTidyText); + + // Assign it to our element. + // Currently the setAttribute element is only supported in IE9 and above. + elements[i].setAttribute('id', newTidyText); + + elementID = newTidyText; + } + + readableID = elementID.replace(/-/g, ' '); + + anchor = ''; + + div = document.createElement('div'); + div.innerHTML = anchor; + anchorNodes = div.childNodes; + + if (this.options.visible === 'always') { + anchorNodes[0].style.opacity = '1'; + } + + if (this.options.icon === '') { + anchorNodes[0].style.fontFamily = 'anchorjs-icons'; + anchorNodes[0].style.fontStyle = 'normal'; + anchorNodes[0].style.fontVariant = 'normal'; + anchorNodes[0].style.fontWeight = 'normal'; + } + + if (this.options.placement === 'left') { + anchorNodes[0].style.position = 'absolute'; + anchorNodes[0].style.marginLeft = '-1em'; + anchorNodes[0].style.paddingRight = '0.5em'; + elements[i].insertBefore(anchorNodes[0], elements[i].firstChild); + } else { // if the option provided is `right` (or anything else). + anchorNodes[0].style.paddingLeft = '0.375em'; + elements[i].appendChild(anchorNodes[0]); + } + } + + return this; + }; + + this.remove = function(selector) { + var domAnchor, + elements = document.querySelectorAll(selector); + for (var i = 0; i < elements.length; i++) { + domAnchor = elements[i].querySelector('.anchorjs-link'); + if (domAnchor) { + elements[i].removeChild(domAnchor); + } + } + return this; + }; + + this._addBaselineStyles = function() { + // We don't want to add global baseline styles if they've been added before. + if (document.head.querySelector('style.anchorjs') !== null) { + return; + } + + var style = document.createElement('style'), + linkRule = + ' .anchorjs-link {' + + ' opacity: 0;' + + ' text-decoration: none;' + + ' -webkit-font-smoothing: antialiased;' + + ' -moz-osx-font-smoothing: grayscale;' + + ' }', + hoverRule = + ' *:hover > .anchorjs-link,' + + ' .anchorjs-link:focus {' + + ' opacity: 1;' + + ' }', + anchorjsLinkFontFace = + ' @font-face {' + + ' font-family: "anchorjs-icons";' + + ' font-style: normal;' + + ' font-weight: normal;' + // Icon from icomoon; 10px wide & 10px tall; 2 empty below & 4 above + ' src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype");' + + ' }', + pseudoElContent = + ' [data-anchorjs-icon]::after {' + + ' content: attr(data-anchorjs-icon);' + + ' }', + firstStyleEl; + + style.className = 'anchorjs'; + style.appendChild(document.createTextNode('')); // Necessary for Webkit. + + // We place it in the head with the other style tags, if possible, so as to + // not look out of place. We insert before the others so these styles can be + // overridden if necessary. + firstStyleEl = document.head.querySelector('[rel="stylesheet"], style'); + if (firstStyleEl === undefined) { + document.head.appendChild(style); + } else { + document.head.insertBefore(style, firstStyleEl); + } + + style.sheet.insertRule(linkRule, style.sheet.cssRules.length); + style.sheet.insertRule(hoverRule, style.sheet.cssRules.length); + style.sheet.insertRule(pseudoElContent, style.sheet.cssRules.length); + style.sheet.insertRule(anchorjsLinkFontFace, style.sheet.cssRules.length); + }; +} + +var anchors = new AnchorJS(); diff --git a/ball/assest/vendor/autoprefixer.js b/ball/assest/vendor/autoprefixer.js new file mode 100644 index 0000000..2fabe8b --- /dev/null +++ b/ball/assest/vendor/autoprefixer.js @@ -0,0 +1,21114 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.autoprefixer = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b[0]) { + return 1; + } else if (a[0] < b[0]) { + return -1; + } else { + d = parseFloat(a[1]) - parseFloat(b[1]); + if (d > 0) { + return 1; + } else if (d < 0) { + return -1; + } else { + return 0; + } + } + }); + }; + + feature = function(data, opts, callback) { + var browser, match, need, ref, ref1, support, version, versions; + if (!callback) { + ref = [opts, {}], callback = ref[0], opts = ref[1]; + } + match = opts.match || /\sx($|\s)/; + need = []; + ref1 = data.stats; + for (browser in ref1) { + versions = ref1[browser]; + for (version in versions) { + support = versions[version]; + if (support.match(match)) { + need.push(browser + ' ' + version); + } + } + } + return callback(sort(need)); + }; + + result = {}; + + prefix = function() { + var data, i, j, k, len, name, names, results; + names = 2 <= arguments.length ? slice.call(arguments, 0, j = arguments.length - 1) : (j = 0, []), data = arguments[j++]; + results = []; + for (k = 0, len = names.length; k < len; k++) { + name = names[k]; + result[name] = {}; + results.push((function() { + var results1; + results1 = []; + for (i in data) { + results1.push(result[name][i] = data[i]); + } + return results1; + })()); + } + return results; + }; + + add = function() { + var data, j, k, len, name, names, results; + names = 2 <= arguments.length ? slice.call(arguments, 0, j = arguments.length - 1) : (j = 0, []), data = arguments[j++]; + results = []; + for (k = 0, len = names.length; k < len; k++) { + name = names[k]; + results.push(result[name].browsers = sort(result[name].browsers.concat(data.browsers))); + } + return results; + }; + + module.exports = result; + + feature(require('caniuse-db/features-json/border-radius'), function(browsers) { + return prefix('border-radius', 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius', { + mistakes: ['-ms-', '-o-'], + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-boxshadow'), function(browsers) { + return prefix('box-shadow', { + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-animation'), function(browsers) { + return prefix('animation', 'animation-name', 'animation-duration', 'animation-delay', 'animation-direction', 'animation-fill-mode', 'animation-iteration-count', 'animation-play-state', 'animation-timing-function', '@keyframes', { + mistakes: ['-ms-'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-transitions'), function(browsers) { + return prefix('transition', 'transition-property', 'transition-duration', 'transition-delay', 'transition-timing-function', { + mistakes: ['-ms-'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/transforms2d'), function(browsers) { + return prefix('transform', 'transform-origin', { + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/transforms3d'), function(browsers) { + prefix('perspective', 'perspective-origin', { + transition: true, + browsers: browsers + }); + return prefix('transform-style', 'backface-visibility', { + browsers: browsers + }); + }); + + gradients = require('caniuse-db/features-json/css-gradients'); + + feature(gradients, { + match: /y\sx/ + }, function(browsers) { + return prefix('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', { + props: ['background', 'background-image', 'border-image', 'list-style', 'list-style-image', 'content', 'mask-image', 'mask'], + mistakes: ['-ms-'], + browsers: browsers + }); + }); + + feature(gradients, { + match: /a\sx/ + }, function(browsers) { + browsers = browsers.map(function(i) { + if (/op/.test(i)) { + return i; + } else { + return i + " old"; + } + }); + return add('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css3-boxsizing'), function(browsers) { + return prefix('box-sizing', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-filters'), function(browsers) { + return prefix('filter', { + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/multicolumn'), function(browsers) { + prefix('columns', 'column-width', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', { + transition: true, + browsers: browsers + }); + return prefix('column-count', 'column-rule-style', 'column-span', 'column-fill', 'break-before', 'break-after', 'break-inside', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/user-select-none'), function(browsers) { + return prefix('user-select', { + browsers: browsers + }); + }); + + flexbox = require('caniuse-db/features-json/flexbox'); + + feature(flexbox, { + match: /a\sx/ + }, function(browsers) { + browsers = browsers.map(function(i) { + if (/ie|firefox/.test(i)) { + return i; + } else { + return i + " 2009"; + } + }); + prefix('display-flex', 'inline-flex', { + props: ['display'], + browsers: browsers + }); + prefix('flex', 'flex-grow', 'flex-shrink', 'flex-basis', { + transition: true, + browsers: browsers + }); + return prefix('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', { + browsers: browsers + }); + }); + + feature(flexbox, { + match: /y\sx/ + }, function(browsers) { + add('display-flex', 'inline-flex', { + browsers: browsers + }); + add('flex', 'flex-grow', 'flex-shrink', 'flex-basis', { + browsers: browsers + }); + return add('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/calc'), function(browsers) { + return prefix('calc', { + props: ['*'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/background-img-opts'), function(browsers) { + return prefix('background-clip', 'background-origin', 'background-size', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/font-feature'), function(browsers) { + return prefix('font-feature-settings', 'font-variant-ligatures', 'font-language-override', 'font-kerning', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/border-image'), function(browsers) { + return prefix('border-image', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-selection'), function(browsers) { + return prefix('::selection', { + selector: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-placeholder'), function(browsers) { + browsers = browsers.map(function(i) { + var name, ref, version; + ref = i.split(' '), name = ref[0], version = ref[1]; + if (name === 'firefox' && parseFloat(version) <= 18) { + return i + ' old'; + } else { + return i; + } + }); + return prefix(':placeholder-shown', '::placeholder', { + selector: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-hyphens'), function(browsers) { + return prefix('hyphens', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/fullscreen'), function(browsers) { + return prefix(':fullscreen', { + selector: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css3-tabsize'), function(browsers) { + return prefix('tab-size', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/intrinsic-width'), function(browsers) { + return prefix('max-content', 'min-content', 'fit-content', 'fill-available', { + props: ['width', 'min-width', 'max-width', 'height', 'min-height', 'max-height'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css3-cursors-newer'), function(browsers) { + prefix('zoom-in', 'zoom-out', { + props: ['cursor'], + browsers: browsers.concat(['chrome 3']) + }); + return prefix('grab', 'grabbing', { + props: ['cursor'], + browsers: browsers.concat(['firefox 24', 'firefox 25', 'firefox 26']) + }); + }); + + feature(require('caniuse-db/features-json/css-sticky'), function(browsers) { + return prefix('sticky', { + props: ['position'], + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/pointer'), function(browsers) { + return prefix('touch-action', { + browsers: browsers + }); + }); + + textDecoration = require('caniuse-db/features-json/text-decoration'); + + feature(textDecoration, function(browsers) { + return prefix('text-decoration-style', { + browsers: browsers + }); + }); + + feature(textDecoration, { + match: /y\sx($|\s)/ + }, function(browsers) { + return prefix('text-decoration-line', 'text-decoration-color', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/text-size-adjust'), function(browsers) { + return prefix('text-size-adjust', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-masks'), function(browsers) { + prefix('mask-clip', 'mask-composite', 'mask-image', 'mask-origin', 'mask-repeat', { + browsers: browsers + }); + return prefix('clip-path', 'mask', 'mask-position', 'mask-size', { + transition: true, + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-boxdecorationbreak'), function(brwsrs) { + return prefix('box-decoration-break', { + browsers: brwsrs + }); + }); + + feature(require('caniuse-db/features-json/object-fit'), function(browsers) { + return prefix('object-fit', 'object-position', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-shapes'), function(browsers) { + return prefix('shape-margin', 'shape-outside', 'shape-image-threshold', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/text-overflow'), function(browsers) { + return prefix('text-overflow', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/text-emphasis'), function(browsers) { + return prefix('text-emphasis', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-deviceadaptation'), function(browsers) { + return prefix('@viewport', { + browsers: browsers + }); + }); + + resolution = require('caniuse-db/features-json/css-media-resolution'); + + feature(resolution, { + match: /( x($| )|a #3)/ + }, function(browsers) { + return prefix('@resolution', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-text-align-last'), function(browsers) { + return prefix('text-align-last', { + browsers: browsers + }); + }); + + crispedges = require('caniuse-db/features-json/css-crisp-edges'); + + feature(crispedges, { + match: /y x/ + }, function(browsers) { + return prefix('crisp-edges', { + props: ['image-rendering'], + browsers: browsers + }); + }); + + feature(crispedges, { + match: /a x #2/ + }, function(browsers) { + return prefix('image-rendering', { + browsers: browsers + }); + }); + + logicalProps = require('caniuse-db/features-json/css-logical-props'); + + feature(logicalProps, function(browsers) { + return prefix('border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', { + transition: true, + browsers: browsers + }); + }); + + feature(logicalProps, { + match: /x\s#2/ + }, function(browsers) { + return prefix('border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', { + transition: true, + browsers: browsers + }); + }); + +}).call(this); + +},{"caniuse-db/features-json/background-img-opts":57,"caniuse-db/features-json/border-image":58,"caniuse-db/features-json/border-radius":59,"caniuse-db/features-json/calc":60,"caniuse-db/features-json/css-animation":61,"caniuse-db/features-json/css-boxdecorationbreak":62,"caniuse-db/features-json/css-boxshadow":63,"caniuse-db/features-json/css-crisp-edges":64,"caniuse-db/features-json/css-deviceadaptation":65,"caniuse-db/features-json/css-filters":66,"caniuse-db/features-json/css-gradients":67,"caniuse-db/features-json/css-hyphens":68,"caniuse-db/features-json/css-logical-props":69,"caniuse-db/features-json/css-masks":70,"caniuse-db/features-json/css-media-resolution":71,"caniuse-db/features-json/css-placeholder":72,"caniuse-db/features-json/css-selection":73,"caniuse-db/features-json/css-shapes":74,"caniuse-db/features-json/css-sticky":75,"caniuse-db/features-json/css-text-align-last":76,"caniuse-db/features-json/css-transitions":77,"caniuse-db/features-json/css3-boxsizing":78,"caniuse-db/features-json/css3-cursors-newer":79,"caniuse-db/features-json/css3-tabsize":80,"caniuse-db/features-json/flexbox":81,"caniuse-db/features-json/font-feature":82,"caniuse-db/features-json/fullscreen":83,"caniuse-db/features-json/intrinsic-width":84,"caniuse-db/features-json/multicolumn":85,"caniuse-db/features-json/object-fit":86,"caniuse-db/features-json/pointer":87,"caniuse-db/features-json/text-decoration":88,"caniuse-db/features-json/text-emphasis":89,"caniuse-db/features-json/text-overflow":90,"caniuse-db/features-json/text-size-adjust":91,"caniuse-db/features-json/transforms2d":92,"caniuse-db/features-json/transforms3d":93,"caniuse-db/features-json/user-select-none":94}],3:[function(require,module,exports){ +(function() { + var AtRule, Prefixer, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Prefixer = require('./prefixer'); + + AtRule = (function(superClass) { + extend(AtRule, superClass); + + function AtRule() { + return AtRule.__super__.constructor.apply(this, arguments); + } + + AtRule.prototype.add = function(rule, prefix) { + var already, cloned, prefixed; + prefixed = prefix + rule.name; + already = rule.parent.some(function(i) { + return i.name === prefixed && i.params === rule.params; + }); + if (already) { + return; + } + cloned = this.clone(rule, { + name: prefixed + }); + return rule.parent.insertBefore(rule, cloned); + }; + + AtRule.prototype.process = function(node) { + var j, len, parent, prefix, ref, results; + parent = this.parentPrefix(node); + ref = this.prefixes; + results = []; + for (j = 0, len = ref.length; j < len; j++) { + prefix = ref[j]; + if (parent && parent !== prefix) { + continue; + } + results.push(this.add(node, prefix)); + } + return results; + }; + + return AtRule; + + })(Prefixer); + + module.exports = AtRule; + +}).call(this); + +},{"./prefixer":40}],4:[function(require,module,exports){ +(function() { + var Browsers, browserslist, utils; + + browserslist = require('browserslist'); + + utils = require('./utils'); + + Browsers = (function() { + Browsers.prefixes = function() { + var data, i, name; + if (this.prefixesCache) { + return this.prefixesCache; + } + data = require('caniuse-db/data').agents; + return this.prefixesCache = utils.uniq((function() { + var results; + results = []; + for (name in data) { + i = data[name]; + results.push("-" + i.prefix + "-"); + } + return results; + })()).sort(function(a, b) { + return b.length - a.length; + }); + }; + + Browsers.withPrefix = function(value) { + if (!this.prefixesRegexp) { + this.prefixesRegexp = RegExp("" + (this.prefixes().join('|'))); + } + return this.prefixesRegexp.test(value); + }; + + function Browsers(data1, requirements, options) { + this.data = data1; + this.options = options; + this.selected = this.parse(requirements); + } + + Browsers.prototype.parse = function(requirements) { + var ref; + return browserslist(requirements, { + path: (ref = this.options) != null ? ref.from : void 0 + }); + }; + + Browsers.prototype.browsers = function(criteria) { + var browser, data, ref, selected, versions; + selected = []; + ref = this.data; + for (browser in ref) { + data = ref[browser]; + versions = criteria(data).map(function(version) { + return browser + " " + version; + }); + selected = selected.concat(versions); + } + return selected; + }; + + Browsers.prototype.prefix = function(browser) { + var data, name, prefix, ref, version; + ref = browser.split(' '), name = ref[0], version = ref[1]; + data = this.data[name]; + if (data.prefix_exceptions) { + prefix = data.prefix_exceptions[version]; + } + prefix || (prefix = data.prefix); + return '-' + prefix + '-'; + }; + + Browsers.prototype.isSelected = function(browser) { + return this.selected.indexOf(browser) !== -1; + }; + + return Browsers; + + })(); + + module.exports = Browsers; + +}).call(this); + +},{"./utils":46,"browserslist":55,"caniuse-db/data":56}],5:[function(require,module,exports){ +(function() { + var Browsers, Declaration, Prefixer, utils, vendor, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Prefixer = require('./prefixer'); + + Browsers = require('./browsers'); + + vendor = require('postcss/lib/vendor'); + + utils = require('./utils'); + + Declaration = (function(superClass) { + extend(Declaration, superClass); + + function Declaration() { + return Declaration.__super__.constructor.apply(this, arguments); + } + + Declaration.prototype.check = function(decl) { + return true; + }; + + Declaration.prototype.prefixed = function(prop, prefix) { + return prefix + prop; + }; + + Declaration.prototype.normalize = function(prop) { + return prop; + }; + + Declaration.prototype.otherPrefixes = function(value, prefix) { + var j, len, other, ref; + ref = Browsers.prefixes(); + for (j = 0, len = ref.length; j < len; j++) { + other = ref[j]; + if (other === prefix) { + continue; + } + if (value.indexOf(other) !== -1) { + return true; + } + } + return false; + }; + + Declaration.prototype.set = function(decl, prefix) { + decl.prop = this.prefixed(decl.prop, prefix); + return decl; + }; + + Declaration.prototype.needCascade = function(decl) { + return decl._autoprefixerCascade || (decl._autoprefixerCascade = this.all.options.cascade !== false && decl.style('before').indexOf('\n') !== -1); + }; + + Declaration.prototype.maxPrefixed = function(prefixes, decl) { + var j, len, max, prefix; + if (decl._autoprefixerMax) { + return decl._autoprefixerMax; + } + max = 0; + for (j = 0, len = prefixes.length; j < len; j++) { + prefix = prefixes[j]; + prefix = utils.removeNote(prefix); + if (prefix.length > max) { + max = prefix.length; + } + } + return decl._autoprefixerMax = max; + }; + + Declaration.prototype.calcBefore = function(prefixes, decl, prefix) { + var before, diff, i, j, max, ref; + if (prefix == null) { + prefix = ''; + } + before = decl.style('before'); + max = this.maxPrefixed(prefixes, decl); + diff = max - utils.removeNote(prefix).length; + for (i = j = 0, ref = diff; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { + before += ' '; + } + return before; + }; + + Declaration.prototype.restoreBefore = function(decl) { + var lines, min; + lines = decl.style('before').split("\n"); + min = lines[lines.length - 1]; + this.all.group(decl).up(function(prefixed) { + var array, last; + array = prefixed.style('before').split("\n"); + last = array[array.length - 1]; + if (last.length < min.length) { + return min = last; + } + }); + lines[lines.length - 1] = min; + return decl.before = lines.join("\n"); + }; + + Declaration.prototype.insert = function(decl, prefix, prefixes) { + var cloned; + cloned = this.set(this.clone(decl), prefix); + if (!cloned) { + return; + } + if (this.needCascade(decl)) { + cloned.before = this.calcBefore(prefixes, decl, prefix); + } + return decl.parent.insertBefore(decl, cloned); + }; + + Declaration.prototype.add = function(decl, prefix, prefixes) { + var already, prefixed; + prefixed = this.prefixed(decl.prop, prefix); + already = this.all.group(decl).up(function(i) { + return i.prop === prefixed; + }); + already || (already = this.all.group(decl).down(function(i) { + return i.prop === prefixed; + })); + if (already || this.otherPrefixes(decl.value, prefix)) { + return; + } + return this.insert(decl, prefix, prefixes); + }; + + Declaration.prototype.process = function(decl) { + var prefixes; + if (this.needCascade(decl)) { + prefixes = Declaration.__super__.process.apply(this, arguments); + if (prefixes != null ? prefixes.length : void 0) { + this.restoreBefore(decl); + return decl.before = this.calcBefore(prefixes, decl); + } + } else { + return Declaration.__super__.process.apply(this, arguments); + } + }; + + Declaration.prototype.old = function(prop, prefix) { + return [this.prefixed(prop, prefix)]; + }; + + return Declaration; + + })(Prefixer); + + module.exports = Declaration; + +}).call(this); + +},{"./browsers":4,"./prefixer":40,"./utils":46,"postcss/lib/vendor":113}],6:[function(require,module,exports){ +(function() { + var AlignContent, Declaration, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignContent = (function(superClass) { + extend(AlignContent, superClass); + + function AlignContent() { + return AlignContent.__super__.constructor.apply(this, arguments); + } + + AlignContent.names = ['align-content', 'flex-line-pack']; + + AlignContent.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start', + 'space-between': 'justify', + 'space-around': 'distribute' + }; + + AlignContent.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return prefix + 'flex-line-pack'; + } else { + return AlignContent.__super__.prefixed.apply(this, arguments); + } + }; + + AlignContent.prototype.normalize = function(prop) { + return 'align-content'; + }; + + AlignContent.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2012) { + decl.value = AlignContent.oldValues[decl.value] || decl.value; + return AlignContent.__super__.set.call(this, decl, prefix); + } else if (spec === 'final') { + return AlignContent.__super__.set.apply(this, arguments); + } + }; + + return AlignContent; + + })(Declaration); + + module.exports = AlignContent; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],7:[function(require,module,exports){ +(function() { + var AlignItems, Declaration, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignItems = (function(superClass) { + extend(AlignItems, superClass); + + function AlignItems() { + return AlignItems.__super__.constructor.apply(this, arguments); + } + + AlignItems.names = ['align-items', 'flex-align', 'box-align']; + + AlignItems.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start' + }; + + AlignItems.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-align'; + } else if (spec === 2012) { + return prefix + 'flex-align'; + } else { + return AlignItems.__super__.prefixed.apply(this, arguments); + } + }; + + AlignItems.prototype.normalize = function(prop) { + return 'align-items'; + }; + + AlignItems.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009 || spec === 2012) { + decl.value = AlignItems.oldValues[decl.value] || decl.value; + return AlignItems.__super__.set.call(this, decl, prefix); + } else { + return AlignItems.__super__.set.apply(this, arguments); + } + }; + + return AlignItems; + + })(Declaration); + + module.exports = AlignItems; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],8:[function(require,module,exports){ +(function() { + var AlignSelf, Declaration, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignSelf = (function(superClass) { + extend(AlignSelf, superClass); + + function AlignSelf() { + return AlignSelf.__super__.constructor.apply(this, arguments); + } + + AlignSelf.names = ['align-self', 'flex-item-align']; + + AlignSelf.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start' + }; + + AlignSelf.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return prefix + 'flex-item-align'; + } else { + return AlignSelf.__super__.prefixed.apply(this, arguments); + } + }; + + AlignSelf.prototype.normalize = function(prop) { + return 'align-self'; + }; + + AlignSelf.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2012) { + decl.value = AlignSelf.oldValues[decl.value] || decl.value; + return AlignSelf.__super__.set.call(this, decl, prefix); + } else if (spec === 'final') { + return AlignSelf.__super__.set.apply(this, arguments); + } + }; + + return AlignSelf; + + })(Declaration); + + module.exports = AlignSelf; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],9:[function(require,module,exports){ +(function() { + var BackgroundSize, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BackgroundSize = (function(superClass) { + extend(BackgroundSize, superClass); + + function BackgroundSize() { + return BackgroundSize.__super__.constructor.apply(this, arguments); + } + + BackgroundSize.names = ['background-size']; + + BackgroundSize.prototype.set = function(decl, prefix) { + var value; + value = decl.value.toLowerCase(); + if (prefix === '-webkit-' && value.indexOf(' ') === -1 && value !== 'contain' && value !== 'cover') { + decl.value = decl.value + ' ' + decl.value; + } + return BackgroundSize.__super__.set.call(this, decl, prefix); + }; + + return BackgroundSize; + + })(Declaration); + + module.exports = BackgroundSize; + +}).call(this); + +},{"../declaration":5}],10:[function(require,module,exports){ +(function() { + var BlockLogical, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BlockLogical = (function(superClass) { + extend(BlockLogical, superClass); + + function BlockLogical() { + return BlockLogical.__super__.constructor.apply(this, arguments); + } + + BlockLogical.names = ['border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', 'border-before', 'border-after', 'margin-before', 'margin-after', 'padding-before', 'padding-after']; + + BlockLogical.prototype.prefixed = function(prop, prefix) { + return prefix + (prop.indexOf('-start') !== -1 ? prop.replace('-block-start', '-before') : prop.replace('-block-end', '-after')); + }; + + BlockLogical.prototype.normalize = function(prop) { + if (prop.indexOf('-before') !== -1) { + return prop.replace('-before', '-block-start'); + } else { + return prop.replace('-after', '-block-end'); + } + }; + + return BlockLogical; + + })(Declaration); + + module.exports = BlockLogical; + +}).call(this); + +},{"../declaration":5}],11:[function(require,module,exports){ +(function() { + var BorderImage, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BorderImage = (function(superClass) { + extend(BorderImage, superClass); + + function BorderImage() { + return BorderImage.__super__.constructor.apply(this, arguments); + } + + BorderImage.names = ['border-image']; + + BorderImage.prototype.set = function(decl, prefix) { + decl.value = decl.value.replace(/\s+fill(\s)/, '$1'); + return BorderImage.__super__.set.call(this, decl, prefix); + }; + + return BorderImage; + + })(Declaration); + + module.exports = BorderImage; + +}).call(this); + +},{"../declaration":5}],12:[function(require,module,exports){ +(function() { + var BorderRadius, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BorderRadius = (function(superClass) { + var hor, i, j, len, len1, mozilla, normal, ref, ref1, ver; + + extend(BorderRadius, superClass); + + function BorderRadius() { + return BorderRadius.__super__.constructor.apply(this, arguments); + } + + BorderRadius.names = ['border-radius']; + + BorderRadius.toMozilla = {}; + + BorderRadius.toNormal = {}; + + ref = ['top', 'bottom']; + for (i = 0, len = ref.length; i < len; i++) { + ver = ref[i]; + ref1 = ['left', 'right']; + for (j = 0, len1 = ref1.length; j < len1; j++) { + hor = ref1[j]; + normal = "border-" + ver + "-" + hor + "-radius"; + mozilla = "border-radius-" + ver + hor; + BorderRadius.names.push(normal); + BorderRadius.names.push(mozilla); + BorderRadius.toMozilla[normal] = mozilla; + BorderRadius.toNormal[mozilla] = normal; + } + } + + BorderRadius.prototype.prefixed = function(prop, prefix) { + if (prefix === '-moz-') { + return prefix + (BorderRadius.toMozilla[prop] || prop); + } else { + return BorderRadius.__super__.prefixed.apply(this, arguments); + } + }; + + BorderRadius.prototype.normalize = function(prop) { + return BorderRadius.toNormal[prop] || prop; + }; + + return BorderRadius; + + })(Declaration); + + module.exports = BorderRadius; + +}).call(this); + +},{"../declaration":5}],13:[function(require,module,exports){ +(function() { + var BreakInside, Declaration, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + BreakInside = (function(superClass) { + extend(BreakInside, superClass); + + function BreakInside() { + return BreakInside.__super__.constructor.apply(this, arguments); + } + + BreakInside.names = ['break-inside', 'page-break-inside', 'column-break-inside']; + + BreakInside.prototype.prefixed = function(prop, prefix) { + if (prefix === '-webkit-') { + return prefix + 'column-break-inside'; + } else if (prefix === '-moz-') { + return 'page-break-inside'; + } else { + return BreakInside.__super__.prefixed.apply(this, arguments); + } + }; + + BreakInside.prototype.normalize = function() { + return 'break-inside'; + }; + + BreakInside.prototype.set = function(decl, prefix) { + if (decl.value === 'avoid-column' || decl.value === 'avoid-page') { + decl.value = 'avoid'; + } + return BreakInside.__super__.set.apply(this, arguments); + }; + + BreakInside.prototype.insert = function(decl, prefix, prefixes) { + if (decl.value === 'avoid-region') { + + } else if (decl.value === 'avoid-page' && prefix === '-webkit-') { + + } else { + return BreakInside.__super__.insert.apply(this, arguments); + } + }; + + return BreakInside; + + })(Declaration); + + module.exports = BreakInside; + +}).call(this); + +},{"../declaration":5}],14:[function(require,module,exports){ +(function() { + var CrispEdges, Value, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Value = require('../value'); + + CrispEdges = (function(superClass) { + extend(CrispEdges, superClass); + + function CrispEdges() { + return CrispEdges.__super__.constructor.apply(this, arguments); + } + + CrispEdges.names = ['crisp-edges']; + + CrispEdges.prototype.replace = function(string, prefix) { + if (prefix === '-webkit-') { + return string.replace(this.regexp(), '$1-webkit-optimize-contrast'); + } else { + return CrispEdges.__super__.replace.apply(this, arguments); + } + }; + + return CrispEdges; + + })(Value); + + module.exports = CrispEdges; + +}).call(this); + +},{"../value":47}],15:[function(require,module,exports){ +(function() { + var DisplayFlex, OldDisplayFlex, OldValue, Value, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + OldValue = require('../old-value'); + + Value = require('../value'); + + OldDisplayFlex = (function(superClass) { + extend(OldDisplayFlex, superClass); + + function OldDisplayFlex(unprefixed, prefixed1) { + this.unprefixed = unprefixed; + this.prefixed = prefixed1; + } + + OldDisplayFlex.prototype.check = function(value) { + return value === this.name; + }; + + return OldDisplayFlex; + + })(OldValue); + + DisplayFlex = (function(superClass) { + extend(DisplayFlex, superClass); + + DisplayFlex.names = ['display-flex', 'inline-flex']; + + function DisplayFlex(name, prefixes) { + DisplayFlex.__super__.constructor.apply(this, arguments); + if (name === 'display-flex') { + this.name = 'flex'; + } + } + + DisplayFlex.prototype.check = function(decl) { + return decl.value === this.name; + }; + + DisplayFlex.prototype.prefixed = function(prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + return prefix + (spec === 2009 ? this.name === 'flex' ? 'box' : 'inline-box' : spec === 2012 ? this.name === 'flex' ? 'flexbox' : 'inline-flexbox' : spec === 'final' ? this.name : void 0); + }; + + DisplayFlex.prototype.replace = function(string, prefix) { + return this.prefixed(prefix); + }; + + DisplayFlex.prototype.old = function(prefix) { + var prefixed; + prefixed = this.prefixed(prefix); + if (prefixed) { + return new OldValue(this.name, prefixed); + } + }; + + return DisplayFlex; + + })(Value); + + module.exports = DisplayFlex; + +}).call(this); + +},{"../old-value":39,"../value":47,"./flex-spec":24}],16:[function(require,module,exports){ +(function() { + var FillAvailable, OldValue, Value, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldValue = require('../old-value'); + + Value = require('../value'); + + FillAvailable = (function(superClass) { + extend(FillAvailable, superClass); + + function FillAvailable() { + return FillAvailable.__super__.constructor.apply(this, arguments); + } + + FillAvailable.names = ['fill-available']; + + FillAvailable.prototype.replace = function(string, prefix) { + if (prefix === '-moz-') { + return string.replace(this.regexp(), '$1-moz-available$3'); + } else { + return FillAvailable.__super__.replace.apply(this, arguments); + } + }; + + FillAvailable.prototype.old = function(prefix) { + if (prefix === '-moz-') { + return new OldValue(this.name, '-moz-available'); + } else { + return FillAvailable.__super__.old.apply(this, arguments); + } + }; + + return FillAvailable; + + })(Value); + + module.exports = FillAvailable; + +}).call(this); + +},{"../old-value":39,"../value":47}],17:[function(require,module,exports){ +(function() { + var FilterValue, OldFilterValue, OldValue, Value, utils, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldValue = require('../old-value'); + + Value = require('../value'); + + utils = require('../utils'); + + OldFilterValue = (function(superClass) { + extend(OldFilterValue, superClass); + + function OldFilterValue() { + return OldFilterValue.__super__.constructor.apply(this, arguments); + } + + OldFilterValue.prototype.clean = function(decl) { + return decl.value = utils.editList(decl.value, (function(_this) { + return function(props) { + if (props.every(function(i) { + return i.indexOf(_this.unprefixed) !== 0; + })) { + return props; + } + return props.filter(function(i) { + return i.indexOf(_this.prefixed) === -1; + }); + }; + })(this)); + }; + + return OldFilterValue; + + })(OldValue); + + FilterValue = (function(superClass) { + extend(FilterValue, superClass); + + function FilterValue() { + return FilterValue.__super__.constructor.apply(this, arguments); + } + + FilterValue.names = ['filter']; + + FilterValue.prototype.replace = function(value, prefix) { + if (prefix === '-webkit-') { + if (value.indexOf('-webkit-filter') === -1) { + return FilterValue.__super__.replace.apply(this, arguments) + ', ' + value; + } else { + return value; + } + } else { + return FilterValue.__super__.replace.apply(this, arguments); + } + }; + + FilterValue.prototype.old = function(prefix) { + return new OldFilterValue(this.name, prefix + this.name); + }; + + return FilterValue; + + })(Value); + + module.exports = FilterValue; + +}).call(this); + +},{"../old-value":39,"../utils":46,"../value":47}],18:[function(require,module,exports){ +(function() { + var Declaration, Filter, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + Filter = (function(superClass) { + extend(Filter, superClass); + + function Filter() { + return Filter.__super__.constructor.apply(this, arguments); + } + + Filter.names = ['filter']; + + Filter.prototype.check = function(decl) { + var v; + v = decl.value; + return v.toLowerCase().indexOf('alpha(') === -1 && v.indexOf('DXImageTransform.Microsoft') === -1 && v.indexOf('data:image/svg+xml') === -1; + }; + + return Filter; + + })(Declaration); + + module.exports = Filter; + +}).call(this); + +},{"../declaration":5}],19:[function(require,module,exports){ +(function() { + var Declaration, FlexBasis, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexBasis = (function(superClass) { + extend(FlexBasis, superClass); + + function FlexBasis() { + return FlexBasis.__super__.constructor.apply(this, arguments); + } + + FlexBasis.names = ['flex-basis', 'flex-preferred-size']; + + FlexBasis.prototype.normalize = function() { + return 'flex-basis'; + }; + + FlexBasis.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return prefix + 'flex-preferred-size'; + } else { + return FlexBasis.__super__.prefixed.apply(this, arguments); + } + }; + + FlexBasis.prototype.set = function(decl, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012 || spec === 'final') { + return FlexBasis.__super__.set.apply(this, arguments); + } + }; + + return FlexBasis; + + })(Declaration); + + module.exports = FlexBasis; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],20:[function(require,module,exports){ +(function() { + var Declaration, FlexDirection, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexDirection = (function(superClass) { + extend(FlexDirection, superClass); + + function FlexDirection() { + return FlexDirection.__super__.constructor.apply(this, arguments); + } + + FlexDirection.names = ['flex-direction', 'box-direction', 'box-orient']; + + FlexDirection.prototype.normalize = function(prop) { + return 'flex-direction'; + }; + + FlexDirection.prototype.insert = function(decl, prefix, prefixes) { + var already, cloned, dir, orient, ref, spec, value; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + already = decl.parent.some(function(i) { + return i.prop === prefix + 'box-orient' || i.prop === prefix + 'box-direction'; + }); + if (already) { + return; + } + value = decl.value; + orient = value.indexOf('row') !== -1 ? 'horizontal' : 'vertical'; + dir = value.indexOf('reverse') !== -1 ? 'reverse' : 'normal'; + cloned = this.clone(decl); + cloned.prop = prefix + 'box-orient'; + cloned.value = orient; + if (this.needCascade(decl)) { + cloned.before = this.calcBefore(prefixes, decl, prefix); + } + decl.parent.insertBefore(decl, cloned); + cloned = this.clone(decl); + cloned.prop = prefix + 'box-direction'; + cloned.value = dir; + if (this.needCascade(decl)) { + cloned.before = this.calcBefore(prefixes, decl, prefix); + } + return decl.parent.insertBefore(decl, cloned); + } else { + return FlexDirection.__super__.insert.apply(this, arguments); + } + }; + + FlexDirection.prototype.old = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return [prefix + 'box-orient', prefix + 'box-direction']; + } else { + return FlexDirection.__super__.old.apply(this, arguments); + } + }; + + return FlexDirection; + + })(Declaration); + + module.exports = FlexDirection; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],21:[function(require,module,exports){ +(function() { + var Declaration, FlexFlow, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexFlow = (function(superClass) { + extend(FlexFlow, superClass); + + function FlexFlow() { + return FlexFlow.__super__.constructor.apply(this, arguments); + } + + FlexFlow.names = ['flex-flow']; + + FlexFlow.prototype.set = function(decl, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return FlexFlow.__super__.set.apply(this, arguments); + } else if (spec === 'final') { + return FlexFlow.__super__.set.apply(this, arguments); + } + }; + + return FlexFlow; + + })(Declaration); + + module.exports = FlexFlow; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],22:[function(require,module,exports){ +(function() { + var Declaration, Flex, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + Flex = (function(superClass) { + extend(Flex, superClass); + + function Flex() { + return Flex.__super__.constructor.apply(this, arguments); + } + + Flex.names = ['flex-grow', 'flex-positive']; + + Flex.prototype.normalize = function() { + return 'flex'; + }; + + Flex.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-flex'; + } else if (spec === 2012) { + return prefix + 'flex-positive'; + } else { + return Flex.__super__.prefixed.apply(this, arguments); + } + }; + + return Flex; + + })(Declaration); + + module.exports = Flex; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],23:[function(require,module,exports){ +(function() { + var Declaration, FlexShrink, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexShrink = (function(superClass) { + extend(FlexShrink, superClass); + + function FlexShrink() { + return FlexShrink.__super__.constructor.apply(this, arguments); + } + + FlexShrink.names = ['flex-shrink', 'flex-negative']; + + FlexShrink.prototype.normalize = function() { + return 'flex-shrink'; + }; + + FlexShrink.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012) { + return prefix + 'flex-negative'; + } else { + return FlexShrink.__super__.prefixed.apply(this, arguments); + } + }; + + FlexShrink.prototype.set = function(decl, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2012 || spec === 'final') { + return FlexShrink.__super__.set.apply(this, arguments); + } + }; + + return FlexShrink; + + })(Declaration); + + module.exports = FlexShrink; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],24:[function(require,module,exports){ +(function() { + module.exports = function(prefix) { + var spec; + spec = prefix === '-webkit- 2009' || prefix === '-moz-' ? 2009 : prefix === '-ms-' ? 2012 : prefix === '-webkit-' ? 'final' : void 0; + if (prefix === '-webkit- 2009') { + prefix = '-webkit-'; + } + return [spec, prefix]; + }; + +}).call(this); + +},{}],25:[function(require,module,exports){ +(function() { + var FlexValues, OldValue, Value, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldValue = require('../old-value'); + + Value = require('../value'); + + FlexValues = (function(superClass) { + extend(FlexValues, superClass); + + function FlexValues() { + return FlexValues.__super__.constructor.apply(this, arguments); + } + + FlexValues.names = ['flex', 'flex-grow', 'flex-shrink', 'flex-basis']; + + FlexValues.prototype.prefixed = function(prefix) { + return this.all.prefixed(this.name, prefix); + }; + + FlexValues.prototype.replace = function(string, prefix) { + return string.replace(this.regexp(), '$1' + this.prefixed(prefix) + '$3'); + }; + + FlexValues.prototype.old = function(prefix) { + return new OldValue(this.name, this.prefixed(prefix)); + }; + + return FlexValues; + + })(Value); + + module.exports = FlexValues; + +}).call(this); + +},{"../old-value":39,"../value":47}],26:[function(require,module,exports){ +(function() { + var Declaration, FlexWrap, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexWrap = (function(superClass) { + extend(FlexWrap, superClass); + + function FlexWrap() { + return FlexWrap.__super__.constructor.apply(this, arguments); + } + + FlexWrap.names = ['flex-wrap']; + + FlexWrap.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec !== 2009) { + return FlexWrap.__super__.set.apply(this, arguments); + } + }; + + return FlexWrap; + + })(Declaration); + + module.exports = FlexWrap; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],27:[function(require,module,exports){ +(function() { + var Declaration, Flex, flexSpec, list, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + list = require('postcss/lib/list'); + + Flex = (function(superClass) { + extend(Flex, superClass); + + function Flex() { + return Flex.__super__.constructor.apply(this, arguments); + } + + Flex.names = ['flex', 'box-flex']; + + Flex.oldValues = { + 'auto': '1', + 'none': '0' + }; + + Flex.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-flex'; + } else { + return Flex.__super__.prefixed.apply(this, arguments); + } + }; + + Flex.prototype.normalize = function() { + return 'flex'; + }; + + Flex.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009) { + decl.value = list.space(decl.value)[0]; + decl.value = Flex.oldValues[decl.value] || decl.value; + return Flex.__super__.set.call(this, decl, prefix); + } else { + return Flex.__super__.set.apply(this, arguments); + } + }; + + return Flex; + + })(Declaration); + + module.exports = Flex; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24,"postcss/lib/list":102}],28:[function(require,module,exports){ +(function() { + var Fullscreen, Selector, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Selector = require('../selector'); + + Fullscreen = (function(superClass) { + extend(Fullscreen, superClass); + + function Fullscreen() { + return Fullscreen.__super__.constructor.apply(this, arguments); + } + + Fullscreen.names = [':fullscreen']; + + Fullscreen.prototype.prefixed = function(prefix) { + if ('-webkit-' === prefix) { + return ':-webkit-full-screen'; + } else if ('-moz-' === prefix) { + return ':-moz-full-screen'; + } else { + return ":" + prefix + "fullscreen"; + } + }; + + return Fullscreen; + + })(Selector); + + module.exports = Fullscreen; + +}).call(this); + +},{"../selector":44}],29:[function(require,module,exports){ +(function() { + var Gradient, OldValue, Value, isDirection, list, utils, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldValue = require('../old-value'); + + Value = require('../value'); + + utils = require('../utils'); + + list = require('postcss/lib/list'); + + isDirection = /top|left|right|bottom/gi; + + Gradient = (function(superClass) { + extend(Gradient, superClass); + + function Gradient() { + return Gradient.__super__.constructor.apply(this, arguments); + } + + Gradient.names = ['linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient']; + + Gradient.prototype.replace = function(string, prefix) { + return list.space(string).map((function(_this) { + return function(value) { + var after, args, close, params; + if (value.slice(0, +_this.name.length + 1 || 9e9) !== _this.name + '(') { + return value; + } + close = value.lastIndexOf(')'); + after = value.slice(close + 1); + args = value.slice(_this.name.length + 1, +(close - 1) + 1 || 9e9); + params = list.comma(args); + params = _this.newDirection(params); + if (prefix === '-webkit- old') { + return _this.oldWebkit(value, args, params, after); + } else { + _this.convertDirection(params); + return prefix + _this.name + '(' + params.join(', ') + ')' + after; + } + }; + })(this)).join(' '); + }; + + Gradient.prototype.directions = { + top: 'bottom', + left: 'right', + bottom: 'top', + right: 'left' + }; + + Gradient.prototype.oldDirections = { + 'top': 'left bottom, left top', + 'left': 'right top, left top', + 'bottom': 'left top, left bottom', + 'right': 'left top, right top', + 'top right': 'left bottom, right top', + 'top left': 'right bottom, left top', + 'right top': 'left bottom, right top', + 'right bottom': 'left top, right bottom', + 'bottom right': 'left top, right bottom', + 'bottom left': 'right top, left bottom', + 'left top': 'right bottom, left top', + 'left bottom': 'right top, left bottom' + }; + + Gradient.prototype.newDirection = function(params) { + var first, value; + first = params[0]; + if (first.indexOf('to ') === -1 && isDirection.test(first)) { + first = first.split(' '); + first = (function() { + var j, len, results; + results = []; + for (j = 0, len = first.length; j < len; j++) { + value = first[j]; + results.push(this.directions[value.toLowerCase()] || value); + } + return results; + }).call(this); + params[0] = 'to ' + first.join(' '); + } + return params; + }; + + Gradient.prototype.oldWebkit = function(value, args, params, after) { + if (args.indexOf('px') !== -1) { + return value; + } + if (this.name !== 'linear-gradient') { + return value; + } + if (params[0] && params[0].indexOf('deg') !== -1) { + return value; + } + if (args.indexOf('-corner') !== -1) { + return value; + } + if (args.indexOf('-side') !== -1) { + return value; + } + params = this.oldDirection(params); + params = this.colorStops(params); + return '-webkit-gradient(linear, ' + params.join(', ') + ')' + after; + }; + + Gradient.prototype.convertDirection = function(params) { + if (params.length > 0) { + if (params[0].slice(0, 3) === 'to ') { + return params[0] = this.fixDirection(params[0]); + } else if (params[0].indexOf('deg') !== -1) { + return params[0] = this.fixAngle(params[0]); + } else if (params[0].indexOf(' at ') !== -1) { + return this.fixRadial(params); + } + } + }; + + Gradient.prototype.fixDirection = function(param) { + var value; + param = param.split(' '); + param.splice(0, 1); + param = (function() { + var j, len, results; + results = []; + for (j = 0, len = param.length; j < len; j++) { + value = param[j]; + results.push(this.directions[value.toLowerCase()] || value); + } + return results; + }).call(this); + return param.join(' '); + }; + + Gradient.prototype.roundFloat = function(float, digits) { + return parseFloat(float.toFixed(digits)); + }; + + Gradient.prototype.fixAngle = function(param) { + param = parseFloat(param); + param = Math.abs(450 - param) % 360; + param = this.roundFloat(param, 3); + return param + "deg"; + }; + + Gradient.prototype.oldDirection = function(params) { + var direction; + if (params.length === 0) { + params; + } + if (params[0].indexOf('to ') !== -1) { + direction = params[0].replace(/^to\s+/, ''); + direction = this.oldDirections[direction]; + params[0] = direction; + return params; + } else { + direction = this.oldDirections.bottom; + return [direction].concat(params); + } + }; + + Gradient.prototype.colorStops = function(params) { + return params.map(function(param, i) { + var color, match, position, ref; + if (i === 0) { + return param; + } + ref = list.space(param), color = ref[0], position = ref[1]; + if (position == null) { + match = param.match(/^(.*\))(\d.*)$/); + if (match) { + color = match[1]; + position = match[2]; + } + } + if (position && position.indexOf(')') !== -1) { + color += ' ' + position; + position = void 0; + } + if (i === 1 && (position === void 0 || position === '0%')) { + return "from(" + color + ")"; + } else if (i === params.length - 1 && (position === void 0 || position === '100%')) { + return "to(" + color + ")"; + } else if (position) { + return "color-stop(" + position + ", " + color + ")"; + } else { + return "color-stop(" + color + ")"; + } + }); + }; + + Gradient.prototype.fixRadial = function(params) { + var first; + first = params[0].split(/\s+at\s+/); + return params.splice(0, 1, first[1], first[0]); + }; + + Gradient.prototype.old = function(prefix) { + var regexp, string, type; + if (prefix === '-webkit-') { + type = this.name === 'linear-gradient' ? 'linear' : 'radial'; + string = '-gradient'; + regexp = utils.regexp("-webkit-(" + type + "-gradient|gradient\\(\\s*" + type + ")", false); + return new OldValue(this.name, prefix + this.name, string, regexp); + } else { + return Gradient.__super__.old.apply(this, arguments); + } + }; + + Gradient.prototype.add = function(decl, prefix) { + var p; + p = decl.prop; + if (p.indexOf('mask') !== -1) { + if (prefix === '-webkit-' || prefix === '-webkit- old') { + return Gradient.__super__.add.apply(this, arguments); + } + } else if (p === 'list-style' || p === 'list-style-image' || p === 'content') { + if (prefix === '-webkit-' || prefix === '-webkit- old') { + return Gradient.__super__.add.apply(this, arguments); + } + } else { + return Gradient.__super__.add.apply(this, arguments); + } + }; + + return Gradient; + + })(Value); + + module.exports = Gradient; + +}).call(this); + +},{"../old-value":39,"../utils":46,"../value":47,"postcss/lib/list":102}],30:[function(require,module,exports){ +(function() { + var Declaration, ImageRendering, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + ImageRendering = (function(superClass) { + extend(ImageRendering, superClass); + + function ImageRendering() { + return ImageRendering.__super__.constructor.apply(this, arguments); + } + + ImageRendering.names = ['image-rendering', 'interpolation-mode']; + + ImageRendering.prototype.check = function(decl) { + return decl.value === 'crisp-edges'; + }; + + ImageRendering.prototype.prefixed = function(prop, prefix) { + if (prefix === '-ms-') { + return '-ms-interpolation-mode'; + } else { + return ImageRendering.__super__.prefixed.apply(this, arguments); + } + }; + + ImageRendering.prototype.set = function(decl, prefix) { + if (prefix === '-ms-') { + decl.prop = '-ms-interpolation-mode'; + decl.value = 'nearest-neighbor'; + return decl; + } else { + return ImageRendering.__super__.set.apply(this, arguments); + } + }; + + ImageRendering.prototype.normalize = function(prop) { + return 'image-rendering'; + }; + + return ImageRendering; + + })(Declaration); + + module.exports = ImageRendering; + +}).call(this); + +},{"../declaration":5}],31:[function(require,module,exports){ +(function() { + var Declaration, InlineLogical, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + InlineLogical = (function(superClass) { + extend(InlineLogical, superClass); + + function InlineLogical() { + return InlineLogical.__super__.constructor.apply(this, arguments); + } + + InlineLogical.names = ['border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', 'border-start', 'border-end', 'margin-start', 'margin-end', 'padding-start', 'padding-end']; + + InlineLogical.prototype.prefixed = function(prop, prefix) { + return prefix + prop.replace('-inline', ''); + }; + + InlineLogical.prototype.normalize = function(prop) { + return prop.replace(/(margin|padding|border)-(start|end)/, '$1-inline-$2'); + }; + + return InlineLogical; + + })(Declaration); + + module.exports = InlineLogical; + +}).call(this); + +},{"../declaration":5}],32:[function(require,module,exports){ +(function() { + var Declaration, JustifyContent, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + JustifyContent = (function(superClass) { + extend(JustifyContent, superClass); + + function JustifyContent() { + return JustifyContent.__super__.constructor.apply(this, arguments); + } + + JustifyContent.names = ['justify-content', 'flex-pack', 'box-pack']; + + JustifyContent.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start', + 'space-between': 'justify', + 'space-around': 'distribute' + }; + + JustifyContent.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-pack'; + } else if (spec === 2012) { + return prefix + 'flex-pack'; + } else { + return JustifyContent.__super__.prefixed.apply(this, arguments); + } + }; + + JustifyContent.prototype.normalize = function(prop) { + return 'justify-content'; + }; + + JustifyContent.prototype.set = function(decl, prefix) { + var spec, value; + spec = flexSpec(prefix)[0]; + if (spec === 2009 || spec === 2012) { + value = JustifyContent.oldValues[decl.value] || decl.value; + decl.value = value; + if (spec !== 2009 || value !== 'distribute') { + return JustifyContent.__super__.set.call(this, decl, prefix); + } + } else if (spec === 'final') { + return JustifyContent.__super__.set.apply(this, arguments); + } + }; + + return JustifyContent; + + })(Declaration); + + module.exports = JustifyContent; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],33:[function(require,module,exports){ +(function() { + var Declaration, Order, flexSpec, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + Order = (function(superClass) { + extend(Order, superClass); + + function Order() { + return Order.__super__.constructor.apply(this, arguments); + } + + Order.names = ['order', 'flex-order', 'box-ordinal-group']; + + Order.prototype.prefixed = function(prop, prefix) { + var ref, spec; + ref = flexSpec(prefix), spec = ref[0], prefix = ref[1]; + if (spec === 2009) { + return prefix + 'box-ordinal-group'; + } else if (spec === 2012) { + return prefix + 'flex-order'; + } else { + return Order.__super__.prefixed.apply(this, arguments); + } + }; + + Order.prototype.normalize = function(prop) { + return 'order'; + }; + + Order.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009) { + decl.value = (parseInt(decl.value) + 1).toString(); + return Order.__super__.set.call(this, decl, prefix); + } else { + return Order.__super__.set.apply(this, arguments); + } + }; + + return Order; + + })(Declaration); + + module.exports = Order; + +}).call(this); + +},{"../declaration":5,"./flex-spec":24}],34:[function(require,module,exports){ +(function() { + var Placeholder, Selector, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Selector = require('../selector'); + + Placeholder = (function(superClass) { + extend(Placeholder, superClass); + + function Placeholder() { + return Placeholder.__super__.constructor.apply(this, arguments); + } + + Placeholder.names = [':placeholder-shown', '::placeholder']; + + Placeholder.prototype.possible = function() { + return Placeholder.__super__.possible.apply(this, arguments).concat('-moz- old'); + }; + + Placeholder.prototype.prefixed = function(prefix) { + if ('-webkit-' === prefix) { + return '::-webkit-input-placeholder'; + } else if ('-ms-' === prefix) { + return ':-ms-input-placeholder'; + } else if ('-moz- old' === prefix) { + return ':-moz-placeholder'; + } else { + return "::" + prefix + "placeholder"; + } + }; + + return Placeholder; + + })(Selector); + + module.exports = Placeholder; + +}).call(this); + +},{"../selector":44}],35:[function(require,module,exports){ +(function() { + var Declaration, TransformDecl, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Declaration = require('../declaration'); + + TransformDecl = (function(superClass) { + extend(TransformDecl, superClass); + + function TransformDecl() { + return TransformDecl.__super__.constructor.apply(this, arguments); + } + + TransformDecl.names = ['transform', 'transform-origin']; + + TransformDecl.functions3d = ['matrix3d', 'translate3d', 'translateZ', 'scale3d', 'scaleZ', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'perspective']; + + TransformDecl.prototype.keykrameParents = function(decl) { + var parent; + parent = decl.parent; + while (parent) { + if (parent.type === 'atrule' && parent.name === 'keyframes') { + return true; + } + parent = parent.parent; + } + return false; + }; + + TransformDecl.prototype.contain3d = function(decl) { + var func, i, len, ref; + if (decl.prop === 'transform-origin') { + return false; + } + ref = TransformDecl.functions3d; + for (i = 0, len = ref.length; i < len; i++) { + func = ref[i]; + if (decl.value.indexOf(func + "(") !== -1) { + return true; + } + } + return false; + }; + + TransformDecl.prototype.insert = function(decl, prefix, prefixes) { + if (prefix === '-ms-') { + if (!this.contain3d(decl) && !this.keykrameParents(decl)) { + return TransformDecl.__super__.insert.apply(this, arguments); + } + } else if (prefix === '-o-') { + if (!this.contain3d(decl)) { + return TransformDecl.__super__.insert.apply(this, arguments); + } + } else { + return TransformDecl.__super__.insert.apply(this, arguments); + } + }; + + return TransformDecl; + + })(Declaration); + + module.exports = TransformDecl; + +}).call(this); + +},{"../declaration":5}],36:[function(require,module,exports){ +(function() { + var TransformValue, Value, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Value = require('../value'); + + TransformValue = (function(superClass) { + extend(TransformValue, superClass); + + function TransformValue() { + return TransformValue.__super__.constructor.apply(this, arguments); + } + + TransformValue.names = ['transform']; + + TransformValue.prototype.replace = function(value, prefix) { + if (prefix === '-ms-') { + return value; + } else { + return TransformValue.__super__.replace.apply(this, arguments); + } + }; + + return TransformValue; + + })(Value); + + module.exports = TransformValue; + +}).call(this); + +},{"../value":47}],37:[function(require,module,exports){ +(function() { + var capitalize, names, prefix; + + capitalize = function(str) { + return str.slice(0, 1).toUpperCase() + str.slice(1); + }; + + names = { + ie: 'IE', + ie_mob: 'IE Mobile', + ios_saf: 'iOS', + op_mini: 'Opera Mini', + op_mob: 'Opera Mobile', + and_chr: 'Chrome for Android', + and_ff: 'Firefox for Android', + and_uc: 'UC for Android' + }; + + prefix = function(name, transition, prefixes) { + var out; + out = ' ' + name + (transition ? '*' : '') + ': '; + out += prefixes.map(function(i) { + return i.replace(/^-(.*)-$/g, '$1'); + }).join(', '); + out += "\n"; + return out; + }; + + module.exports = function(prefixes) { + var atrules, browser, data, j, k, l, len, len1, len2, list, name, needTransition, out, props, ref, ref1, ref2, ref3, ref4, ref5, ref6, selector, selectors, string, transitionProp, useTransition, value, values, version, versions; + if (prefixes.browsers.selected.length === 0) { + return "No browsers selected"; + } + versions = []; + ref = prefixes.browsers.selected; + for (j = 0, len = ref.length; j < len; j++) { + browser = ref[j]; + ref1 = browser.split(' '), name = ref1[0], version = ref1[1]; + name = names[name] || capitalize(name); + if (versions[name]) { + versions[name].push(version); + } else { + versions[name] = [version]; + } + } + out = "Browsers:\n"; + for (browser in versions) { + list = versions[browser]; + list = list.sort(function(a, b) { + return parseFloat(b) - parseFloat(a); + }); + out += ' ' + browser + ': ' + list.join(', ') + "\n"; + } + atrules = ''; + ref2 = prefixes.add; + for (name in ref2) { + data = ref2[name]; + if (name[0] === '@' && data.prefixes) { + atrules += prefix(name, false, data.prefixes); + } + } + if (atrules !== '') { + out += "\nAt-Rules:\n" + atrules; + } + selectors = ''; + ref3 = prefixes.add.selectors; + for (k = 0, len1 = ref3.length; k < len1; k++) { + selector = ref3[k]; + if (selector.prefixes) { + selectors += prefix(selector.name, false, selector.prefixes); + } + } + if (selectors !== '') { + out += "\nSelectors:\n" + selectors; + } + values = ''; + props = ''; + useTransition = false; + needTransition = (ref4 = prefixes.add.transition) != null ? ref4.prefixes : void 0; + ref5 = prefixes.add; + for (name in ref5) { + data = ref5[name]; + if (name[0] !== '@' && data.prefixes) { + transitionProp = needTransition && prefixes.data[name].transition; + if (transitionProp) { + useTransition = true; + } + props += prefix(name, transitionProp, data.prefixes); + } + if (!data.values) { + continue; + } + if (prefixes.transitionProps.some(function(i) { + return i === name; + })) { + continue; + } + ref6 = data.values; + for (l = 0, len2 = ref6.length; l < len2; l++) { + value = ref6[l]; + string = prefix(value.name, false, value.prefixes); + if (values.indexOf(string) === -1) { + values += string; + } + } + } + if (useTransition) { + props += " * - can be used in transition\n"; + } + if (props !== '') { + out += "\nProperties:\n" + props; + } + if (values !== '') { + out += "\nValues:\n" + values; + } + if (atrules === '' && selectors === '' && props === '' && values === '') { + out += '\nAwesome! Your browsers don\'t require any vendor prefixes.' + '\nNow you can remove Autoprefixer from build steps.'; + } + return out; + }; + +}).call(this); + +},{}],38:[function(require,module,exports){ +(function() { + var OldSelector; + + OldSelector = (function() { + function OldSelector(selector, prefix1) { + var i, len, prefix, ref; + this.prefix = prefix1; + this.prefixed = selector.prefixed(this.prefix); + this.regexp = selector.regexp(this.prefix); + this.prefixeds = []; + ref = selector.possible(); + for (i = 0, len = ref.length; i < len; i++) { + prefix = ref[i]; + this.prefixeds.push([selector.prefixed(prefix), selector.regexp(prefix)]); + } + this.unprefixed = selector.name; + this.nameRegexp = selector.regexp(); + } + + OldSelector.prototype.isHack = function(rule) { + var before, i, index, len, ref, ref1, regexp, rules, some, string; + index = rule.parent.index(rule) + 1; + rules = rule.parent.nodes; + while (index < rules.length) { + before = rules[index].selector; + if (!before) { + return true; + } + if (before.indexOf(this.unprefixed) !== -1 && before.match(this.nameRegexp)) { + return false; + } + some = false; + ref = this.prefixeds; + for (i = 0, len = ref.length; i < len; i++) { + ref1 = ref[i], string = ref1[0], regexp = ref1[1]; + if (before.indexOf(string) !== -1 && before.match(regexp)) { + some = true; + break; + } + } + if (!some) { + return true; + } + index += 1; + } + return true; + }; + + OldSelector.prototype.check = function(rule) { + if (rule.selector.indexOf(this.prefixed) === -1) { + return false; + } + if (!rule.selector.match(this.regexp)) { + return false; + } + if (this.isHack(rule)) { + return false; + } + return true; + }; + + return OldSelector; + + })(); + + module.exports = OldSelector; + +}).call(this); + +},{}],39:[function(require,module,exports){ +(function() { + var OldValue, utils; + + utils = require('./utils'); + + OldValue = (function() { + function OldValue(unprefixed, prefixed, string, regexp) { + this.unprefixed = unprefixed; + this.prefixed = prefixed; + this.string = string; + this.regexp = regexp; + this.regexp || (this.regexp = utils.regexp(this.prefixed)); + this.string || (this.string = this.prefixed); + } + + OldValue.prototype.check = function(value) { + if (value.indexOf(this.string) !== -1) { + return !!value.match(this.regexp); + } else { + return false; + } + }; + + return OldValue; + + })(); + + module.exports = OldValue; + +}).call(this); + +},{"./utils":46}],40:[function(require,module,exports){ +(function() { + var Browsers, Prefixer, clone, utils, vendor, + hasProp = {}.hasOwnProperty; + + Browsers = require('./browsers'); + + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + + clone = function(obj, parent) { + var cloned, i, value; + if (typeof obj !== 'object') { + return obj; + } + cloned = new obj.constructor(); + for (i in obj) { + if (!hasProp.call(obj, i)) continue; + value = obj[i]; + if (i === 'parent' && typeof value === 'object') { + if (parent) { + cloned[i] = parent; + } + } else if (i === 'source') { + cloned[i] = value; + } else if (value instanceof Array) { + cloned[i] = value.map(function(i) { + return clone(i, cloned); + }); + } else if (i !== '_autoprefixerPrefix' && i !== '_autoprefixerValues') { + cloned[i] = clone(value, cloned); + } + } + return cloned; + }; + + Prefixer = (function() { + Prefixer.hack = function(klass) { + var j, len, name, ref, results; + this.hacks || (this.hacks = {}); + ref = klass.names; + results = []; + for (j = 0, len = ref.length; j < len; j++) { + name = ref[j]; + results.push(this.hacks[name] = klass); + } + return results; + }; + + Prefixer.load = function(name, prefixes, all) { + var klass, ref; + klass = (ref = this.hacks) != null ? ref[name] : void 0; + if (klass) { + return new klass(name, prefixes, all); + } else { + return new this(name, prefixes, all); + } + }; + + Prefixer.clone = function(node, overrides) { + var cloned, name; + cloned = clone(node); + for (name in overrides) { + cloned[name] = overrides[name]; + } + return cloned; + }; + + function Prefixer(name1, prefixes1, all1) { + this.name = name1; + this.prefixes = prefixes1; + this.all = all1; + } + + Prefixer.prototype.parentPrefix = function(node) { + var prefix; + prefix = node._autoprefixerPrefix != null ? node._autoprefixerPrefix : node.type === 'decl' && node.prop[0] === '-' ? vendor.prefix(node.prop) : node.type === 'root' ? false : node.type === 'rule' && node.selector.indexOf(':-') !== -1 ? node.selector.match(/:(-\w+-)/)[1] : node.type === 'atrule' && node.name[0] === '-' ? vendor.prefix(node.name) : this.parentPrefix(node.parent); + if (Browsers.prefixes().indexOf(prefix) === -1) { + prefix = false; + } + return node._autoprefixerPrefix = prefix; + }; + + Prefixer.prototype.process = function(node) { + var added, j, k, len, len1, parent, prefix, prefixes, ref; + if (!this.check(node)) { + return; + } + parent = this.parentPrefix(node); + prefixes = []; + ref = this.prefixes; + for (j = 0, len = ref.length; j < len; j++) { + prefix = ref[j]; + if (parent && parent !== utils.removeNote(prefix)) { + continue; + } + prefixes.push(prefix); + } + added = []; + for (k = 0, len1 = prefixes.length; k < len1; k++) { + prefix = prefixes[k]; + if (this.add(node, prefix, added.concat([prefix]))) { + added.push(prefix); + } + } + return added; + }; + + Prefixer.prototype.clone = function(node, overrides) { + return Prefixer.clone(node, overrides); + }; + + return Prefixer; + + })(); + + module.exports = Prefixer; + +}).call(this); + +},{"./browsers":4,"./utils":46,"postcss/lib/vendor":113}],41:[function(require,module,exports){ +(function() { + var AtRule, Browsers, Declaration, Prefixes, Processor, Resolution, Selector, Supports, Value, declsCache, utils, vendor; + + Declaration = require('./declaration'); + + Resolution = require('./resolution'); + + Processor = require('./processor'); + + Supports = require('./supports'); + + Browsers = require('./browsers'); + + Selector = require('./selector'); + + AtRule = require('./at-rule'); + + Value = require('./value'); + + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + + Selector.hack(require('./hacks/fullscreen')); + + Selector.hack(require('./hacks/placeholder')); + + Declaration.hack(require('./hacks/flex')); + + Declaration.hack(require('./hacks/order')); + + Declaration.hack(require('./hacks/filter')); + + Declaration.hack(require('./hacks/flex-flow')); + + Declaration.hack(require('./hacks/flex-grow')); + + Declaration.hack(require('./hacks/flex-wrap')); + + Declaration.hack(require('./hacks/align-self')); + + Declaration.hack(require('./hacks/flex-basis')); + + Declaration.hack(require('./hacks/align-items')); + + Declaration.hack(require('./hacks/flex-shrink')); + + Declaration.hack(require('./hacks/break-inside')); + + Declaration.hack(require('./hacks/border-image')); + + Declaration.hack(require('./hacks/align-content')); + + Declaration.hack(require('./hacks/border-radius')); + + Declaration.hack(require('./hacks/block-logical')); + + Declaration.hack(require('./hacks/inline-logical')); + + Declaration.hack(require('./hacks/transform-decl')); + + Declaration.hack(require('./hacks/flex-direction')); + + Declaration.hack(require('./hacks/image-rendering')); + + Declaration.hack(require('./hacks/justify-content')); + + Declaration.hack(require('./hacks/background-size')); + + Value.hack(require('./hacks/gradient')); + + Value.hack(require('./hacks/crisp-edges')); + + Value.hack(require('./hacks/flex-values')); + + Value.hack(require('./hacks/display-flex')); + + Value.hack(require('./hacks/filter-value')); + + Value.hack(require('./hacks/fill-available')); + + Value.hack(require('./hacks/transform-value')); + + declsCache = {}; + + Prefixes = (function() { + function Prefixes(data1, browsers, options) { + var ref; + this.data = data1; + this.browsers = browsers; + this.options = options != null ? options : {}; + ref = this.preprocess(this.select(this.data)), this.add = ref[0], this.remove = ref[1]; + this.processor = new Processor(this); + } + + Prefixes.prototype.transitionProps = ['transition', 'transition-property']; + + Prefixes.prototype.cleaner = function() { + var empty; + if (!this.cleanerCache) { + if (this.browsers.selected.length) { + empty = new Browsers(this.browsers.data, []); + this.cleanerCache = new Prefixes(this.data, empty, this.options); + } else { + return this; + } + } + return this.cleanerCache; + }; + + Prefixes.prototype.select = function(list) { + var add, all, data, name, notes, selected; + selected = { + add: {}, + remove: {} + }; + for (name in list) { + data = list[name]; + add = data.browsers.map(function(i) { + var params; + params = i.split(' '); + return { + browser: params[0] + ' ' + params[1], + note: params[2] + }; + }); + notes = add.filter(function(i) { + return i.note; + }).map((function(_this) { + return function(i) { + return _this.browsers.prefix(i.browser) + ' ' + i.note; + }; + })(this)); + notes = utils.uniq(notes); + add = add.filter((function(_this) { + return function(i) { + return _this.browsers.isSelected(i.browser); + }; + })(this)).map((function(_this) { + return function(i) { + var prefix; + prefix = _this.browsers.prefix(i.browser); + if (i.note) { + return prefix + ' ' + i.note; + } else { + return prefix; + } + }; + })(this)); + add = this.sort(utils.uniq(add)); + all = data.browsers.map((function(_this) { + return function(i) { + return _this.browsers.prefix(i); + }; + })(this)); + if (data.mistakes) { + all = all.concat(data.mistakes); + } + all = all.concat(notes); + all = utils.uniq(all); + if (add.length) { + selected.add[name] = add; + if (add.length < all.length) { + selected.remove[name] = all.filter(function(i) { + return add.indexOf(i) === -1; + }); + } + } else { + selected.remove[name] = all; + } + } + return selected; + }; + + Prefixes.prototype.sort = function(prefixes) { + return prefixes.sort(function(a, b) { + var aLength, bLength; + aLength = utils.removeNote(a).length; + bLength = utils.removeNote(b).length; + if (aLength === bLength) { + return b.length - a.length; + } else { + return bLength - aLength; + } + }); + }; + + Prefixes.prototype.preprocess = function(selected) { + var add, j, k, l, len, len1, len2, len3, len4, len5, len6, m, n, name, o, old, olds, p, prefix, prefixed, prefixes, prop, props, ref, ref1, ref2, remove, selector, value, values; + add = { + selectors: [], + '@supports': new Supports(this) + }; + ref = selected.add; + for (name in ref) { + prefixes = ref[name]; + if (name === '@keyframes' || name === '@viewport') { + add[name] = new AtRule(name, prefixes, this); + } else if (name === '@resolution') { + add[name] = new Resolution(name, prefixes, this); + } else if (this.data[name].selector) { + add.selectors.push(Selector.load(name, prefixes, this)); + } else { + props = this.data[name].transition ? this.transitionProps : this.data[name].props; + if (props) { + value = Value.load(name, prefixes, this); + for (j = 0, len = props.length; j < len; j++) { + prop = props[j]; + if (!add[prop]) { + add[prop] = { + values: [] + }; + } + add[prop].values.push(value); + } + } + if (!this.data[name].props) { + values = ((ref1 = add[name]) != null ? ref1.values : void 0) || []; + add[name] = Declaration.load(name, prefixes, this); + add[name].values = values; + } + } + } + remove = { + selectors: [] + }; + ref2 = selected.remove; + for (name in ref2) { + prefixes = ref2[name]; + if (this.data[name].selector) { + selector = Selector.load(name, prefixes); + for (k = 0, len1 = prefixes.length; k < len1; k++) { + prefix = prefixes[k]; + remove.selectors.push(selector.old(prefix)); + } + } else if (name === '@keyframes' || name === '@viewport') { + for (l = 0, len2 = prefixes.length; l < len2; l++) { + prefix = prefixes[l]; + prefixed = '@' + prefix + name.slice(1); + remove[prefixed] = { + remove: true + }; + } + } else if (name === '@resolution') { + remove[name] = new Resolution(name, prefixes, this); + } else { + props = this.data[name].transition ? this.transitionProps : this.data[name].props; + if (props) { + value = Value.load(name, [], this); + for (m = 0, len3 = prefixes.length; m < len3; m++) { + prefix = prefixes[m]; + old = value.old(prefix); + if (old) { + for (n = 0, len4 = props.length; n < len4; n++) { + prop = props[n]; + if (!remove[prop]) { + remove[prop] = {}; + } + if (!remove[prop].values) { + remove[prop].values = []; + } + remove[prop].values.push(old); + } + } + } + } + if (!this.data[name].props) { + for (o = 0, len5 = prefixes.length; o < len5; o++) { + prefix = prefixes[o]; + prop = vendor.unprefixed(name); + olds = this.decl(name).old(name, prefix); + for (p = 0, len6 = olds.length; p < len6; p++) { + prefixed = olds[p]; + if (!remove[prefixed]) { + remove[prefixed] = {}; + } + remove[prefixed].remove = true; + } + } + } + } + } + return [add, remove]; + }; + + Prefixes.prototype.decl = function(prop) { + var decl; + decl = declsCache[prop]; + if (decl) { + return decl; + } else { + return declsCache[prop] = Declaration.load(prop); + } + }; + + Prefixes.prototype.unprefixed = function(prop) { + prop = vendor.unprefixed(prop); + return this.decl(prop).normalize(prop); + }; + + Prefixes.prototype.prefixed = function(prop, prefix) { + prop = vendor.unprefixed(prop); + return this.decl(prop).prefixed(prop, prefix); + }; + + Prefixes.prototype.values = function(type, prop) { + var data, global, ref, ref1, values; + data = this[type]; + global = (ref = data['*']) != null ? ref.values : void 0; + values = (ref1 = data[prop]) != null ? ref1.values : void 0; + if (global && values) { + return utils.uniq(global.concat(values)); + } else { + return global || values || []; + } + }; + + Prefixes.prototype.group = function(decl) { + var checker, index, length, rule, unprefixed; + rule = decl.parent; + index = rule.index(decl); + length = rule.nodes.length; + unprefixed = this.unprefixed(decl.prop); + checker = (function(_this) { + return function(step, callback) { + var other; + index += step; + while (index >= 0 && index < length) { + other = rule.nodes[index]; + if (other.type === 'decl') { + if (step === -1 && other.prop === unprefixed) { + if (!Browsers.withPrefix(other.value)) { + break; + } + } + if (_this.unprefixed(other.prop) !== unprefixed) { + break; + } else if (callback(other) === true) { + return true; + } + if (step === +1 && other.prop === unprefixed) { + if (!Browsers.withPrefix(other.value)) { + break; + } + } + } + index += step; + } + return false; + }; + })(this); + return { + up: function(callback) { + return checker(-1, callback); + }, + down: function(callback) { + return checker(+1, callback); + } + }; + }; + + return Prefixes; + + })(); + + module.exports = Prefixes; + +}).call(this); + +},{"./at-rule":3,"./browsers":4,"./declaration":5,"./hacks/align-content":6,"./hacks/align-items":7,"./hacks/align-self":8,"./hacks/background-size":9,"./hacks/block-logical":10,"./hacks/border-image":11,"./hacks/border-radius":12,"./hacks/break-inside":13,"./hacks/crisp-edges":14,"./hacks/display-flex":15,"./hacks/fill-available":16,"./hacks/filter":18,"./hacks/filter-value":17,"./hacks/flex":27,"./hacks/flex-basis":19,"./hacks/flex-direction":20,"./hacks/flex-flow":21,"./hacks/flex-grow":22,"./hacks/flex-shrink":23,"./hacks/flex-values":25,"./hacks/flex-wrap":26,"./hacks/fullscreen":28,"./hacks/gradient":29,"./hacks/image-rendering":30,"./hacks/inline-logical":31,"./hacks/justify-content":32,"./hacks/order":33,"./hacks/placeholder":34,"./hacks/transform-decl":35,"./hacks/transform-value":36,"./processor":42,"./resolution":43,"./selector":44,"./supports":45,"./utils":46,"./value":47,"postcss/lib/vendor":113}],42:[function(require,module,exports){ +(function() { + var Processor, Value, utils, vendor; + + vendor = require('postcss/lib/vendor'); + + Value = require('./value'); + + utils = require('./utils'); + + Processor = (function() { + function Processor(prefixes) { + this.prefixes = prefixes; + } + + Processor.prototype.add = function(css) { + var keyframes, resolution, supports, viewport; + resolution = this.prefixes.add['@resolution']; + keyframes = this.prefixes.add['@keyframes']; + viewport = this.prefixes.add['@viewport']; + supports = this.prefixes.add['@supports']; + css.eachAtRule((function(_this) { + return function(rule) { + if (rule.name === 'keyframes') { + if (!_this.disabled(rule)) { + return keyframes != null ? keyframes.process(rule) : void 0; + } + } else if (rule.name === 'viewport') { + if (!_this.disabled(rule)) { + return viewport != null ? viewport.process(rule) : void 0; + } + } else if (rule.name === 'supports') { + if (!_this.disabled(rule)) { + return supports.process(rule); + } + } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) { + if (!_this.disabled(rule)) { + return resolution != null ? resolution.process(rule) : void 0; + } + } + }; + })(this)); + css.eachRule((function(_this) { + return function(rule) { + var j, len, ref, results, selector; + if (_this.disabled(rule)) { + return; + } + ref = _this.prefixes.add.selectors; + results = []; + for (j = 0, len = ref.length; j < len; j++) { + selector = ref[j]; + results.push(selector.process(rule)); + } + return results; + }; + })(this)); + css.eachDecl((function(_this) { + return function(decl) { + var prefix; + prefix = _this.prefixes.add[decl.prop]; + if (prefix && prefix.prefixes) { + if (!_this.disabled(decl)) { + return prefix.process(decl); + } + } + }; + })(this)); + return css.eachDecl((function(_this) { + return function(decl) { + var j, len, ref, unprefixed, value; + if (_this.disabled(decl)) { + return; + } + unprefixed = _this.prefixes.unprefixed(decl.prop); + ref = _this.prefixes.values('add', unprefixed); + for (j = 0, len = ref.length; j < len; j++) { + value = ref[j]; + value.process(decl); + } + return Value.save(_this.prefixes, decl); + }; + })(this)); + }; + + Processor.prototype.remove = function(css) { + var checker, j, len, ref, resolution; + resolution = this.prefixes.remove['@resolution']; + css.eachAtRule((function(_this) { + return function(rule, i) { + if (_this.prefixes.remove['@' + rule.name]) { + if (!_this.disabled(rule)) { + return rule.parent.remove(i); + } + } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) { + return resolution != null ? resolution.clean(rule) : void 0; + } + }; + })(this)); + ref = this.prefixes.remove.selectors; + for (j = 0, len = ref.length; j < len; j++) { + checker = ref[j]; + css.eachRule((function(_this) { + return function(rule, i) { + if (checker.check(rule)) { + if (!_this.disabled(rule)) { + return rule.parent.remove(i); + } + } + }; + })(this)); + } + return css.eachDecl((function(_this) { + return function(decl, i) { + var k, len1, notHack, ref1, ref2, rule, unprefixed; + if (_this.disabled(decl)) { + return; + } + rule = decl.parent; + unprefixed = _this.prefixes.unprefixed(decl.prop); + if ((ref1 = _this.prefixes.remove[decl.prop]) != null ? ref1.remove : void 0) { + notHack = _this.prefixes.group(decl).down(function(other) { + return other.prop === unprefixed; + }); + if (notHack && !_this.withHackValue(decl)) { + if (decl.style('before').indexOf("\n") > -1) { + _this.reduceSpaces(decl); + } + rule.remove(i); + return; + } + } + ref2 = _this.prefixes.values('remove', unprefixed); + for (k = 0, len1 = ref2.length; k < len1; k++) { + checker = ref2[k]; + if (checker.check(decl.value)) { + unprefixed = checker.unprefixed; + notHack = _this.prefixes.group(decl).down(function(other) { + return other.value.indexOf(unprefixed) !== -1; + }); + if (notHack) { + rule.remove(i); + return; + } else if (checker.clean) { + checker.clean(decl); + return; + } + } + } + }; + })(this)); + }; + + Processor.prototype.withHackValue = function(decl) { + return decl.prop === '-webkit-background-clip' && decl.value === 'text'; + }; + + Processor.prototype.disabled = function(node) { + var status; + if (node._autoprefixerDisabled != null) { + return node._autoprefixerDisabled; + } else if (node.nodes) { + status = void 0; + node.each(function(i) { + if (i.type !== 'comment') { + return; + } + if (i.text === 'autoprefixer: off') { + status = false; + return false; + } else if (i.text === 'autoprefixer: on') { + status = true; + return false; + } + }); + return node._autoprefixerDisabled = status != null ? !status : node.parent ? this.disabled(node.parent) : false; + } else { + return node._autoprefixerDisabled = this.disabled(node.parent); + } + }; + + Processor.prototype.reduceSpaces = function(decl) { + var diff, parts, prevMin, stop; + stop = false; + this.prefixes.group(decl).up(function(other) { + return stop = true; + }); + if (stop) { + return; + } + parts = decl.style('before').split("\n"); + prevMin = parts[parts.length - 1].length; + diff = false; + return this.prefixes.group(decl).down(function(other) { + var last; + parts = other.style('before').split("\n"); + last = parts.length - 1; + if (parts[last].length > prevMin) { + if (diff === false) { + diff = parts[last].length - prevMin; + } + parts[last] = parts[last].slice(0, -diff); + return other.before = parts.join("\n"); + } + }); + }; + + return Processor; + + })(); + + module.exports = Processor; + +}).call(this); + +},{"./utils":46,"./value":47,"postcss/lib/vendor":113}],43:[function(require,module,exports){ +(function() { + var Prefixer, Resolution, n2f, regexp, split, utils, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Prefixer = require('./prefixer'); + + utils = require('./utils'); + + n2f = require('num2fraction'); + + regexp = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpi)/gi; + + split = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpi)/i; + + Resolution = (function(superClass) { + extend(Resolution, superClass); + + function Resolution() { + return Resolution.__super__.constructor.apply(this, arguments); + } + + Resolution.prototype.prefixName = function(prefix, name) { + return name = prefix === '-moz-' ? name + '--moz-device-pixel-ratio' : prefix + name + '-device-pixel-ratio'; + }; + + Resolution.prototype.prefixQuery = function(prefix, name, colon, value, units) { + if (units === 'dpi') { + value = Number(value / 96); + } + if (prefix === '-o-') { + value = n2f(value); + } + return this.prefixName(prefix, name) + colon + value; + }; + + Resolution.prototype.clean = function(rule) { + var j, len, prefix, ref; + if (!this.bad) { + this.bad = []; + ref = this.prefixes; + for (j = 0, len = ref.length; j < len; j++) { + prefix = ref[j]; + this.bad.push(this.prefixName(prefix, 'min')); + this.bad.push(this.prefixName(prefix, 'max')); + } + } + return rule.params = utils.editList(rule.params, (function(_this) { + return function(queries) { + return queries.filter(function(query) { + return _this.bad.every(function(i) { + return query.indexOf(i) === -1; + }); + }); + }; + })(this)); + }; + + Resolution.prototype.process = function(rule) { + var parent, prefixes; + parent = this.parentPrefix(rule); + prefixes = parent ? [parent] : this.prefixes; + return rule.params = utils.editList(rule.params, (function(_this) { + return function(origin, prefixed) { + var j, k, len, len1, prefix, processed, query; + for (j = 0, len = origin.length; j < len; j++) { + query = origin[j]; + if (query.indexOf('min-resolution') === -1 && query.indexOf('max-resolution') === -1) { + prefixed.push(query); + continue; + } + for (k = 0, len1 = prefixes.length; k < len1; k++) { + prefix = prefixes[k]; + if (prefix === '-moz-' && rule.params.indexOf('dpi') !== -1) { + continue; + } else { + processed = query.replace(regexp, function(str) { + var parts; + parts = str.match(split); + return _this.prefixQuery(prefix, parts[1], parts[2], parts[3], parts[4]); + }); + prefixed.push(processed); + } + } + prefixed.push(query); + } + return utils.uniq(prefixed); + }; + })(this)); + }; + + return Resolution; + + })(Prefixer); + + module.exports = Resolution; + +}).call(this); + +},{"./prefixer":40,"./utils":46,"num2fraction":95}],44:[function(require,module,exports){ +(function() { + var Browsers, OldSelector, Prefixer, Selector, utils, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + OldSelector = require('./old-selector'); + + Prefixer = require('./prefixer'); + + Browsers = require('./browsers'); + + utils = require('./utils'); + + Selector = (function(superClass) { + extend(Selector, superClass); + + function Selector(name1, prefixes, all) { + this.name = name1; + this.prefixes = prefixes; + this.all = all; + this.regexpCache = {}; + } + + Selector.prototype.check = function(rule) { + if (rule.selector.indexOf(this.name) !== -1) { + return !!rule.selector.match(this.regexp()); + } else { + return false; + } + }; + + Selector.prototype.prefixed = function(prefix) { + return this.name.replace(/^([^\w]*)/, '$1' + prefix); + }; + + Selector.prototype.regexp = function(prefix) { + var name; + if (this.regexpCache[prefix]) { + return this.regexpCache[prefix]; + } + name = prefix ? this.prefixed(prefix) : this.name; + return this.regexpCache[prefix] = RegExp("(^|[^:\"'=])" + (utils.escapeRegexp(name)), "gi"); + }; + + Selector.prototype.possible = function() { + return Browsers.prefixes(); + }; + + Selector.prototype.prefixeds = function(rule) { + var i, len, prefix, prefixeds, ref; + if (rule._autoprefixerPrefixeds) { + return rule._autoprefixerPrefixeds; + } + prefixeds = {}; + ref = this.possible(); + for (i = 0, len = ref.length; i < len; i++) { + prefix = ref[i]; + prefixeds[prefix] = this.replace(rule.selector, prefix); + } + return rule._autoprefixerPrefixeds = prefixeds; + }; + + Selector.prototype.already = function(rule, prefixeds, prefix) { + var before, index, key, prefixed, some; + index = rule.parent.index(rule) - 1; + while (index >= 0) { + before = rule.parent.nodes[index]; + if (before.type !== 'rule') { + return false; + } + some = false; + for (key in prefixeds) { + prefixed = prefixeds[key]; + if (before.selector === prefixed) { + if (prefix === key) { + return true; + } else { + some = true; + break; + } + } + } + if (!some) { + return false; + } + index -= 1; + } + return false; + }; + + Selector.prototype.replace = function(selector, prefix) { + return selector.replace(this.regexp(), '$1' + this.prefixed(prefix)); + }; + + Selector.prototype.add = function(rule, prefix) { + var cloned, prefixeds; + prefixeds = this.prefixeds(rule); + if (this.already(rule, prefixeds, prefix)) { + return; + } + cloned = this.clone(rule, { + selector: prefixeds[prefix] + }); + return rule.parent.insertBefore(rule, cloned); + }; + + Selector.prototype.old = function(prefix) { + return new OldSelector(this, prefix); + }; + + return Selector; + + })(Prefixer); + + module.exports = Selector; + +}).call(this); + +},{"./browsers":4,"./old-selector":38,"./prefixer":40,"./utils":46}],45:[function(require,module,exports){ +(function() { + var Prefixes, Supports, Value, findCondition, findDecl, list, postcss, split, utils; + + Prefixes = require('./prefixes'); + + Value = require('./value'); + + utils = require('./utils'); + + postcss = require('postcss'); + + list = require('postcss/lib/list'); + + split = /\(\s*([^\(\):]+)\s*:([^\)]+)/; + + findDecl = /\(\s*([^\(\):]+)\s*:\s*(.+)\s*\)/g; + + findCondition = /(not\s*)?\(\s*([^\(\):]+)\s*:\s*(.+?(?!\s*or\s*).+?)\s*\)*\s*\)\s*or\s*/gi; + + Supports = (function() { + function Supports(all1) { + this.all = all1; + } + + Supports.prototype.virtual = function(prop, value) { + var rule; + rule = postcss.parse('a{}').first; + rule.append({ + prop: prop, + value: value, + before: '' + }); + return rule; + }; + + Supports.prototype.prefixed = function(prop, value) { + var decl, j, k, len, len1, prefixer, ref, ref1, rule; + rule = this.virtual(prop, value); + prefixer = this.all.add[prop]; + if (prefixer != null) { + if (typeof prefixer.process === "function") { + prefixer.process(rule.first); + } + } + ref = rule.nodes; + for (j = 0, len = ref.length; j < len; j++) { + decl = ref[j]; + ref1 = this.all.values('add', prop); + for (k = 0, len1 = ref1.length; k < len1; k++) { + value = ref1[k]; + value.process(decl); + } + Value.save(this.all, decl); + } + return rule.nodes; + }; + + Supports.prototype.clean = function(params) { + return params.replace(findCondition, (function(_this) { + return function(all) { + var _, check, checker, j, len, prop, ref, ref1, ref2, unprefixed, value; + if (all.slice(0, 3).toLowerCase() === 'not') { + return all; + } + ref = all.match(split), _ = ref[0], prop = ref[1], value = ref[2]; + unprefixed = _this.all.unprefixed(prop); + if ((ref1 = _this.all.cleaner().remove[prop]) != null ? ref1.remove : void 0) { + check = new RegExp('(\\(|\\s)' + utils.escapeRegexp(unprefixed) + ':'); + if (check.test(params)) { + return ''; + } + } + ref2 = _this.all.cleaner().values('remove', unprefixed); + for (j = 0, len = ref2.length; j < len; j++) { + checker = ref2[j]; + if (checker.check(value)) { + return ''; + } + } + return all; + }; + })(this)).replace(/\(\s*\((.*)\)\s*\)/g, '($1)'); + }; + + Supports.prototype.process = function(rule) { + rule.params = this.clean(rule.params); + return rule.params = rule.params.replace(findDecl, (function(_this) { + return function(all, prop, value) { + var i, stringed; + stringed = (function() { + var j, len, ref, results; + ref = this.prefixed(prop, value); + results = []; + for (j = 0, len = ref.length; j < len; j++) { + i = ref[j]; + results.push("(" + i.prop + ": " + i.value + ")"); + } + return results; + }).call(_this); + if (stringed.length === 1) { + return stringed[0]; + } else { + return '(' + stringed.join(' or ') + ')'; + } + }; + })(this)); + }; + + return Supports; + + })(); + + module.exports = Supports; + +}).call(this); + +},{"./prefixes":41,"./utils":46,"./value":47,"postcss":107,"postcss/lib/list":102}],46:[function(require,module,exports){ +(function() { + var list; + + list = require('postcss/lib/list'); + + module.exports = { + error: function(text) { + var err; + err = new Error(text); + err.autoprefixer = true; + throw err; + }, + uniq: function(array) { + var filtered, i, j, len; + filtered = []; + for (j = 0, len = array.length; j < len; j++) { + i = array[j]; + if (filtered.indexOf(i) === -1) { + filtered.push(i); + } + } + return filtered; + }, + removeNote: function(string) { + if (string.indexOf(' ') === -1) { + return string; + } else { + return string.split(' ')[0]; + } + }, + escapeRegexp: function(string) { + return string.replace(/[.?*+\^\$\[\]\\(){}|\-]/g, '\\$&'); + }, + regexp: function(word, escape) { + if (escape == null) { + escape = true; + } + if (escape) { + word = this.escapeRegexp(word); + } + return RegExp("(^|[\\s,(])(" + word + "($|[\\s(,]))", "gi"); + }, + editList: function(value, callback) { + var changed, join, origin; + origin = list.comma(value); + changed = callback(origin, []); + if (origin === changed) { + return value; + } else { + join = value.match(/,\s*/); + join = join ? join[0] : ', '; + return changed.join(join); + } + } + }; + +}).call(this); + +},{"postcss/lib/list":102}],47:[function(require,module,exports){ +(function() { + var OldValue, Prefixer, Value, utils, vendor, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + Prefixer = require('./prefixer'); + + OldValue = require('./old-value'); + + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + + Value = (function(superClass) { + extend(Value, superClass); + + function Value() { + return Value.__super__.constructor.apply(this, arguments); + } + + Value.save = function(prefixes, decl) { + var already, cloned, prefix, prefixed, propPrefix, ref, results, rule, trimmed, value; + ref = decl._autoprefixerValues; + results = []; + for (prefix in ref) { + value = ref[prefix]; + if (value === decl.value) { + continue; + } + propPrefix = vendor.prefix(decl.prop); + if (propPrefix === prefix) { + results.push(decl.value = value); + } else if (propPrefix === '-pie-') { + continue; + } else { + prefixed = prefixes.prefixed(decl.prop, prefix); + rule = decl.parent; + if (rule.every(function(i) { + return i.prop !== prefixed; + })) { + trimmed = value.replace(/\s+/, ' '); + already = rule.some(function(i) { + return i.prop === decl.prop && i.value.replace(/\s+/, ' ') === trimmed; + }); + if (!already) { + if (value.indexOf('-webkit-filter') !== -1 && (decl.prop === 'transition' || decl.prop === 'trasition-property')) { + results.push(decl.value = value); + } else { + cloned = this.clone(decl, { + value: value + }); + results.push(decl.parent.insertBefore(decl, cloned)); + } + } else { + results.push(void 0); + } + } else { + results.push(void 0); + } + } + } + return results; + }; + + Value.prototype.check = function(decl) { + var value; + value = decl.value; + if (value.indexOf(this.name) !== -1) { + return !!value.match(this.regexp()); + } else { + return false; + } + }; + + Value.prototype.regexp = function() { + return this.regexpCache || (this.regexpCache = utils.regexp(this.name)); + }; + + Value.prototype.replace = function(string, prefix) { + return string.replace(this.regexp(), '$1' + prefix + '$2'); + }; + + Value.prototype.add = function(decl, prefix) { + var ref, value; + decl._autoprefixerValues || (decl._autoprefixerValues = {}); + value = decl._autoprefixerValues[prefix] || ((ref = decl._value) != null ? ref.raw : void 0) || decl.value; + value = this.replace(value, prefix); + if (value) { + return decl._autoprefixerValues[prefix] = value; + } + }; + + Value.prototype.old = function(prefix) { + return new OldValue(this.name, prefix + this.name); + }; + + return Value; + + })(Prefixer); + + module.exports = Value; + +}).call(this); + +},{"./old-value":39,"./prefixer":40,"./utils":46,"postcss/lib/vendor":113}],48:[function(require,module,exports){ + +},{}],49:[function(require,module,exports){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var isArray = require('is-array') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 +Buffer.poolSize = 8192 // not used by this implementation + +var kMaxLength = 0x3fffffff +var rootParent = {} + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Note: + * + * - Implementation must support adding new properties to `Uint8Array` instances. + * Firefox 4-29 lacked support, fixed in Firefox 30+. + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + * + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will + * get the Object implementation, which is slower but will work correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = (function () { + try { + var buf = new ArrayBuffer(0) + var arr = new Uint8Array(buf) + arr.foo = function () { return 42 } + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +})() + +/** + * Class: Buffer + * ============= + * + * The Buffer constructor returns instances of `Uint8Array` that are augmented + * with function properties for all the node `Buffer` API functions. We use + * `Uint8Array` so that square bracket notation works as expected -- it returns + * a single octet. + * + * By augmenting the instances, we can avoid modifying the `Uint8Array` + * prototype. + */ +function Buffer (subject, encoding) { + var self = this + if (!(self instanceof Buffer)) return new Buffer(subject, encoding) + + var type = typeof subject + var length + + if (type === 'number') { + length = +subject + } else if (type === 'string') { + length = Buffer.byteLength(subject, encoding) + } else if (type === 'object' && subject !== null) { + // assume object is array-like + if (subject.type === 'Buffer' && isArray(subject.data)) subject = subject.data + length = +subject.length + } else { + throw new TypeError('must start with number, buffer, array or string') + } + + if (length > kMaxLength) { + throw new RangeError('Attempt to allocate Buffer larger than maximum size: 0x' + + kMaxLength.toString(16) + ' bytes') + } + + if (length < 0) length = 0 + else length >>>= 0 // coerce to uint32 + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Preferred: Return an augmented `Uint8Array` instance for best performance + self = Buffer._augment(new Uint8Array(length)) // eslint-disable-line consistent-this + } else { + // Fallback: Return THIS instance of Buffer (created by `new`) + self.length = length + self._isBuffer = true + } + + var i + if (Buffer.TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') { + // Speed optimization -- use set if we're copying from a typed array + self._set(subject) + } else if (isArrayish(subject)) { + // Treat array-ish objects as a byte array + if (Buffer.isBuffer(subject)) { + for (i = 0; i < length; i++) { + self[i] = subject.readUInt8(i) + } + } else { + for (i = 0; i < length; i++) { + self[i] = ((subject[i] % 256) + 256) % 256 + } + } + } else if (type === 'string') { + self.write(subject, 0, encoding) + } else if (type === 'number' && !Buffer.TYPED_ARRAY_SUPPORT) { + for (i = 0; i < length; i++) { + self[i] = 0 + } + } + + if (length > 0 && length <= Buffer.poolSize) self.parent = rootParent + + return self +} + +function SlowBuffer (subject, encoding) { + if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) + + var buf = new Buffer(subject, encoding) + delete buf.parent + return buf +} + +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {} + if (i !== len) { + x = a[i] + y = b[i] + } + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'raw': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, totalLength) { + if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') + + if (list.length === 0) { + return new Buffer(0) + } else if (list.length === 1) { + return list[0] + } + + var i + if (totalLength === undefined) { + totalLength = 0 + for (i = 0; i < list.length; i++) { + totalLength += list[i].length + } + } + + var buf = new Buffer(totalLength) + var pos = 0 + for (i = 0; i < list.length; i++) { + var item = list[i] + item.copy(buf, pos) + pos += item.length + } + return buf +} + +Buffer.byteLength = function byteLength (str, encoding) { + var ret + str = str + '' + switch (encoding || 'utf8') { + case 'ascii': + case 'binary': + case 'raw': + ret = str.length + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = str.length * 2 + break + case 'hex': + ret = str.length >>> 1 + break + case 'utf8': + case 'utf-8': + ret = utf8ToBytes(str).length + break + case 'base64': + ret = base64ToBytes(str).length + break + default: + ret = str.length + } + return ret +} + +// pre-set for values that may exist in the future +Buffer.prototype.length = undefined +Buffer.prototype.parent = undefined + +// toString(encoding, start=0, end=buffer.length) +Buffer.prototype.toString = function toString (encoding, start, end) { + var loweredCase = false + + start = start >>> 0 + end = end === undefined || end === Infinity ? this.length : end >>> 0 + + if (!encoding) encoding = 'utf8' + if (start < 0) start = 0 + if (end > this.length) end = this.length + if (end <= start) return '' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'binary': + return binarySlice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} + +Buffer.prototype.compare = function compare (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return 0 + return Buffer.compare(this, b) +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset) { + if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff + else if (byteOffset < -0x80000000) byteOffset = -0x80000000 + byteOffset >>= 0 + + if (this.length === 0) return -1 + if (byteOffset >= this.length) return -1 + + // Negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) + + if (typeof val === 'string') { + if (val.length === 0) return -1 // special case: looking for empty string always fails + return String.prototype.indexOf.call(this, val, byteOffset) + } + if (Buffer.isBuffer(val)) { + return arrayIndexOf(this, val, byteOffset) + } + if (typeof val === 'number') { + if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { + return Uint8Array.prototype.indexOf.call(this, val, byteOffset) + } + return arrayIndexOf(this, [ val ], byteOffset) + } + + function arrayIndexOf (arr, val, byteOffset) { + var foundIndex = -1 + for (var i = 0; byteOffset + i < arr.length; i++) { + if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex + } else { + foundIndex = -1 + } + } + return -1 + } + + throw new TypeError('val must be string, number or Buffer') +} + +// `get` will be removed in Node 0.13+ +Buffer.prototype.get = function get (offset) { + console.log('.get() is deprecated. Access using array indexes instead.') + return this.readUInt8(offset) +} + +// `set` will be removed in Node 0.13+ +Buffer.prototype.set = function set (v, offset) { + console.log('.set() is deprecated. Access using array indexes instead.') + return this.writeUInt8(v, offset) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new Error('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; i++) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) throw new Error('Invalid hex string') + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + var charsWritten = blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) + return charsWritten +} + +function asciiWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length) + return charsWritten +} + +function binaryWrite (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length) + return charsWritten +} + +function utf16leWrite (buf, string, offset, length) { + var charsWritten = blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) + return charsWritten +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Support both (string, offset, length, encoding) + // and the legacy (string, encoding, offset, length) + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length + length = undefined + } + } else { // legacy + var swap = encoding + encoding = offset + offset = length + length = swap + } + + offset = Number(offset) || 0 + + if (length < 0 || offset < 0 || offset > this.length) { + throw new RangeError('attempt to write outside buffer bounds') + } + + var remaining = this.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + encoding = String(encoding || 'utf8').toLowerCase() + + var ret + switch (encoding) { + case 'hex': + ret = hexWrite(this, string, offset, length) + break + case 'utf8': + case 'utf-8': + ret = utf8Write(this, string, offset, length) + break + case 'ascii': + ret = asciiWrite(this, string, offset, length) + break + case 'binary': + ret = binaryWrite(this, string, offset, length) + break + case 'base64': + ret = base64Write(this, string, offset, length) + break + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + ret = utf16leWrite(this, string, offset, length) + break + default: + throw new TypeError('Unknown encoding: ' + encoding) + } + return ret +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + var res = '' + var tmp = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + if (buf[i] <= 0x7F) { + res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i]) + tmp = '' + } else { + tmp += '%' + buf[i].toString(16) + } + } + + return res + decodeUtf8Char(tmp) +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function binarySlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; i++) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = Buffer._augment(this.subarray(start, end)) + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; i++) { + newBuf[i] = this[i + start] + } + } + + if (newBuf.length) newBuf.parent = this.parent || this + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) >>> 0 & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) >>> 0 & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = value + return offset + 1 +} + +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = value + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = value + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = value + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt( + this, value, offset, byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1) + ) + } + + var i = 0 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt( + this, value, offset, byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1) + ) + } + + var i = byteLength - 1 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = value + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = value + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = value + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = value + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') + if (offset < 0) throw new RangeError('index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, target_start, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (target_start >= target.length) target_start = target.length + if (!target_start) target_start = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (target_start < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - target_start < end - start) { + end = target.length - target_start + start + } + + var len = end - start + + if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < len; i++) { + target[i + target_start] = this[i + start] + } + } else { + target._set(this.subarray(start, start + len), target_start) + } + + return len +} + +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill (value, start, end) { + if (!value) value = 0 + if (!start) start = 0 + if (!end) end = this.length + + if (end < start) throw new RangeError('end < start') + + // Fill 0 bytes; we're done + if (end === start) return + if (this.length === 0) return + + if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') + if (end < 0 || end > this.length) throw new RangeError('end out of bounds') + + var i + if (typeof value === 'number') { + for (i = start; i < end; i++) { + this[i] = value + } + } else { + var bytes = utf8ToBytes(value.toString()) + var len = bytes.length + for (i = start; i < end; i++) { + this[i] = bytes[i % len] + } + } + + return this +} + +/** + * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. + * Added in Node 0.12. Only available in browsers that support ArrayBuffer. + */ +Buffer.prototype.toArrayBuffer = function toArrayBuffer () { + if (typeof Uint8Array !== 'undefined') { + if (Buffer.TYPED_ARRAY_SUPPORT) { + return (new Buffer(this)).buffer + } else { + var buf = new Uint8Array(this.length) + for (var i = 0, len = buf.length; i < len; i += 1) { + buf[i] = this[i] + } + return buf.buffer + } + } else { + throw new TypeError('Buffer.toArrayBuffer not supported in this browser') + } +} + +// HELPER FUNCTIONS +// ================ + +var BP = Buffer.prototype + +/** + * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods + */ +Buffer._augment = function _augment (arr) { + arr.constructor = Buffer + arr._isBuffer = true + + // save reference to original Uint8Array set method before overwriting + arr._set = arr.set + + // deprecated, will be removed in node 0.13+ + arr.get = BP.get + arr.set = BP.set + + arr.write = BP.write + arr.toString = BP.toString + arr.toLocaleString = BP.toString + arr.toJSON = BP.toJSON + arr.equals = BP.equals + arr.compare = BP.compare + arr.indexOf = BP.indexOf + arr.copy = BP.copy + arr.slice = BP.slice + arr.readUIntLE = BP.readUIntLE + arr.readUIntBE = BP.readUIntBE + arr.readUInt8 = BP.readUInt8 + arr.readUInt16LE = BP.readUInt16LE + arr.readUInt16BE = BP.readUInt16BE + arr.readUInt32LE = BP.readUInt32LE + arr.readUInt32BE = BP.readUInt32BE + arr.readIntLE = BP.readIntLE + arr.readIntBE = BP.readIntBE + arr.readInt8 = BP.readInt8 + arr.readInt16LE = BP.readInt16LE + arr.readInt16BE = BP.readInt16BE + arr.readInt32LE = BP.readInt32LE + arr.readInt32BE = BP.readInt32BE + arr.readFloatLE = BP.readFloatLE + arr.readFloatBE = BP.readFloatBE + arr.readDoubleLE = BP.readDoubleLE + arr.readDoubleBE = BP.readDoubleBE + arr.writeUInt8 = BP.writeUInt8 + arr.writeUIntLE = BP.writeUIntLE + arr.writeUIntBE = BP.writeUIntBE + arr.writeUInt16LE = BP.writeUInt16LE + arr.writeUInt16BE = BP.writeUInt16BE + arr.writeUInt32LE = BP.writeUInt32LE + arr.writeUInt32BE = BP.writeUInt32BE + arr.writeIntLE = BP.writeIntLE + arr.writeIntBE = BP.writeIntBE + arr.writeInt8 = BP.writeInt8 + arr.writeInt16LE = BP.writeInt16LE + arr.writeInt16BE = BP.writeInt16BE + arr.writeInt32LE = BP.writeInt32LE + arr.writeInt32BE = BP.writeInt32BE + arr.writeFloatLE = BP.writeFloatLE + arr.writeFloatBE = BP.writeFloatBE + arr.writeDoubleLE = BP.writeDoubleLE + arr.writeDoubleBE = BP.writeDoubleBE + arr.fill = BP.fill + arr.inspect = BP.inspect + arr.toArrayBuffer = BP.toArrayBuffer + + return arr +} + +var INVALID_BASE64_RE = /[^+\/0-9A-z\-]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function isArrayish (subject) { + return isArray(subject) || Buffer.isBuffer(subject) || + subject && typeof subject === 'object' && + typeof subject.length === 'number' +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + var i = 0 + + for (; i < length; i++) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (leadSurrogate) { + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } else { + // valid surrogate pair + codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000 + leadSurrogate = null + } + } else { + // no lead yet + + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else { + // valid lead + leadSurrogate = codePoint + continue + } + } + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = null + } + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x200000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; i++) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; i++) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +function decodeUtf8Char (str) { + try { + return decodeURIComponent(str) + } catch (err) { + return String.fromCharCode(0xFFFD) // UTF 8 invalid char + } +} + +},{"base64-js":50,"ieee754":51,"is-array":52}],50:[function(require,module,exports){ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS || + code === PLUS_URL_SAFE) + return 62 // '+' + if (code === SLASH || + code === SLASH_URL_SAFE) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],51:[function(require,module,exports){ +exports.read = function(buffer, offset, isLE, mLen, nBytes) { + var e, m, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + nBits = -7, + i = isLE ? (nBytes - 1) : 0, + d = isLE ? -1 : 1, + s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8); + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8); + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity); + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen); +}; + +exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c, + eLen = nBytes * 8 - mLen - 1, + eMax = (1 << eLen) - 1, + eBias = eMax >> 1, + rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0), + i = isLE ? 0 : (nBytes - 1), + d = isLE ? 1 : -1, + s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8); + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8); + + buffer[offset + i - d] |= s * 128; +}; + +},{}],52:[function(require,module,exports){ + +/** + * isArray + */ + +var isArray = Array.isArray; + +/** + * toString + */ + +var str = Object.prototype.toString; + +/** + * Whether or not the given `val` + * is an array. + * + * example: + * + * isArray([]); + * // > true + * isArray(arguments); + * // > false + * isArray(''); + * // > false + * + * @param {mixed} val + * @return {bool} + */ + +module.exports = isArray || function (val) { + return !! val && '[object Array]' == str.call(val); +}; + +},{}],53:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":54}],54:[function(require,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; +var queue = []; +var draining = false; + +function drainQueue() { + if (draining) { + return; + } + draining = true; + var currentQueue; + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + var i = -1; + while (++i < len) { + currentQueue[i](); + } + len = queue.length; + } + draining = false; +} +process.nextTick = function (fun) { + queue.push(fun); + if (!draining) { + setTimeout(drainQueue, 0); + } +}; + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],55:[function(require,module,exports){ +var caniuse = require('caniuse-db/data').agents; +var path = require('path'); +var fs = require('fs'); + +var uniq = function (array) { + var filtered = []; + for ( var i = 0; i < array.length; i++ ) { + if ( filtered.indexOf(array[i]) == -1 ) filtered.push(array[i]); + } + return filtered; +}; + +normalizeVersion = function (data, version) { + if ( data.versions.indexOf(version) != -1 ) { + return version; + } else { + var alias = browserslist.versionAliases[data.name][version]; + if ( alias ) return alias; + } +}; + +// Return array of browsers by selection queries: +// +// browserslist('IE >= 10, IE 8') //=> ['ie 11', 'ie 10', 'ie 8'] +var browserslist = function (selections, opts) { + if ( typeof(opts) == 'undefined' ) opts = { }; + + if ( typeof(selections) == 'undefined' || selections === null ) { + var config = browserslist.readConfig(opts.path); + if ( config === false ) { + selections = browserslist.defaults; + } else { + selections = config; + } + } + + if ( typeof(selections) == 'string' ) { + selections = selections.split(/,\s*/); + } + + var result = []; + + var query, match, array, used; + selections.forEach(function (selection) { + if ( selection.trim() === '' ) return; + used = false; + + for ( var i in browserslist.queries ) { + query = browserslist.queries[i]; + match = selection.match(query.regexp); + if ( match ) { + array = query.select.apply(browserslist, match.slice(1)); + result = result.concat(array); + used = true; + break; + } + } + + if ( !used ) { + throw 'Unknown browser query `' + selection + '`'; + } + }); + + return uniq(result).sort(function (name1, name2) { + name1 = name1.split(' '); + name2 = name2.split(' '); + if ( name1[0] == name2[0] ) { + return parseFloat(name2[1]) - parseFloat(name1[1]); + } else { + return name1[0].localeCompare(name2[0]); + } + }); +}; + +// Will be filled by Can I Use data below +browserslist.data = { }; +browserslist.usage = { + global: { } +}; + +// Default browsers query +browserslist.defaults = [ + '> 1%', + 'last 2 versions', + 'Firefox ESR', + 'Opera 12.1' +]; + +// What browsers will be used in `last n version` query +browserslist.major = ['safari', 'opera', 'ios_saf', 'ie_mob', 'ie', + 'firefox', 'chrome']; + +// Browser names aliases +browserslist.aliases = { + fx: 'firefox', + ff: 'firefox', + ios: 'ios_saf', + explorer: 'ie', + blackberry: 'bb', + explorermobile: 'ie_mob', + operamini: 'op_mini', + operamobile: 'op_mob', + chromeandroid: 'and_chr', + firefoxandroid: 'and_ff' +}; + +// Aliases ot work with joined versions like `ios_saf 7.0-7.1` +browserslist.versionAliases = { }; + +// Get browser data by alias or case insensitive name +browserslist.byName = function (name) { + name = name.toLowerCase(); + name = browserslist.aliases[name] || name; + + var data = browserslist.data[name]; + if ( !data ) throw 'Unknown browser ' + name; + return data; +}; + +// Find config, read file and parse it +browserslist.readConfig = function (from) { + if ( from === false ) return false; + if ( !fs.readFileSync ) return false; + if ( typeof(from) == 'undefined' ) from = '.'; + + var dirs = path.resolve(from).split(path.sep); + var config, stat; + while ( dirs.length ) { + config = dirs.concat(['browserslist']).join(path.sep); + + if ( fs.existsSync(config) && fs.lstatSync(config).isFile() ) { + return browserslist.parseConfig( fs.readFileSync(config) ); + } + + dirs.pop(); + } + + return false; +}; + +// Return array of queries from config content +browserslist.parseConfig = function (string) { + return string.toString() + .replace(/#[^\n]*/g, '') + .split(/\n/) + .map(function (i) { + return i.trim(); + }) + .filter(function (i) { + return i !== ''; + }); +}; + +browserslist.queries = { + + lastVersions: { + regexp: /^last (\d+) versions?$/i, + select: function (versions) { + var selected = []; + browserslist.major.forEach(function (name) { + var data = browserslist.byName(name); + var array = data.released.slice(-versions); + + array = array.map(function (v) { + return data.name + ' ' + v; + }); + selected = selected.concat(array); + }); + return selected; + } + }, + + lastByBrowser: { + regexp: /^last (\d+) (\w+) versions?$/i, + select: function (versions, name) { + var data = browserslist.byName(name); + return data.released.slice(-versions).map(function (v) { + return data.name + ' ' + v; + }); + } + }, + + globalStatistics: { + regexp: /^> (\d+\.?\d*)%$/, + select: function (popularity) { + popularity = parseFloat(popularity); + var result = []; + + for ( var version in browserslist.usage.global ) { + if ( browserslist.usage.global[version] > popularity ) { + result.push(version); + } + } + + return result; + } + }, + + countryStatistics: { + regexp: /^> (\d+\.?\d*)% in (\w\w)$/, + select: function (popularity, country) { + popularity = parseFloat(popularity); + country = country.toUpperCase(); + var result = []; + + var usage = browserslist.usage[country]; + if ( !usage ) { + usage = { }; + var data = require('caniuse-db/region-usage-json/' + country); + for ( var i in data.data ) { + fillUsage(usage, i, data.data[i]); + } + browserslist.usage[country] = usage; + } + + for ( var version in usage ) { + if ( usage[version] > popularity ) { + result.push(version); + } + } + + return result; + } + }, + + versions: { + regexp: /^(\w+) (>=?|<=?)\s*([\d\.]+)/, + select: function (name, sign, version) { + var data = browserslist.byName(name); + version = parseFloat(version); + + var filter; + if ( sign == '>' ) { + filter = function (v) { + return parseFloat(v) > version; + }; + } else if ( sign == '>=' ) { + filter = function (v) { + return parseFloat(v) >= version; + }; + } else if ( sign == '<' ) { + filter = function (v) { + return parseFloat(v) < version; + }; + } else if ( sign == '<=' ) { + filter = function (v) { + return parseFloat(v) <= version; + }; + } + + return data.released.filter(filter).map(function (v) { + return data.name + ' ' + v; + }); + } + }, + + esr: { + regexp: /^(firefox|ff|fx) esr$/i, + select: function (versions) { + return ['firefox 31']; + } + }, + + direct: { + regexp: /^(\w+) ([\d\.]+)$/, + select: function (name, version) { + var data = browserslist.byName(name); + var alias = normalizeVersion(data, version); + if ( alias ) { + version = alias; + } else { + if ( version.indexOf('.') == -1 ) { + alias = version + '.0'; + } else if ( /\.0$/.test(version) ) { + alias = version.replace(/\.0$/, ''); + } + alias = normalizeVersion(data, alias); + if ( alias ) { + version = alias; + } else { + throw 'Unknown version ' + version + ' of ' + name; + } + } + + return [data.name + ' ' + version]; + } + } + +}; + +// Get and convert Can I Use data + +var normalize = function (versions) { + return versions.filter(function (version) { + return typeof(version) == 'string'; + }); +}; + +var fillUsage = function (result, name, data) { + for ( var i in data ) { + result[name + ' ' + i] = data[i]; + } +}; + +for ( var name in caniuse ) { + browserslist.data[name] = { + name: name, + versions: normalize(caniuse[name].versions), + released: normalize(caniuse[name].versions.slice(0, -3)) + }; + fillUsage(browserslist.usage.global, name, caniuse[name].usage_global); + + browserslist.versionAliases[name] = { }; + for ( var i = 0; i < caniuse[name].versions.length; i++ ) { + if ( !caniuse[name].versions[i] ) continue; + var full = caniuse[name].versions[i]; + + if ( full.indexOf('-') != -1 ) { + var interval = full.split('-'); + for ( var j = 0; j < interval.length; j++ ) { + browserslist.versionAliases[name][ interval[j] ] = full; + } + } + } +} + +module.exports = browserslist; + +},{"caniuse-db/data":56,"fs":48,"path":53}],56:[function(require,module,exports){ +module.exports={"eras":{"e-37":"37 versions back","e-36":"36 versions back","e-35":"35 versions back","e-34":"34 versions back","e-33":"33 versions back","e-32":"32 versions back","e-31":"31 versions back","e-30":"30 versions back","e-29":"29 versions back","e-28":"28 versions back","e-27":"27 versions back","e-26":"26 versions back","e-25":"25 versions back","e-24":"24 versions back","e-23":"23 versions back","e-22":"22 versions back","e-21":"21 versions back","e-20":"20 versions back","e-19":"19 versions back","e-18":"18 versions back","e-17":"17 versions back","e-16":"16 versions back","e-15":"15 versions back","e-14":"14 versions back","e-13":"13 versions back","e-12":"12 versions back","e-11":"11 versions back","e-10":"10 versions back","e-9":"9 versions back","e-8":"8 versions back","e-7":"7 versions back","e-6":"6 versions back","e-5":"5 versions back","e-4":"4 versions back","e-3":"3 versions back","e-2":"2 versions back","e-1":"Previous version","e0":"Current","e1":"Near future","e2":"Farther future","e3":"3 versions ahead"},"agents":{"ie":{"browser":"IE","abbr":"IE","prefix":"ms","type":"desktop","usage_global":{"5.5":0.009298,"6":0.0894521,"7":0.0894521,"8":2.33264,"9":1.63766,"10":1.29362,"11":7.98188,"TP":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.5","6","7","8","9","10","11","TP",null,null]},"firefox":{"browser":"Firefox","abbr":"FF","prefix":"moz","type":"desktop","usage_global":{"2":0.019968,"3":0.039936,"3.5":0.013312,"3.6":0.079872,"4":0.019968,"5":0.013312,"6":0.019968,"7":0.006656,"8":0.03328,"9":0.013312,"10":0.026624,"11":0.026624,"12":0.046592,"13":0.019968,"14":0.019968,"15":0.03328,"16":0.046592,"17":0.03328,"18":0.03328,"19":0.03328,"20":0.03328,"21":0.079872,"22":0.026624,"23":0.046592,"24":0.059904,"25":0.059904,"26":0.046592,"27":0.139776,"28":0.039936,"29":0.06656,"30":0.086528,"31":0.69888,"32":0.425984,"33":0.139776,"34":0.206336,"35":1.53088,"36":7.70099,"37":0.279552,"38":0.013312,"39":0.006656,"40":0},"versions":["2","3","3.5","3.6","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40"]},"chrome":{"browser":"Chrome","abbr":"Chr.","prefix":"webkit","type":"desktop","usage_global":{"4":0.013312,"5":0.013312,"6":0.013312,"7":0.006656,"8":0.006656,"9":0.006656,"10":0.026624,"11":0.073216,"12":0.026624,"13":0.019968,"14":0.013312,"15":0.019968,"16":0.013312,"17":0.013312,"18":0.026624,"19":0.019968,"20":0.013312,"21":0.073216,"22":0.079872,"23":0.026624,"24":0.073216,"25":0.026624,"26":0.046592,"27":0.059904,"28":0.053248,"29":0.06656,"30":0.119808,"31":0.772096,"32":0.06656,"33":0.19968,"34":0.212992,"35":0.43264,"36":0.851968,"37":1.03168,"38":0.539136,"39":1.21805,"40":10.4832,"41":17.3056,"42":0.146432,"43":0.126464,"44":0},"versions":["4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44"]},"safari":{"browser":"Safari","abbr":"Saf.","prefix":"webkit","type":"desktop","usage_global":{"3.1":0,"3.2":0.008692,"4":0.053248,"5":0.119808,"5.1":0.339456,"6":0.06656,"6.1":0.339456,"7":0.672256,"7.1":0.79872,"8":1.45101},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.1","3.2","4","5","5.1","6","6.1","7","7.1","8",null,null,null]},"opera":{"browser":"Opera","abbr":"Op.","prefix":"webkit","type":"desktop","usage_global":{"9":0.0082,"9.5-9.6":0.00685,"10.0-10.1":0.019968,"10.5":0.008392,"10.6":0.007296,"11":0.014996,"11.1":0.006656,"11.5":0.019968,"11.6":0.013312,"12":0.019968,"12.1":0.212992,"15":0.00685,"16":0.00685,"17":0.00685,"18":0.006656,"19":0.006597,"20":0.013312,"21":0.006597,"22":0.006597,"23":0.013434,"24":0.006702,"25":0.013312,"26":0.019968,"27":0.246272,"28":0.472576,"29":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9","9.5-9.6","10.0-10.1","10.5","10.6","11","11.1","11.5","11.6","12","12.1","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29",null],"prefix_exceptions":{"9":"o","9.5-9.6":"o","10.0-10.1":"o","10.5":"o","10.6":"o","11":"o","11.1":"o","11.5":"o","11.6":"o","12":"o","12.1":"o"}},"ios_saf":{"browser":"iOS Safari","abbr":"iOS","prefix":"webkit","type":"mobile","usage_global":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0312766,"6.0-6.1":0.0789023,"7.0-7.1":1.24751,"8":0.250213,"8.1-8.3":5.46132},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.2","4.0-4.1","4.2-4.3","5.0-5.1","6.0-6.1","7.0-7.1","8","8.1-8.3",null,null,null]},"op_mini":{"browser":"Opera Mini","abbr":"O.Mini","prefix":"o","type":"mobile","usage_global":{"5.0-8.0":2.79094},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.0-8.0",null,null,null]},"android":{"browser":"Android Browser","abbr":"And.","prefix":"webkit","type":"mobile","usage_global":{"2.1":0,"2.2":0,"2.3":0.106746,"3":0,"4":0.236609,"4.1":0.817933,"4.2-4.3":1.41761,"4.4":2.42932,"4.4.3-4.4.4":1.17149,"40":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"2.1","2.2","2.3","3","4","4.1","4.2-4.3","4.4","4.4.3-4.4.4","40",null,null,null]},"op_mob":{"browser":"Opera Mobile","abbr":"O.Mob","prefix":"o","type":"mobile","usage_global":{"10":0,"11":0,"11.1":0,"11.5":0,"12":0.000711976,"12.1":0.0028479,"24":0.0177994},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11","11.1","11.5","12","12.1","24",null,null,null],"prefix_exceptions":{"24":"webkit"}},"bb":{"browser":"Blackberry Browser","abbr":"BB","prefix":"webkit","type":"mobile","usage_global":{"7":0.082764,"10":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"7","10",null,null,null]},"and_chr":{"browser":"Chrome for Android","abbr":"Chr/And.","prefix":"webkit","type":"mobile","usage_global":{"41":10.9596},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"41",null,null,null]},"and_ff":{"browser":"Firefox for Android","abbr":"FF/And.","prefix":"moz","type":"mobile","usage_global":{"36":0.13376},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"36",null,null,null]},"ie_mob":{"browser":"IE Mobile","abbr":"IE.Mob","prefix":"ms","type":"mobile","usage_global":{"10":0.202602,"11":0.50967},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11",null,null,null]},"and_uc":{"browser":"UC Browser for Android","abbr":"UC","prefix":"webkit","type":"mobile","usage_global":{"9.9":4.25022},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9.9",null,null,null],"prefix_exceptions":{"9.9":"webkit"}}},"statuses":{"rec":"W3C Recommendation","pr":"W3C Proposed Recommendation","cr":"W3C Candidate Recommendation","wd":"W3C Working Draft","ls":"WHATWG Living Standard","other":"Other","unoff":"Unofficial / Note"},"cats":{"CSS":["CSS","CSS2","CSS3"],"HTML5":["Canvas","HTML5"],"JS API":["JS API"],"Other":["PNG","Other","DOM"],"SVG":["SVG"]},"updated":1429298471,"data":{"png-alpha":{"title":"PNG alpha transparency","description":"Semi-transparent areas in PNG files","spec":"http://www.w3.org/TR/PNG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Portable_Network_Graphics","title":"Wikipedia"},{"url":"http://dillerdesign.com/experiment/DD_belatedPNG/","title":"Workaround for IE6"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1-8.3":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","40":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs.","notes_by_num":{},"usage_perc_y":97.16,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"apng":{"title":"Animated PNG (APNG)","description":"Like animated GIFs, but allowing 24-bit colors and alpha transparency","spec":"https://wiki.mozilla.org/APNG_Specification","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/APNG","title":"Wikipedia"},{"url":"https://github.com/davidmz/apng-canvas","title":"Polyfill using canvas"},{"url":"https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp","title":"Chrome extension providing support"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","TP":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n","43":"n","44":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1-8.3":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","40":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"41":"n"},"and_ff":{"36":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Where support for APNG is missing, only the first frame is displayed","notes_by_num":{},"usage_perc_y":19.88,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"video":{"title":"Video element","description":"Method of playing videos on webpages (without requiring a plug-in).","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element","status":"ls","links":[{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://webmproject.org","title":"WebM format information"},{"url":"http://camendesign.co.uk/code/video_for_everybody","title":"Video for Everybody"},{"url":"http://diveintohtml5.info/video.html","title":"Video on the Web - includes info on Android support"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/video","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y","TP":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y","43":"y","44":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1-8.3":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","40":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"41":"y"},"and_ff":{"36":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Different browsers have support for different video formats, see sub-features for details. \r\n\r\nThe Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.","notes_by_num":{},"usage_perc_y":91.84,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"