├── .gitignore ├── header.jpg ├── playground ├── thirdparty │ ├── javascripts │ │ ├── main.js │ │ ├── headsmart.min.js │ │ └── modernizr.js │ ├── images │ │ ├── hr.jpg │ │ ├── hr-2x.jpg │ │ ├── bg-ramp.jpg │ │ ├── chevron.png │ │ ├── octocat.png │ │ ├── shield.png │ │ ├── site-2.png │ │ ├── chevron-2x.png │ │ ├── octocat-2x.png │ │ ├── footer-ramp.jpg │ │ ├── fork-sprite.png │ │ ├── blockquote-gfx.png │ │ ├── download-sprite.png │ │ ├── shield-fallback.png │ │ ├── blockquote-gfx-2x.png │ │ ├── ribbon-tail-sprite.png │ │ ├── download-fallback-bg.png │ │ ├── ribbon-tail-sprite-2x.png │ │ ├── small-ribbon-tail-sprite.png │ │ └── small-ribbon-tail-sprite-2x.png │ ├── fonts │ │ ├── opensans-bold-webfont.eot │ │ ├── opensans-bold-webfont.ttf │ │ ├── opensans-bold-webfont.woff │ │ ├── opensans-italic-webfont.eot │ │ ├── opensans-italic-webfont.ttf │ │ ├── opensans-italic-webfont.woff │ │ ├── opensans-regular-webfont.eot │ │ ├── opensans-regular-webfont.ttf │ │ ├── opensans-extrabold-webfont.eot │ │ ├── opensans-extrabold-webfont.ttf │ │ ├── opensans-regular-webfont.woff │ │ ├── opensans-bolditalic-webfont.eot │ │ ├── opensans-bolditalic-webfont.ttf │ │ ├── opensans-bolditalic-webfont.woff │ │ ├── opensans-extrabold-webfont.woff │ │ ├── opensans-bold-webfont.svg │ │ └── opensans-extrabold-webfont.svg │ └── stylesheets │ │ ├── core.css │ │ ├── print.css │ │ ├── github-light.css │ │ ├── non-screen.css │ │ ├── mobile.css │ │ └── screen.css ├── favicon.ico ├── demo.js ├── index.js └── index.html ├── input.js ├── loader.js ├── nodemon.json ├── start.js ├── test ├── package.json ├── webpack.config.js ├── index.js └── dist │ └── test.js ├── package.json ├── webpack.config.js ├── readme.md ├── .history └── playground │ ├── index_20190315121258.html │ └── index_20190315121252.html ├── index.js └── dist └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .history -------------------------------------------------------------------------------- /header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/header.jpg -------------------------------------------------------------------------------- /playground/thirdparty/javascripts/main.js: -------------------------------------------------------------------------------- 1 | console.log('This would be the main JS file.'); 2 | -------------------------------------------------------------------------------- /playground/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/favicon.ico -------------------------------------------------------------------------------- /input.js: -------------------------------------------------------------------------------- 1 | function a() { 2 | console.log("123"); 3 | 4 | function b() { 5 | console.log("456"); 6 | } 7 | } -------------------------------------------------------------------------------- /loader.js: -------------------------------------------------------------------------------- 1 | const messup=require("./index.js"); 2 | module.exports = function(source) { 3 | return messup(source,this.query); 4 | }; -------------------------------------------------------------------------------- /playground/thirdparty/images/hr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/hr.jpg -------------------------------------------------------------------------------- /playground/thirdparty/images/hr-2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/hr-2x.jpg -------------------------------------------------------------------------------- /playground/thirdparty/images/bg-ramp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/bg-ramp.jpg -------------------------------------------------------------------------------- /playground/thirdparty/images/chevron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/chevron.png -------------------------------------------------------------------------------- /playground/thirdparty/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/octocat.png -------------------------------------------------------------------------------- /playground/thirdparty/images/shield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/shield.png -------------------------------------------------------------------------------- /playground/thirdparty/images/site-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/site-2.png -------------------------------------------------------------------------------- /playground/thirdparty/images/chevron-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/chevron-2x.png -------------------------------------------------------------------------------- /playground/thirdparty/images/octocat-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/octocat-2x.png -------------------------------------------------------------------------------- /playground/thirdparty/images/footer-ramp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/footer-ramp.jpg -------------------------------------------------------------------------------- /playground/thirdparty/images/fork-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/fork-sprite.png -------------------------------------------------------------------------------- /playground/thirdparty/images/blockquote-gfx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/blockquote-gfx.png -------------------------------------------------------------------------------- /playground/thirdparty/images/download-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/download-sprite.png -------------------------------------------------------------------------------- /playground/thirdparty/images/shield-fallback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/shield-fallback.png -------------------------------------------------------------------------------- /playground/thirdparty/images/blockquote-gfx-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/blockquote-gfx-2x.png -------------------------------------------------------------------------------- /playground/thirdparty/images/ribbon-tail-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/ribbon-tail-sprite.png -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-bold-webfont.eot -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-bold-webfont.ttf -------------------------------------------------------------------------------- /playground/thirdparty/images/download-fallback-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/download-fallback-bg.png -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-bold-webfont.woff -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-italic-webfont.eot -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-italic-webfont.ttf -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-italic-webfont.woff -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-regular-webfont.eot -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-regular-webfont.ttf -------------------------------------------------------------------------------- /playground/thirdparty/images/ribbon-tail-sprite-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/ribbon-tail-sprite-2x.png -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-extrabold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-extrabold-webfont.eot -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-extrabold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-extrabold-webfont.ttf -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-regular-webfont.woff -------------------------------------------------------------------------------- /playground/thirdparty/images/small-ribbon-tail-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/small-ribbon-tail-sprite.png -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-bolditalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-bolditalic-webfont.eot -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-bolditalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-bolditalic-webfont.ttf -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-bolditalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-bolditalic-webfont.woff -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-extrabold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/fonts/opensans-extrabold-webfont.woff -------------------------------------------------------------------------------- /playground/thirdparty/images/small-ribbon-tail-sprite-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blackmiaool/decent-messup/HEAD/playground/thirdparty/images/small-ribbon-tail-sprite-2x.png -------------------------------------------------------------------------------- /playground/thirdparty/stylesheets/core.css: -------------------------------------------------------------------------------- 1 | @import url("screen.css"); 2 | @import url("non-screen.css") handheld; 3 | @import url("non-screen.css") only screen and (max-device-width:640px); -------------------------------------------------------------------------------- /nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "verbose": false, 3 | "watch": ["*.js"], 4 | "ext": "ts js json", 5 | "ignore": ["node_modules/*"], 6 | "exec": "set DEBUG=app:*,-not_this & node --inspect start.js" 7 | } 8 | -------------------------------------------------------------------------------- /start.js: -------------------------------------------------------------------------------- 1 | const messUp = require("./index.js"); 2 | const fs = require("fs"); 3 | 4 | const code = fs.readFileSync("./input.js").toString(); 5 | console.log("before:"); 6 | console.log(code); 7 | console.log("after:"); 8 | console.log(messUp(code, { 9 | headCnt: 13 10 | })); 11 | -------------------------------------------------------------------------------- /test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test", 3 | "version": "1.0.1", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "decent-messup": "^1.0.7", 13 | "gulp": "^3.9.1", 14 | "webpack": "^2.6.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /playground/thirdparty/javascripts/headsmart.min.js: -------------------------------------------------------------------------------- 1 | (function(a){a.fn.headsmart=function(){var c=a(this);d();function d(){var e=[],g="";if(b("h1")){e.push("h1")}if(b("h2")){e.push("h2")}if(b("h3")){e.push("h3")}if(b("h4")){e.push("h4")}if(b("h5")){e.push("h5")}if(b("h6")){e.push("h6")}for(var f=0;f0)?true:false}}})(jQuery); -------------------------------------------------------------------------------- /playground/thirdparty/stylesheets/print.css: -------------------------------------------------------------------------------- 1 | * { 2 | background: none !important; 3 | color: #333 !important; 4 | } 5 | 6 | h1,h2,h3,h4,h5,h6 { 7 | color: #7c334f !important; 8 | } 9 | 10 | a { 11 | color: #417090 !important; 12 | } 13 | 14 | #main_content > .header-level-1:first-child, 15 | #main_content > .header-level-2:first-child, 16 | #main_content > .header-level-3:first-child, 17 | #main_content > .header-level-4:first-child, 18 | #main_content > .header-level-5:first-child, 19 | #main_content > .header-level-6:first-child { 20 | margin-top: 10px !important; 21 | } 22 | 23 | #forkme_banner, 24 | #downloads, 25 | .left-tail, 26 | .right-tail 27 | { 28 | display: none !important; 29 | 30 | } 31 | 32 | .ribbon-inner,.ribbon-outer { 33 | border: 0 !important; 34 | } 35 | -------------------------------------------------------------------------------- /test/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const webpack = require('webpack'); 3 | 4 | const test={ 5 | entry: { 6 | 'decent-messup': ['./index.js'], 7 | }, 8 | module: { 9 | loaders: [{ 10 | test: /\.jsx?$/, 11 | loader: 'decent-messup/loader', 12 | query: { 13 | headCnt:10, 14 | es6:true 15 | }, 16 | },{ 17 | test: /\.jsx?$/, 18 | loader: 'babel-loader', 19 | query: { 20 | presets: ['latest', 'stage-0'], 21 | plugins: [] 22 | }, 23 | }] 24 | }, 25 | devtool: false, 26 | watch: false, 27 | output: { 28 | path: path.resolve(path.join(__dirname, 'dist')), 29 | filename: "test.js", 30 | }, 31 | }; 32 | module.exports = [test]; 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "decent-messup", 3 | "version": "1.1.0", 4 | "description": "Mess up js in a different way.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/blackmiaool/decent-messup.git" 12 | }, 13 | "author": "blackmiaool", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/blackmiaool/decent-messup/issues" 17 | }, 18 | "homepage": "https://github.com/blackmiaool/decent-messup#readme", 19 | "dependencies": { 20 | "@babel/generator": "^7.4.4", 21 | "@babel/parser": "^7.4.4", 22 | "@babel/template": "^7.4.4", 23 | "@babel/traverse": "^7.4.4", 24 | "@babel/types": "^7.4.4", 25 | "babylon": "^6.17.0" 26 | }, 27 | "devDependencies": { 28 | "babel-core": "^6.25.0", 29 | "babel-loader": "^7.0.0", 30 | "babel-preset-latest": "^6.24.1", 31 | "babel-preset-stage-0": "^6.24.1", 32 | "webpack": "^2.6.1" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const webpack = require('webpack'); 3 | const config = { 4 | entry: { 5 | 'decent-messup': ['./index.js'], 6 | }, 7 | module: { 8 | loaders: [{ 9 | test: /\.jsx?$/, 10 | loader: 'babel-loader', 11 | query: { 12 | presets: ['latest', 'stage-0'], 13 | plugins: [] 14 | }, 15 | }] 16 | }, 17 | devtool: false, 18 | watch: true, 19 | output: { 20 | path: path.resolve(path.join(__dirname, 'dist')), 21 | filename: "[name].js", 22 | libraryTarget: 'umd', 23 | library:'decentMessUp' 24 | }, 25 | }; 26 | const test={ 27 | entry: { 28 | 'decent-messup': ['./playground/demo.js'], 29 | }, 30 | module: { 31 | loaders: [{ 32 | test: /\.jsx?$/, 33 | loader: './loader', 34 | query: { 35 | headCnt:10, 36 | es6:true 37 | }, 38 | },{ 39 | test: /\.jsx?$/, 40 | loader: 'babel-loader', 41 | query: { 42 | presets: ['latest', 'stage-0'], 43 | plugins: [] 44 | }, 45 | }] 46 | }, 47 | devtool: false, 48 | watch: false, 49 | output: { 50 | path: path.resolve(path.join(__dirname, 'dist')), 51 | filename: "test.js", 52 | }, 53 | }; 54 | module.exports = [config,test]; 55 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | const inputWindow = $("#input")[0].contentWindow; 2 | const outputWindow = $("#output")[0].contentWindow; 3 | const $errorOutput = $("#error-output"); 4 | let setOutputReady; 5 | const outputReady = new Promise(function (resolve, reject) { 6 | setOutputReady = resolve; 7 | }); 8 | const demoReady = new Promise(function (resolve, reject) { 9 | $.ajax({ 10 | url: "demo.js", 11 | type: "GET", 12 | dataType: "text", 13 | success: resolve 14 | }); 15 | }); 16 | window.addEventListener('message', function ({ 17 | source, 18 | data: { 19 | action, 20 | data 21 | } 22 | }) { 23 | switch (action) { 24 | case "ready": 25 | if (source === outputWindow) { 26 | setOutputReady(); 27 | } else if (source === inputWindow) { 28 | demoReady.then(function (demoCode) { 29 | inputWindow.postMessage({ 30 | action: "setValue", 31 | data: demoCode 32 | }, "*"); 33 | }); 34 | 35 | } 36 | break; 37 | case "change": 38 | if (source === inputWindow) { 39 | let code; 40 | $errorOutput.empty(); 41 | try { 42 | code = decentMessUp(data); 43 | } catch (e) { 44 | $errorOutput.text(e.message); 45 | outputReady.then(function () { 46 | outputWindow.postMessage({ 47 | action: "setValue", 48 | data: "" 49 | }, "*"); 50 | }); 51 | return; 52 | } 53 | 54 | outputReady.then(function () { 55 | outputWindow.postMessage({ 56 | action: "setValue", 57 | data: code 58 | }, "*"); 59 | }); 60 | } 61 | break; 62 | } 63 | 64 | }); -------------------------------------------------------------------------------- /playground/demo.js: -------------------------------------------------------------------------------- 1 | const inputWindow = $("#input")[0].contentWindow; 2 | const outputWindow = $("#output")[0].contentWindow; 3 | const $errorOutput = $("#error-output"); 4 | let setOutputReady; 5 | const outputReady = new Promise(function (resolve, reject) { 6 | setOutputReady = resolve; 7 | }); 8 | const demoReady = new Promise(function (resolve, reject) { 9 | $.ajax({ 10 | url: "demo.js", 11 | type: "GET", 12 | dataType: "text", 13 | success: resolve 14 | }); 15 | }); 16 | window.addEventListener('message', function ({ 17 | source, 18 | data: { 19 | action, 20 | data 21 | } 22 | }) { 23 | switch (action) { 24 | case "ready": 25 | if (source === outputWindow) { 26 | setOutputReady(); 27 | } else if (source === inputWindow) { 28 | demoReady.then(function (demoCode) { 29 | inputWindow.postMessage({ 30 | action: "setValue", 31 | data: demoCode 32 | }, "*"); 33 | }); 34 | 35 | } 36 | break; 37 | case "change": 38 | if (source === inputWindow) { 39 | let code; 40 | $errorOutput.empty(); 41 | try { 42 | code = decentMessUp(data); 43 | } catch (e) { 44 | $errorOutput.text(e.message); 45 | outputReady.then(function () { 46 | outputWindow.postMessage({ 47 | action: "setValue", 48 | data: "" 49 | }, "*"); 50 | }); 51 | return; 52 | } 53 | 54 | outputReady.then(function () { 55 | outputWindow.postMessage({ 56 | action: "setValue", 57 | data: code 58 | }, "*"); 59 | }); 60 | } 61 | break; 62 | } 63 | 64 | }); -------------------------------------------------------------------------------- /playground/index.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | const inputWindow = $("#input")[0].contentWindow; 3 | const outputWindow = $("#output")[0].contentWindow; 4 | const $errorOutput = $("#error-output"); 5 | let setOutputReady; 6 | const outputReady = new Promise(function (resolve, reject) { 7 | setOutputReady = resolve; 8 | }); 9 | const demoReady = new Promise(function (resolve, reject) { 10 | $.ajax({ 11 | url:"demo.js", 12 | type:"GET", 13 | dataType:"text", 14 | success:resolve 15 | }); 16 | }); 17 | window.addEventListener('message', function ({ 18 | source, 19 | data: { 20 | action, 21 | data 22 | } 23 | }) { 24 | switch (action) { 25 | case "ready": 26 | if (source === outputWindow) { 27 | setOutputReady(); 28 | } else if (source === inputWindow) { 29 | demoReady.then(function (demoCode) { 30 | inputWindow.postMessage({ 31 | action: "setValue", 32 | data: demoCode 33 | }, "*"); 34 | }); 35 | 36 | } 37 | break; 38 | case "change": 39 | if (source === inputWindow) { 40 | let code; 41 | $errorOutput.empty(); 42 | try { 43 | code = decentMessUp(data,{es6:true}); 44 | } catch (e) { 45 | $errorOutput.text(e.message); 46 | outputReady.then(function () { 47 | outputWindow.postMessage({ 48 | action: "setValue", 49 | data: "" 50 | }, "*"); 51 | }); 52 | return; 53 | } 54 | 55 | outputReady.then(function () { 56 | outputWindow.postMessage({ 57 | action: "setValue", 58 | data: code 59 | }, "*"); 60 | }); 61 | } 62 | break; 63 | } 64 | 65 | }); 66 | 67 | }); 68 | -------------------------------------------------------------------------------- /playground/thirdparty/stylesheets/github-light.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2014 GitHub Inc. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | 16 | */ 17 | 18 | .pl-c /* comment */ { 19 | color: #969896; 20 | } 21 | 22 | .pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */, 23 | .pl-s .pl-v /* string variable */ { 24 | color: #0086b3; 25 | } 26 | 27 | .pl-e /* entity */, 28 | .pl-en /* entity.name */ { 29 | color: #795da3; 30 | } 31 | 32 | .pl-s .pl-s1 /* string source */, 33 | .pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ { 34 | color: #333; 35 | } 36 | 37 | .pl-ent /* entity.name.tag */ { 38 | color: #63a35c; 39 | } 40 | 41 | .pl-k /* keyword, storage, storage.type */ { 42 | color: #a71d5d; 43 | } 44 | 45 | .pl-pds /* punctuation.definition.string, string.regexp.character-class */, 46 | .pl-s /* string */, 47 | .pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */, 48 | .pl-sr /* string.regexp */, 49 | .pl-sr .pl-cce /* string.regexp constant.character.escape */, 50 | .pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */, 51 | .pl-sr .pl-sre /* string.regexp source.ruby.embedded */ { 52 | color: #183691; 53 | } 54 | 55 | .pl-v /* variable */ { 56 | color: #ed6a43; 57 | } 58 | 59 | .pl-id /* invalid.deprecated */ { 60 | color: #b52a1d; 61 | } 62 | 63 | .pl-ii /* invalid.illegal */ { 64 | background-color: #b52a1d; 65 | color: #f8f8f8; 66 | } 67 | 68 | .pl-sr .pl-cce /* string.regexp constant.character.escape */ { 69 | color: #63a35c; 70 | font-weight: bold; 71 | } 72 | 73 | .pl-ml /* markup.list */ { 74 | color: #693a17; 75 | } 76 | 77 | .pl-mh /* markup.heading */, 78 | .pl-mh .pl-en /* markup.heading entity.name */, 79 | .pl-ms /* meta.separator */ { 80 | color: #1d3e81; 81 | font-weight: bold; 82 | } 83 | 84 | .pl-mq /* markup.quote */ { 85 | color: #008080; 86 | } 87 | 88 | .pl-mi /* markup.italic */ { 89 | color: #333; 90 | font-style: italic; 91 | } 92 | 93 | .pl-mb /* markup.bold */ { 94 | color: #333; 95 | font-weight: bold; 96 | } 97 | 98 | .pl-md /* markup.deleted, meta.diff.header.from-file */ { 99 | background-color: #ffecec; 100 | color: #bd2c00; 101 | } 102 | 103 | .pl-mi1 /* markup.inserted, meta.diff.header.to-file */ { 104 | background-color: #eaffea; 105 | color: #55a532; 106 | } 107 | 108 | .pl-mdr /* meta.diff.range */ { 109 | color: #795da3; 110 | font-weight: bold; 111 | } 112 | 113 | .pl-mo /* meta.output */ { 114 | color: #1d3e81; 115 | } 116 | 117 | -------------------------------------------------------------------------------- /playground/thirdparty/stylesheets/non-screen.css: -------------------------------------------------------------------------------- 1 | a#forkme_banner { 2 | display: none; 3 | } 4 | 5 | div.shell { 6 | width: 640px; 7 | } 8 | 9 | 10 | header { 11 | max-width:640px; 12 | margin: 0; 13 | top: 51px; 14 | } 15 | 16 | header span.ribbon-inner { 17 | border: 8px solid #7c334f; 18 | padding: 6px; 19 | } 20 | 21 | header span.left-tail, header span.right-tail { 22 | width: 19px; 23 | height: 10px; 24 | background: transparent url(../images/ribbon-tail-sprite-2x.png) 0 0 no-repeat; 25 | bottom: -10px; 26 | } 27 | 28 | header span.left-tail { 29 | left: 0; 30 | } 31 | 32 | header span.right-tail { 33 | background-position: -19px 0; 34 | right: 0; 35 | } 36 | 37 | header h1 { 38 | font-size: 2em; 39 | } 40 | 41 | section#downloads { 42 | height: 171px; 43 | width: 602px; 44 | margin: 51px auto -250px; 45 | background: transparent url(../images/shield.png) center 0 no-repeat; 46 | } 47 | 48 | section#downloads a { 49 | display: none; 50 | } 51 | 52 | span.banner-fix { 53 | background: transparent url(../images/shield-fallback.png) center top no-repeat; 54 | height: 31px; 55 | width: 640px; 56 | top: 20px; 57 | } 58 | 59 | section#main_content { 60 | padding: 20px 40px 0; 61 | } 62 | 63 | footer { 64 | max-width:640px; 65 | background: none; 66 | } 67 | 68 | footer span.left-tail, footer span.right-tail { 69 | width: 23px; 70 | height: 126px; 71 | background: transparent url(../images/small-ribbon-tail-sprite-2x.png) 0 0 no-repeat; 72 | top: -126px; 73 | } 74 | 75 | footer span.left-tail { 76 | left: 0; 77 | } 78 | 79 | footer span.right-tail { 80 | background-position: -23px 0; 81 | right: 0; 82 | } 83 | 84 | footer p { 85 | font-size: .6em; 86 | } 87 | 88 | footer span.ribbon-inner { 89 | border: 8px solid #7c334f; 90 | padding: 6px; 91 | } 92 | 93 | footer span.ribbon-inner p { 94 | font-size: 22px; 95 | height: auto; 96 | line-height: 1.1; 97 | padding: 20px 0px 10px; 98 | } 99 | 100 | footer span.ribbon-inner a { 101 | font-size: 38px; 102 | display: block; 103 | bottom: 0; 104 | padding-bottom: 10px; 105 | } 106 | 107 | footer span.octocat { 108 | background: transparent url(../images/octocat-2x.png) 0 0 no-repeat; 109 | width: 60px; 110 | height: 60px; 111 | margin: 20px auto 0; 112 | } 113 | 114 | body { 115 | font: normal normal 30px/1.5 Georgia, Palatino,” Palatino Linotype”, Times, “Times New Roman”, serif; 116 | } 117 | 118 | ul li { 119 | padding-left: 20px; 120 | background: transparent url(../images/chevron-2x.png) left 15px no-repeat; 121 | } 122 | 123 | table { 124 | border-bottom: 4px solid #bdb6ad; 125 | } 126 | 127 | th { 128 | border-width: 0 4px 4px 0; 129 | } 130 | 131 | td { 132 | border-width: 0 4px 4px 0; 133 | } 134 | 135 | pre { 136 | border-bottom: 4px solid #bdb6ad; 137 | } 138 | 139 | img { 140 | -webkit-box-shadow: 0px 4px 0px #bdb6ad; 141 | -moz-box-shadow: 0px 4px 0px #bdb6ad; 142 | box-shadow: 0px 4px 0px #bdb6ad; 143 | border: 4px solid #fff6e9; 144 | max-width: 556px; 145 | } 146 | 147 | blockquote { 148 | background: transparent url('../images/blockquote-gfx-2x.png') 0 8px no-repeat; 149 | } 150 | 151 | hr { 152 | height: 42px; 153 | background: transparent url('../images/hr-2x.jpg') center center repeat-x; 154 | } -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | # Decent Mess Up 6 | 7 | Want to understand my js? No way! 8 | 9 | 10 | ### Demo 11 | 12 | [Playground](http://blackmiaool.com/decent-messup/playground/) 13 | 14 | **Input:** 15 | 16 | ```js 17 | 18 | const str="abc"; 19 | function func(){ 20 | const obj={}; 21 | obj.property={ 22 | key1:'value1', 23 | 'key2':str, 24 | ['key'+3]:'value3' 25 | } 26 | console.log(obj); 27 | } 28 | func(); 29 | 30 | ``` 31 | **Output:** 32 | 33 | ```js 34 | const _a = 'vcb3aotkleyr21ugp'; 35 | const _b = 'bcktuovea2grp1y3l'; 36 | const _c = 'yecauop3rkbltg2v1'; 37 | const str = _a[4] + _b[0] + _a[1]; 38 | function func() { 39 | const _a2 = _b; 40 | const _b2 = _a; 41 | const _c2 = _c; 42 | 43 | const obj = {}; 44 | obj[_a2[12] + _c2[8] + _c2[5] + _a2[12] + _b2[9] + _c2[8] + _b2[6] + _a2[14]] = { 45 | [_b2[7] + _b2[9] + _a2[14] + _b2[13]]: _c2[15] + _c2[3] + _a2[16] + _b2[14] + _c2[1] + _a2[13], 46 | [_a2[2] + _c2[1] + _b2[10] + _a2[9]]: str, 47 | [_c2[9] + _a2[7] + _a2[14] + 3]: _c2[15] + _c2[3] + _c2[11] + _b2[14] + _a2[7] + _a2[15] 48 | }; 49 | console[_a2[16] + _c2[5] + _b2[15]](obj); 50 | } 51 | func(); 52 | 53 | ``` 54 | 55 | ### Install 56 | 57 | ```bash 58 | npm i -D decent-messup 59 | ``` 60 | 61 | ### Usage 62 | Use it before babel and uglifying. Using it with uglifier is highly recommended. 63 | 64 | ```js 65 | const messup=require('decent-messup'); 66 | messup(yourcode[,options]); 67 | ``` 68 | 69 | #### Use with Webpack 70 | 71 | ```js 72 | module: { 73 | loaders: [{ 74 | test: /\.jsx?$/, 75 | loader: 'decent-messup/loader', 76 | query: { 77 | headCnt:5, 78 | es6:true 79 | }, 80 | },{ 81 | test: /\.jsx?$/, 82 | loader: 'babel-loader', 83 | query: { 84 | presets: ['latest', 'stage-0'], 85 | plugins: [] 86 | }, 87 | }] 88 | }, 89 | ``` 90 | 91 | #### Use with Gulp 92 | 93 | ```js 94 | const transform = require('gulp-transform'); 95 | const messup = require('decent-messup'); 96 | gulp.task('quadruple', function() { 97 | return gulp.src('src/*.js') 98 | .pipe(transform('utf8', code => messup(code,{headCnt:5,es6:true}))) 99 | .pipe(gulp.dest('dist')); 100 | }); 101 | ``` 102 | 103 | ### Options 104 | 105 | The default options are: 106 | 107 | ```js 108 | { 109 | headCnt: 3, 110 | es6:false 111 | } 112 | ``` 113 | 114 | #### `headCnt` 115 | The count of string variables in each function scope. 116 | 117 | headCnt=1: 118 | 119 | ```js 120 | var _a = '31olg2'; 121 | console[_a[3] + _a[2] + _a[4]](_a[1] + _a[5] + _a[0]); 122 | ``` 123 | 124 | headCnt=3: 125 | 126 | ```js 127 | var _a = 'l1go23'; 128 | var _b = '13gol2'; 129 | var _c = '23og1l'; 130 | console[_b[4] + _b[3] + _b[2]](_b[0] + _b[5] + _b[1]); 131 | ``` 132 | 133 | #### `es6` 134 | Indicates if it should output es6 code. 135 | 136 | Input: 137 | ```js 138 | a={b:'c'} 139 | ``` 140 | 141 | es6=false: 142 | 143 | ```js 144 | var _a = 'c'; 145 | var _b = 'c'; 146 | var _c = 'c'; 147 | a = { b: _c[0] }; 148 | ``` 149 | 150 | es6=true: 151 | 152 | ```js 153 | const _a = 'cb'; 154 | const _b = 'bc'; 155 | const _c = 'bc'; 156 | a = { [_b[0]]: _b[1] }; 157 | ``` 158 | 159 | -------------------------------------------------------------------------------- /playground/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 23 | decent-messup 24 | 25 | 40 | 41 | 42 | 43 | View on GitHub 44 |
45 | 46 |
47 | 48 | 49 |

Decent-Mess-up

50 |

Mess up js code in a different way

51 |
52 | 53 | 54 |
55 |
56 | 57 |
58 | 59 | download .ZIPdownload .TGZ 60 | 61 |
62 | 63 | 64 | 65 | 66 | 67 |
68 | 69 |

70 | Here It Is

71 | 72 |
73 |

Input

74 | 75 |
76 |

Output

77 | 78 |
79 |
80 | 81 | 92 | 93 |
94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /.history/playground/index_20190315121258.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 23 | decent-messup 24 | 25 | 40 | 41 | 42 | 43 | View on GitHub 44 |
45 | 46 |
47 | 48 | 49 |

Decent-Mess-up

50 |

Mess up js code in a different way

51 |
52 | 53 | 54 |
55 |
56 | 57 |
58 | 59 | download .ZIPdownload .TGZ 60 | 61 |
62 | 63 | 64 | 65 | 66 | 67 |
68 | 69 |

70 | Here It Is

71 | 72 |
73 |

Input

74 | 75 |
76 |

Output

77 | 78 |
79 |
80 | 81 | 92 | 93 |
94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /.history/playground/index_20190315121252.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 23 | decent-messup 24 | 25 | 40 | 41 | 42 | 43 | View on GitHub 44 |
45 | 46 |
47 | 48 | 49 |

Decent-Mess-up

50 |

Mess up js code in a different way

51 |
52 | 53 | 54 |
55 |
56 | 57 |
58 | 59 | download .ZIPdownload .TGZ 60 | 61 |
62 | 63 | 64 | 65 | 66 | 67 |
68 | 69 |

70 | Here It Is

71 | 72 |
73 |

Input

74 | 75 |
76 |

Output

77 | 78 |
79 |
80 | 81 | 92 | 93 |
94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const babelParser = require("@babel/parser"); 2 | const { 3 | default: generate 4 | } = require("@babel/generator"); 5 | const { 6 | default: traverse 7 | } = require("@babel/traverse"); 8 | const {default:template} = require("@babel/template"); 9 | const t = require("@babel/types"); 10 | 11 | 12 | function messUp(code, opt) { 13 | if (!opt || typeof opt !== "object") { 14 | opt = {}; 15 | } 16 | 17 | const { 18 | headCnt = 3, 19 | es6 = false, 20 | } = opt; 21 | 22 | const ast = babelParser.parse(code, { 23 | sourceType: 'module' 24 | }); 25 | // console.log(JSON.parse(JSON.stringify(ast))); 26 | const alphabet = "abcdefghijklmnopqrstuvwxyz"; 27 | const declarWord = es6 ? 'const' : 'var'; 28 | 29 | function shuffle(array) { 30 | var currentIndex = array.length, 31 | temporaryValue, randomIndex; 32 | 33 | while (0 !== currentIndex) { 34 | randomIndex = Math.floor(Math.random() * currentIndex); 35 | currentIndex -= 1; 36 | temporaryValue = array[currentIndex]; 37 | array[currentIndex] = array[randomIndex]; 38 | array[randomIndex] = temporaryValue; 39 | } 40 | 41 | return array; 42 | } 43 | 44 | function getRandomIndex() { 45 | return Math.floor(Math.random() * headCnt); 46 | } 47 | const headerArr = []; 48 | //step1 stringify keys 49 | traverse(ast, { 50 | MemberExpression: { 51 | enter(path) { 52 | 53 | if (t.isIdentifier(path.node.property) && !path.node.computed) { 54 | path.set("computed", true); 55 | path.get("property").replaceWith(t.stringLiteral(path.node.property.name)) 56 | } else if (t.isMemberExpression(path) && path.node.property && path.node.property.type === "StringLiteral") { 57 | 58 | } 59 | } 60 | } 61 | }); 62 | if (es6) { 63 | traverse(ast, { 64 | ObjectProperty: { 65 | enter(path) { 66 | if (path.node.computed) { 67 | return; 68 | } 69 | path.node.computed = true; 70 | const key = path.node.key; 71 | if (key.type === "StringLiteral") {} else if (key.type === "Identifier") { 72 | key.type = "StringLiteral"; 73 | key.value = key.name; 74 | } 75 | } 76 | }, 77 | 78 | }); 79 | } 80 | 81 | //step2 get charset 82 | const charset = {}; 83 | 84 | function addString(str) { 85 | str.split("").forEach(function (v) { 86 | charset[v] = true; 87 | }); 88 | } 89 | traverse(ast, { 90 | StringLiteral(path) { 91 | addString(path.node.value); 92 | } 93 | }); 94 | let charsetArr = []; 95 | for (const i in charset) { 96 | charsetArr.push(i); 97 | } 98 | for (let i = 0; i < headCnt; i++) { 99 | headerArr.push({ 100 | value: shuffle(charsetArr).join("") 101 | }); 102 | } 103 | traverse(ast, { 104 | Program: { 105 | enter(path) { 106 | let tpl = ''; 107 | const decentMap = {} 108 | headerArr.forEach(function (v, i) { 109 | let code = v.value; 110 | code = code.replace(/\\/g, "\\\\"); 111 | code = code.replace(/\n/g, "\\n"); 112 | code = code.replace(/'/g, "\\'"); 113 | const char = alphabet[i % alphabet.length]; 114 | const name = path.scope.generateUidIdentifier(char).name; 115 | v.name = name; 116 | decentMap[name] = name; 117 | tpl += `${declarWord} ${name}='${code}';`; 118 | }); 119 | path.unshiftContainer('body', template(tpl)({})); 120 | 121 | path.node.decentMap = decentMap; 122 | } 123 | }, 124 | }); 125 | //step3 add declaration 126 | const functionDeclarationAndExpression = { 127 | enter(path) { 128 | let tpl = ''; 129 | shuffle(headerArr); 130 | const decentMap = {} 131 | headerArr.forEach(function (v, i) { 132 | const char = alphabet[i % alphabet.length]; 133 | const name = path.scope.generateUidIdentifier(char).name; 134 | tpl += `${declarWord} ${name}=${v.name};`; 135 | decentMap[v.name] = name; 136 | }); 137 | path.get("body").unshiftContainer('body', template(tpl)({})); 138 | path.node.decentMap = decentMap; 139 | 140 | } 141 | }; 142 | traverse(ast, { 143 | FunctionDeclaration: functionDeclarationAndExpression, 144 | FunctionExpression: functionDeclarationAndExpression 145 | }); 146 | 147 | //step4 handle string 148 | 149 | let skipCnt = headCnt; 150 | traverse(ast, { 151 | StringLiteral: { 152 | enter(path) { 153 | if (path.parent.type === "ObjectProperty" && path.key === 'key' && !es6) { 154 | return; 155 | } 156 | if (path.parent.type === "ImportDeclaration") {//not in import 157 | return; 158 | } 159 | if (path.parent.type === "CallExpression" && path.parent.callee.name === 'require') {//not in require 160 | return; 161 | } 162 | const parent = path.findParent((path) => path.isFunctionDeclaration() || path.isProgram()) 163 | const text = path.node.value; 164 | 165 | 166 | if (!text) { 167 | return; 168 | } 169 | 170 | if (skipCnt) { 171 | skipCnt--; 172 | return; 173 | } 174 | 175 | const decentMap = parent.node.decentMap; 176 | 177 | const arr = text.split("").map(function (ch) { 178 | const randomIndex = getRandomIndex(); 179 | let name = headerArr[randomIndex].name; 180 | name = decentMap[name]; 181 | let index = headerArr[randomIndex].value.indexOf(ch); 182 | return `${name}[${index}]`; 183 | }); 184 | path.replaceWith(template("(" + arr.join("+") + ")")({})); 185 | } 186 | }, 187 | 188 | }); 189 | 190 | return generate(ast, {}, code).code; 191 | } 192 | module.exports = messUp; -------------------------------------------------------------------------------- /playground/thirdparty/javascripts/modernizr.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.5.2 (Custom Build) | MIT & BSD 2 | * Build: http://www.modernizr.com/download/#-fontface-borderradius-boxshadow-textshadow-cssgradients-shiv-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a)if(j[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.substr(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.5.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k=b.createElement("div"),l=b.body,m=l?l:b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),k.appendChild(j);return f=["­",""].join(""),k.id=h,m.innerHTML+=f,m.appendChild(k),l||g.appendChild(m),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e});var G=function(a,c){var d=a.join(""),f=c.length;w(d,function(a,c){var d=b.styleSheets[b.styleSheets.length-1],g=d?d.cssRules&&d.cssRules[0]?d.cssRules[0].cssText:d.cssText||"":"",h=a.childNodes,i={};while(f--)i[h[f].id]=h[f];e.fontface=/src/i.test(g)&&g.indexOf(c.split(" ")[0])===0},f,c)}(['@font-face {font-family:"font";src:url("https://")}'],["fontface"]);q.borderradius=function(){return F("borderRadius")},q.boxshadow=function(){return F("boxShadow")},q.textshadow=function(){return b.createElement("div").style.textShadow===""},q.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return z((a+"-webkit- ".split(" ").join(b+a)+m.join(c+a)).slice(0,-a.length)),C(j.backgroundImage,"gradient")},q.fontface=function(){return e.fontface};for(var H in q)y(q,H)&&(v=H.toLowerCase(),e[v]=q[H](),t.push((e[v]?"":"no-")+v));return z(""),i=k=null,function(a,b){function g(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function h(){var a=k.elements;return typeof a=="string"?a.split(" "):a}function i(a){function m(){var a=j.cloneNode(!1);return k.shivMethods?(i(a),a):a}function n(a){var b=(c[a]||(c[a]=e(a))).cloneNode(!1);return k.shivMethods&&!d.test(a)?j.appendChild(b):b}var b,c={},e=a.createElement,f=a.createDocumentFragment,g=h(),j=f(),l=g.length;while(l--)b=g[l],c[b]=e(b),j.createElement(b);a.createElement=n,a.createDocumentFragment=m}function j(a){var b;return a.documentShived?a:(k.shivCSS&&!e&&(b=!!g(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),k.shivMethods&&!f&&(b=!i(a)),b&&(a.documentShived=b),a)}var c=a.html5||{},d=/^<|^(?:button|iframe|input|script|textarea)$/i,e,f;(function(){var c,d=b.createElement("a"),g=a.getComputedStyle,h=b.documentElement,i=b.body||(c=h.insertBefore(b.createElement("body"),h.firstChild));i.insertBefore(d,i.firstChild),d.hidden=!0,d.innerHTML="",e=(d.currentStyle||g(d,null)).display=="none",f=d.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}(),i.removeChild(d),c&&h.removeChild(c)})();var k={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:j};a.html5=k,j(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=!!b.attachEvent,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f .header-level-1:first-child, 461 | #main_content > .header-level-2:first-child, 462 | #main_content > .header-level-3:first-child, 463 | #main_content > .header-level-4:first-child, 464 | #main_content > .header-level-5:first-child, 465 | #main_content > .header-level-6:first-child { 466 | margin-top: 0; 467 | } 468 | 469 | .header-level-1 { 470 | font-size: 1.85em; 471 | border-bottom: .2em double #d3ccc1; 472 | color: #7c334f; 473 | text-align: center; 474 | font-style: italic; 475 | margin: 1.1em 0 .38em; 476 | line-height: 1.2; 477 | padding-bottom: 10px 478 | } 479 | 480 | .header-level-2 { 481 | font-size: 1.58em; 482 | color: #7c334f; 483 | margin: .95em 0 .5em; 484 | border-bottom: .1em solid #D3CCC1; 485 | line-height: 1.2; 486 | padding-bottom: 10px 487 | } 488 | 489 | .header-level-3 { 490 | margin: 20px 0 10px; 491 | font-size: 1.45em; 492 | } 493 | 494 | .header-level-4 { 495 | margin: .6em 0; 496 | font-size: 1.2em; 497 | color: #cd596b; 498 | } 499 | 500 | .header-level-5 { 501 | margin: .7em 0; 502 | font-size: 1em; 503 | color: #8b786f; 504 | } 505 | 506 | .header-level-6 { 507 | margin: .8em 0; 508 | font-size: .85em; 509 | font-style: italic; 510 | } -------------------------------------------------------------------------------- /playground/thirdparty/stylesheets/screen.css: -------------------------------------------------------------------------------- 1 | /* Generated by Font Squirrel (http://www.fontsquirrel.com) on February 9, 2012 */ 2 | 3 | 4 | @font-face { 5 | font-family: 'Open Sans'; 6 | src: url('../fonts/opensans-regular-webfont.eot'); 7 | src: url('../fonts/opensans-regular-webfont.eot?#iefix') format('embedded-opentype'), 8 | url('../fonts/opensans-regular-webfont.woff') format('woff'), 9 | url('../fonts/opensans-regular-webfont.ttf') format('truetype'), 10 | url('../fonts/opensans-regular-webfont.svg#OpenSansRegular') format('svg'); 11 | font-weight: normal; 12 | font-style: normal; 13 | } 14 | 15 | @font-face { 16 | font-family: 'Open Sans'; 17 | src: url('../fonts/opensans-italic-webfont.eot'); 18 | src: url('../fonts/opensans-italic-webfont.eot?#iefix') format('embedded-opentype'), 19 | url('../fonts/opensans-italic-webfont.woff') format('woff'), 20 | url('../fonts/opensans-italic-webfont.ttf') format('truetype'), 21 | url('../fonts/opensans-italic-webfont.svg#OpenSansItalic') format('svg'); 22 | font-weight: normal; 23 | font-style: italic; 24 | } 25 | 26 | @font-face { 27 | font-family: 'Open Sans'; 28 | src: url('../fonts/opensans-bold-webfont.eot'); 29 | src: url('../fonts/opensans-bold-webfont.eot?#iefix') format('embedded-opentype'), 30 | url('../fonts/opensans-bold-webfont.woff') format('woff'), 31 | url('../fonts/opensans-bold-webfont.ttf') format('truetype'), 32 | url('../fonts/opensans-bold-webfont.svg#OpenSansBold') format('svg'); 33 | font-weight: bold; 34 | font-style: normal; 35 | } 36 | 37 | @font-face { 38 | font-family: 'Open Sans'; 39 | src: url('../fonts/opensans-bolditalic-webfont.eot'); 40 | src: url('../fonts/opensans-bolditalic-webfont.eot?#iefix') format('embedded-opentype'), 41 | url('../fonts/opensans-bolditalic-webfont.woff') format('woff'), 42 | url('../fonts/opensans-bolditalic-webfont.ttf') format('truetype'), 43 | url('../fonts/opensans-bolditalic-webfont.svg#OpenSansBoldItalic') format('svg'); 44 | font-weight: bold; 45 | font-style: italic; 46 | } 47 | 48 | @font-face { 49 | font-family: 'Open Sans'; 50 | src: url('../fonts/opensans-extrabold-webfont.eot'); 51 | src: url('../fonts/opensans-extrabold-webfont.eot?#iefix') format('embedded-opentype'), 52 | url('../fonts/opensans-extrabold-webfont.woff') format('woff'), 53 | url('../fonts/opensans-extrabold-webfont.ttf') format('truetype'), 54 | url('../fonts/opensans-extrabold-webfont.svg#OpenSansExtrabold') format('svg'); 55 | font-weight: 800; 56 | font-style: normal; 57 | } 58 | 59 | /* http://meyerweb.com/eric/tools/css/reset/ 60 | v2.0 | 20110126 61 | License: none (public domain) 62 | */ 63 | 64 | html, body, div, span, applet, object, iframe, 65 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 66 | a, abbr, acronym, address, big, cite, code, 67 | del, dfn, em, img, ins, kbd, q, s, samp, 68 | small, strike, strong, sub, sup, tt, var, 69 | b, u, i, center, 70 | dl, dt, dd, ol, ul, li, 71 | fieldset, form, label, legend, 72 | table, caption, tbody, tfoot, thead, tr, th, td, 73 | article, aside, canvas, details, embed, 74 | figure, figcaption, footer, header, hgroup, 75 | menu, nav, output, ruby, section, summary, 76 | time, mark, audio, video { 77 | margin: 0; 78 | padding: 0; 79 | border: 0; 80 | font-size: 100%; 81 | font: inherit; 82 | vertical-align: baseline; 83 | } 84 | /* HTML5 display-role reset for older browsers */ 85 | article, aside, details, figcaption, figure, 86 | footer, header, hgroup, menu, nav, section { 87 | display: block; 88 | } 89 | body { 90 | line-height: 1; 91 | } 92 | ol, ul { 93 | list-style: none; 94 | } 95 | blockquote, q { 96 | quotes: none; 97 | } 98 | blockquote:before, blockquote:after, 99 | q:before, q:after { 100 | content: ''; 101 | content: none; 102 | } 103 | table { 104 | border-collapse: collapse; 105 | border-spacing: 0; 106 | } 107 | 108 | header, footer, section { 109 | display: block; 110 | position: relative; 111 | } 112 | 113 | /* STYLES */ 114 | 115 | div.shell { 116 | display: block; 117 | width: 900px; 118 | margin: 0 auto; 119 | } 120 | 121 | a#forkme_banner { 122 | position: absolute; 123 | top: 0; 124 | left: 0; 125 | width: 138px; 126 | height: 138px; 127 | display: block; 128 | background: transparent url(../images/fork-sprite.png) 0 0 no-repeat; 129 | text-indent: -9000px; 130 | z-index: 3; 131 | } 132 | 133 | a#forkme_banner:hover { 134 | background-position: 0 -138px; 135 | } 136 | 137 | /* header */ 138 | 139 | header { 140 | position: relative; 141 | z-index: 2; 142 | margin: 0 auto; 143 | max-width: 600px; 144 | top: 38px; 145 | } 146 | 147 | header span.ribbon-inner { 148 | position: relative; 149 | display: block; 150 | background-color: #cd596b; 151 | border: 4px solid #7c334f; 152 | padding: 2px; 153 | z-index: 1; 154 | } 155 | 156 | header span.left-tail, header span.right-tail { 157 | position: relative; 158 | display: block; 159 | width: 56px; 160 | height: 105px; 161 | background: transparent url(../images/ribbon-tail-sprite.png) 0 0 no-repeat; 162 | position: absolute; 163 | bottom: -37px; 164 | z-index: 0; 165 | } 166 | 167 | header span.left-tail { 168 | background-position: 0 0; 169 | left: -31px; 170 | } 171 | 172 | header span.right-tail { 173 | background-position: -56px 0; 174 | right: -31px; 175 | } 176 | 177 | header h1 { 178 | background-color: #7c334f; 179 | font-size: 2.5em; 180 | font-weight: 800; 181 | font-style: normal; 182 | text-transform: uppercase; 183 | color: #ece4d8; 184 | text-align: center; 185 | line-height:1; 186 | padding: 14px 20px 0; 187 | } 188 | 189 | header h2 { 190 | background-color: #7c334f; 191 | font: bold italic .85em/1.5 Georgia, Times, “Times New Roman”, serif; 192 | color: #e69b95; 193 | padding-bottom: 14px; 194 | margin-top: -3px; 195 | text-align: center; 196 | } 197 | 198 | section#downloads, 199 | div#no-downloads { 200 | position: relative; 201 | display: block; 202 | height: 197px; 203 | width: 550px; 204 | padding-bottom: 150px; 205 | margin: -80px auto -150px; 206 | z-index: 1; 207 | background: transparent url(../images/bg-ramp.jpg) center 171px no-repeat; 208 | } 209 | 210 | div#no-downloads span.inner { 211 | display: block; 212 | position: relative; 213 | height: 197px; 214 | width: 550px; 215 | background: transparent url(../images/download-sprite.png) 0 0 no-repeat; 216 | } 217 | 218 | section#downloads a { 219 | display: block; 220 | position: relative; 221 | height: 67px; 222 | width: 275px; 223 | padding-top: 130px; 224 | background: transparent url(../images/download-sprite.png) 0 0 no-repeat; 225 | text-align: center; 226 | line-height: 1; 227 | color: #fff; 228 | font-family: 'Open Sans', Myriad, Calibri, sans-serif; 229 | font-weight: 800; 230 | font-size: 1.3em; 231 | } 232 | 233 | section#downloads a:hover { 234 | text-decoration: none; 235 | } 236 | 237 | section#downloads a em { 238 | font: bold italic 12px/1 Georgia, Times, “Times New Roman”, serif; 239 | color: #83b7da; 240 | display: block; 241 | } 242 | 243 | section#downloads a.zip { 244 | float: left; 245 | background-position: 0 0; 246 | } 247 | 248 | section#downloads a.tgz { 249 | float: right; 250 | background-position: -275px 0; 251 | } 252 | 253 | section#downloads a.zip:hover { 254 | background-position: 0 -197px; 255 | } 256 | 257 | section#downloads a.tgz:hover { 258 | background-position: -275px -197px; 259 | } 260 | 261 | span.banner-fix { 262 | 263 | background: transparent url(../images/download-fallback-bg.png) center top no-repeat; 264 | display: block; 265 | height: 19px; 266 | position: absolute; 267 | width: 670px; 268 | top: 19px; 269 | display: none; 270 | } 271 | 272 | section#main_content { 273 | z-index: 2; 274 | padding: 20px 82px 0; 275 | min-height:185px; 276 | } 277 | 278 | /* footer */ 279 | 280 | footer { 281 | background: transparent url(../images/footer-ramp.jpg) center -1px no-repeat; 282 | padding-top: 104px; 283 | margin: -94px auto 40px; 284 | max-width: 560px; 285 | text-align: center; 286 | } 287 | 288 | footer span.ribbon-outer { 289 | display: block; 290 | position: relative; 291 | border-bottom: 2px solid #bdb6ad; 292 | } 293 | 294 | footer span.ribbon-inner { 295 | position: relative; 296 | display: block; 297 | background-color: #cd596b; 298 | border: 2px solid #7c334f; 299 | padding: 1px; 300 | z-index: 1; 301 | } 302 | 303 | footer p { 304 | font-family: 'Open Sans', Myriad, Calibri, sans-serif; 305 | font-weight: bold; 306 | font-size: .8em; 307 | color: #8b786f; 308 | } 309 | 310 | footer a { 311 | color: #cd596b; 312 | } 313 | 314 | footer span.ribbon-inner p { 315 | background-color: #7c334f; 316 | margin: 0; 317 | color: #e69b95; 318 | font: bold italic 12px/1 Georgia, Times, “Times New Roman”, serif; 319 | padding-bottom:4px; 320 | } 321 | 322 | footer span.ribbon-inner a { 323 | position: relative; 324 | bottom: -1px; 325 | color: #7eb0d2; 326 | font-family: 'Open Sans', Myriad, Calibri, sans-serif; 327 | text-transform: uppercase; 328 | font-style: normal; 329 | font-weight: 800; 330 | font-size: 1.2em; 331 | } 332 | 333 | footer span.ribbon-inner a:hover { 334 | color: #7eb0d2; 335 | } 336 | 337 | footer span.left-tail, footer span.right-tail { 338 | position: relative; 339 | display: block; 340 | width: 18px; 341 | height: 29px; 342 | background: transparent url(../images/small-ribbon-tail-sprite.png) 0 0 no-repeat; 343 | position: absolute; 344 | bottom: 5px; 345 | z-index: 0; 346 | } 347 | 348 | footer span.left-tail { 349 | background-position: 0 0; 350 | left: -11px; 351 | } 352 | 353 | footer span.right-tail { 354 | background-position: -18px 0; 355 | right: -11px; 356 | } 357 | 358 | footer span.octocat { 359 | background: transparent url(../images/octocat.png) 0 0 no-repeat; 360 | display: block; 361 | width: 30px; 362 | height: 30px; 363 | margin: 0 auto; 364 | } 365 | 366 | /* content */ 367 | 368 | body { 369 | background: #ece4d8; 370 | font: normal normal 15px/1.5 Georgia, Palatino,” Palatino Linotype”, Times, “Times New Roman”, serif; 371 | color: #544943; 372 | -webkit-font-smoothing: antialiased; 373 | } 374 | 375 | a, a:hover { 376 | color: #417090; 377 | } 378 | 379 | a { 380 | text-decoration: none; 381 | } 382 | 383 | a:hover { 384 | text-decoration: underline; 385 | } 386 | 387 | h1,h2,h3,h4,h5,h6 { 388 | font-family: 'Open Sans', Myriad, Calibri, sans-serif; 389 | font-weight: bold; 390 | } 391 | 392 | p { 393 | margin: .7em 0; 394 | } 395 | 396 | strong { 397 | font-weight: bold; 398 | } 399 | 400 | em { 401 | font-style: italic; 402 | } 403 | 404 | ol { 405 | margin: .7em 0; 406 | list-style-type: decimal; 407 | padding-left: 1.35em; 408 | } 409 | 410 | ul { 411 | margin: .7em 0; 412 | padding-left: 1.35em; 413 | } 414 | 415 | ul li { 416 | padding-left: 10px; 417 | background: transparent url(../images/chevron.png) left 6px no-repeat; 418 | } 419 | 420 | blockquote { 421 | font-family: 'Open Sans', Myriad, Calibri, sans-serif; 422 | margin: 20px 0; 423 | color: #8b786f; 424 | padding-left: 1.35em; 425 | background: transparent url('../images/blockquote-gfx.png') 0 4px no-repeat; 426 | } 427 | 428 | img { 429 | -webkit-box-shadow: 0px 2px 0px #bdb6ad; 430 | -moz-box-shadow: 0px 2px 0px #bdb6ad; 431 | box-shadow: 0px 2px 0px #bdb6ad; 432 | border: 2px solid #fff6e9; 433 | max-width: 502px; 434 | } 435 | 436 | hr { 437 | border: none; 438 | outline: none; 439 | height: 18px; 440 | background: transparent url('../images/hr.jpg') center center repeat-x; 441 | margin: 0 0 20px; 442 | } 443 | 444 | code { 445 | background: #fff6e9; 446 | font: normal normal .8em/1.7 "Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace; 447 | padding: 0 5px 1px; 448 | } 449 | 450 | pre { 451 | margin: 10px 0 20px; 452 | padding: .7em; 453 | background: #fff6e9; 454 | border-bottom: 2px solid #bdb6ad; 455 | font: normal normal .9em/1.7 "Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace; 456 | overflow: auto; 457 | } 458 | 459 | pre code { 460 | padding: 0; 461 | } 462 | 463 | table { 464 | background: #fff6e9; 465 | display: table; 466 | width: 100%; 467 | border-collapse: separate; 468 | border-bottom: 2px solid #bdb6ad; 469 | margin: 10px 0; 470 | } 471 | 472 | tr { 473 | display: table-row; 474 | } 475 | 476 | th { 477 | display: table-cell; 478 | padding: 2px 10px; 479 | border: solid #ece4d8; 480 | border-width: 0 2px 2px 0; 481 | color: #cd596b; 482 | font-family: 'Open Sans', Myriad, Calibri, sans-serif; 483 | font-weight: bold; 484 | font-size: .85em; 485 | } 486 | 487 | td { 488 | display: table-cell; 489 | padding: 0 .7em; 490 | border: solid #ece4d8; 491 | border-width: 0 2px 2px 0; 492 | } 493 | 494 | td:last-child, th:last-child { 495 | border-right: none; 496 | } 497 | 498 | tr:last-child td { 499 | border-bottom: none; 500 | } 501 | 502 | dl { 503 | margin: .7em 0 20px; 504 | } 505 | 506 | dt { 507 | font-family: 'Open Sans', Myriad, Calibri, sans-serif; 508 | font-weight: bold; 509 | } 510 | 511 | dd { 512 | padding-left: 1.35em; 513 | } 514 | 515 | dd p:first-child { 516 | margin-top: 0; 517 | } 518 | 519 | /* Content based headers */ 520 | 521 | #main_content > .header-level-1:first-child, 522 | #main_content > .header-level-2:first-child, 523 | #main_content > .header-level-3:first-child, 524 | #main_content > .header-level-4:first-child, 525 | #main_content > .header-level-5:first-child, 526 | #main_content > .header-level-6:first-child { 527 | margin-top: 0; 528 | } 529 | 530 | .header-level-1 { 531 | font-size: 1.85em; 532 | border-bottom: .2em double #d3ccc1; 533 | color: #7c334f; 534 | text-align: center; 535 | font-style: italic; 536 | margin: 1.1em 0 .38em; 537 | line-height: 1.2; 538 | padding-bottom: 10px 539 | } 540 | 541 | .header-level-2 { 542 | font-size: 1.58em; 543 | color: #7c334f; 544 | margin: .95em 0 .5em; 545 | border-bottom: .1em solid #D3CCC1; 546 | line-height: 1.2; 547 | padding-bottom: 10px 548 | } 549 | 550 | .header-level-3 { 551 | margin: 20px 0 10px; 552 | font-size: 1.45em; 553 | } 554 | 555 | .header-level-4 { 556 | margin: .6em 0; 557 | font-size: 1.2em; 558 | color: #cd596b; 559 | } 560 | 561 | .header-level-5 { 562 | margin: .7em 0; 563 | font-size: 1em; 564 | color: #8b786f; 565 | } 566 | 567 | .header-level-6 { 568 | margin: .8em 0; 569 | font-size: .85em; 570 | font-style: italic; 571 | } 572 | -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-bold-webfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | This is a custom SVG webfont generated by Font Squirrel. 6 | Copyright : Digitized data copyright 20102011 Google Corporation 7 | Foundry : Ascender Corporation 8 | Foundry URL : httpwwwascendercorpcom 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 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | -------------------------------------------------------------------------------- /playground/thirdparty/fonts/opensans-extrabold-webfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | This is a custom SVG webfont generated by Font Squirrel. 6 | Copyright : Digitized data copyright 2011 Google Corporation 7 | Foundry : Ascender Corporation 8 | Foundry URL : httpwwwascendercorpcom 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 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | --------------------------------------------------------------------------------