├── .gitignore ├── LICENSE ├── README.md ├── demo.gif ├── demo ├── bower.json ├── dist │ ├── css │ │ ├── main.css │ │ └── main.min.css │ └── js │ │ ├── app.js │ │ └── app.min.js ├── gif.html ├── gulpfile.js ├── index.html ├── index.min.html ├── js │ └── app.js ├── package.json └── sass │ └── main.scss ├── example.gif └── gulp-css-gsub ├── LICENSE ├── README.md ├── gulpfile.js ├── lib ├── main.js └── replacer.js ├── package.json ├── src ├── main.js └── replacer.js └── test ├── example1 ├── file.css └── file.js ├── example2 ├── file.css └── file.js ├── example3 ├── file.css └── file.js ├── example4 ├── file.css └── file.js ├── example5 ├── file.css ├── file.js ├── result.css └── result.js ├── example6 ├── file.css ├── file.js ├── result.css └── result.js └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | demo/node_modules/ 2 | demo/bower_components/ 3 | gulp-css-gsub/node_modules/ 4 | npm-debug.log 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Ruslan P. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A gulp module to minify CSS class names. 2 | 3 | ![Demo](https://raw.githubusercontent.com/milworm/gulp-css-gsub/master/demo.gif) 4 | 5 | ## Introduction 6 | Gulp-css-gsub is a gulp module that rewrites your js and css files in order to reduce file size and obfuscate your code. 7 | 8 | ## Benefits 9 | - protection the code from stealing 10 | - allows you find unused CSS rules it your app 11 | - smaller size of your CSS file (up to 40% off) 12 | 13 | ## Installation 14 | npm install gulp-css-gsub --save-dev 15 | 16 | ## Usage 17 | ```javascript 18 | const gulp = require("gulp"); 19 | const cssGsub = require("gulp-css-gsub"); 20 | const rename = require("gulp-rename"); 21 | 22 | gulp.task("css-gsub", () => { 23 | return gulp.src("./dist/css/main.css") 24 | .pipe(cssGsub({ 25 | jsIn: "./dist/js/app.js", 26 | jsOut: "./dist/js/app.min.js", 27 | prefix: "d" 28 | })) 29 | .pipe(rename("main.min.css")) 30 | .pipe(gulp.dest("./dist/css")); 31 | }); 32 | ``` 33 | 34 | ## Examples 35 | [Examples](http://milworm.github.io/gulp-css-gsub/demo/index.min.html) 36 | 37 | ## Authors and Contributors 38 | Created in 2016 by Ruslan Prytula (@milworm). 39 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/milworm/gulp-css-gsub/2ae90f1b128597c88075bafd12d041a5232673b8/demo.gif -------------------------------------------------------------------------------- /demo/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "parsers_project", 3 | "description": "", 4 | "main": "gulpfile.js", 5 | "authors": [ 6 | "milworm " 7 | ], 8 | "license": "ISC", 9 | "moduleType": [], 10 | "homepage": "", 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "test", 16 | "tests" 17 | ], 18 | "dependencies": { 19 | "Materialize": "materialize#~0.97.5" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /demo/dist/css/main.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; } 4 | 5 | html, body, .container { 6 | width: 100%; 7 | height: 100%; } 8 | 9 | .d-root { 10 | padding: 20px; } 11 | 12 | .container { 13 | padding-top: 80px; } 14 | 15 | .d-avatar { 16 | height: 230px; } 17 | 18 | .d-title { 19 | padding-bottom: 40px !important; 20 | margin-bottom: 30px; 21 | border-bottom: 1px solid #eee; } 22 | 23 | .d-buttons { 24 | margin-top: 10px; 25 | margin-bottom: 30px; } 26 | 27 | .d-side-bar { 28 | margin-bottom: 24px; } 29 | 30 | .d-description { 31 | padding: 20px; } 32 | -------------------------------------------------------------------------------- /demo/dist/css/main.min.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | html, 7 | body, 8 | .container { 9 | width: 100%; 10 | height: 100%; 11 | } 12 | 13 | .a0 { 14 | padding: 20px; 15 | } 16 | 17 | .container { 18 | padding-top: 80px; 19 | } 20 | 21 | .a2 { 22 | height: 230px; 23 | } 24 | 25 | .a4 { 26 | padding-bottom: 40px !important; 27 | margin-bottom: 30px; 28 | border-bottom: 1px solid #eee; 29 | } 30 | 31 | .a5 { 32 | margin-top: 10px; 33 | margin-bottom: 30px; 34 | } 35 | 36 | .a1 { 37 | margin-bottom: 24px; 38 | } 39 | 40 | .a3 { 41 | padding: 20px; 42 | } -------------------------------------------------------------------------------- /demo/dist/js/app.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 4 | 5 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 6 | 7 | var Application = function () { 8 | function Application() { 9 | _classCallCheck(this, Application); 10 | 11 | this.initTpl(); 12 | } 13 | 14 | _createClass(Application, [{ 15 | key: "initTpl", 16 | value: function initTpl() { 17 | this.tpl = "\n
\n
\n
\n
\n
\n
\n

Avatar

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n
\n
\n
\n

Profile Form

\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n "; 18 | } 19 | }, { 20 | key: "render", 21 | value: function render() { 22 | document.getElementById("root").innerHTML = this.tpl; 23 | } 24 | }]); 25 | 26 | return Application; 27 | }(); 28 | 29 | new Application().render(); -------------------------------------------------------------------------------- /demo/dist/js/app.min.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var _createClass = function () { 3 | function defineProperties(target, props) { 4 | for (var i = 0; i < props.length; i++) { 5 | var descriptor = props[i]; 6 | descriptor.enumerable = descriptor.enumerable || false; 7 | descriptor.configurable = true; 8 | if ('value' in descriptor) 9 | descriptor.writable = true; 10 | Object.defineProperty(target, descriptor.key, descriptor); 11 | } 12 | } 13 | return function (Constructor, protoProps, staticProps) { 14 | if (protoProps) 15 | defineProperties(Constructor.prototype, protoProps); 16 | if (staticProps) 17 | defineProperties(Constructor, staticProps); 18 | return Constructor; 19 | }; 20 | }(); 21 | function _classCallCheck(instance, Constructor) { 22 | if (!(instance instanceof Constructor)) { 23 | throw new TypeError('Cannot call a class as a function'); 24 | } 25 | } 26 | var Application = function () { 27 | function Application() { 28 | _classCallCheck(this, Application); 29 | this.initTpl(); 30 | } 31 | _createClass(Application, [ 32 | { 33 | key: 'initTpl', 34 | value: function initTpl() { 35 | this.tpl = '\n
\n
\n
\n
\n
\n
\n

Avatar

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

\n
\n
\n
\n
\n
\n
\n

Profile Form

\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n '; 36 | } 37 | }, 38 | { 39 | key: 'render', 40 | value: function render() { 41 | document.getElementById('root').innerHTML = this.tpl; 42 | } 43 | } 44 | ]); 45 | return Application; 46 | }(); 47 | new Application().render(); -------------------------------------------------------------------------------- /demo/gif.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Example 5 | 6 | 7 | 145 | 146 | 147 |
148 |

Before

149 |
150 |
151 |

./js/main.js

152 |
153 |             
154 | function Layout() {
155 |     this.html = [
156 |         '<div class="d-container"></div>',
157 |             '<div class="d-header-container"></div>'
158 |             '<div class="d-content-container"></div>',
159 |         '</div>'
160 |     ].join("");
161 | 
162 |     document.body.innerHTML = this.html;
163 | }
164 |             
165 |         
166 | 167 |

./css/main.css

168 |
169 |             
170 | .d-container {
171 |     background: #fefefe;
172 |     display: flex;
173 |     flex-direction: column;
174 | }
175 | 
176 | .d-header-container {
177 |     height: 40px;
178 | }
179 | 
180 | .d-content-container {
181 |     flex: 1;
182 | }
183 |             
184 |         
185 |
186 |
187 |

After

188 |
189 |
190 |

./js/main.js

191 |
192 |             
193 | function Layout() {
194 |     this.html = [
195 |         '<div class="d-container"></div>',
196 |             '<div class="d-header-container"></div>'
197 |             '<div class="d-content-container"></div>',
198 |         '</div>'
199 |     ].join("");
200 | 
201 |     document.body.innerHTML = this.html;
202 | }
203 |             
204 |         
205 | 206 |

./css/main.css

207 |
208 |             
209 | .d-container {
210 |     background: #fefefe;
211 |     display: flex;
212 |     flex-direction: column;
213 | }
214 | 
215 | .d-header-container {
216 |     height: 40px;
217 | }
218 | 
219 | .d-content-container {
220 |     flex: 1;
221 | }
222 |             
223 |         
224 |
225 | 226 | 227 | 228 | 229 | 230 | 231 | 247 | 248 | 263 | 264 | -------------------------------------------------------------------------------- /demo/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require("gulp"), 2 | cssGsub = require("../gulp-css-gsub/lib/main.js"), 3 | rename = require("gulp-rename"), 4 | sass = require("gulp-sass"), 5 | watch = require("gulp-watch"); 6 | babel = require("gulp-babel"), 7 | browserSync = require("browser-sync"), 8 | reload = browserSync.reload 9 | 10 | gulp.task("serve", ["js-start", "sass-start"], function() { 11 | browserSync({ 12 | server: { 13 | baseDir: ['./'] 14 | } 15 | }); 16 | }); 17 | 18 | gulp.task("sass", function() { 19 | return gulp.src('./sass/**/*.scss') 20 | .pipe(sass({ 21 | errLogToConsole: true 22 | })) 23 | // .pipe(autoprefixer({ 24 | // browsers: ['last 2 versions'], 25 | // cascade: false 26 | // })) 27 | .pipe(gulp.dest('./dist/css')) 28 | .pipe(reload({ 29 | stream: true 30 | })); 31 | }); 32 | 33 | gulp.task("sass-start", function() { 34 | watch('./sass/**/*.scss', function() { 35 | gulp.start('sass'); 36 | }); 37 | }); 38 | 39 | gulp.task("js", function() { 40 | return gulp.src('./js/**/*.js') 41 | .pipe(babel({ 42 | presets: ['es2015'] 43 | })) 44 | .pipe(gulp.dest('./dist/js')) 45 | .pipe(reload({ 46 | stream: true 47 | })) 48 | }); 49 | 50 | gulp.task("js-start", function() { 51 | watch('./js/**/*.js', function() { 52 | gulp.start('js'); 53 | }); 54 | }); 55 | 56 | gulp.task("css-gsub", function() { 57 | return gulp.src("./dist/css/main.css") 58 | .pipe(cssGsub({ 59 | jsIn: "./dist/js/app.js", 60 | jsOut: "./dist/js/app.min.js", 61 | prefix: "d-" 62 | })) 63 | .pipe(rename("main.min.css")) 64 | .pipe(gulp.dest("./dist/css")); 65 | }); 66 | 67 | gulp.task("default", ["css-gsub"]); -------------------------------------------------------------------------------- /demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gulp-css-gsub 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /demo/index.min.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gulp-css-gsub 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /demo/js/app.js: -------------------------------------------------------------------------------- 1 | class Application { 2 | 3 | constructor() { 4 | this.initTpl() 5 | } 6 | 7 | initTpl() { 8 | this.tpl = ` 9 |
10 |
11 |
12 |
13 |
14 |
15 |

Avatar

16 |
17 |
18 |
19 |

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

20 |
21 |
22 |
23 |

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

24 |
25 |
26 |
27 |

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

28 |
29 |
30 |
31 |

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

32 |
33 |
34 |
35 |

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

36 |
37 |
38 |
39 |
40 |
41 |
42 |

Profile Form

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 | render() { 78 | document.getElementById("root").innerHTML = this.tpl 79 | } 80 | } 81 | 82 | new Application().render(); -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "parsers_project", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "gulpfile.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "babel-preset-es2015": "^6.3.13", 13 | "browser-sync": "^2.11.1", 14 | "gulp": "^3.9.0", 15 | "gulp-babel": "^6.1.1", 16 | "gulp-rename": "^1.2.2" 17 | }, 18 | "dependencies": { 19 | "gulp-sass": "^2.1.1", 20 | "gulp-watch": "^4.3.5", 21 | "through2": "^2.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /demo/sass/main.scss: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | html, body, .container { 7 | width: 100%; 8 | height: 100%; 9 | } 10 | 11 | .d-root { 12 | padding: 20px; 13 | } 14 | 15 | .container { 16 | padding-top: 80px; 17 | } 18 | 19 | .d-avatar { 20 | height: 230px; 21 | } 22 | 23 | .d-title { 24 | padding-bottom: 40px !important; 25 | margin-bottom: 30px; 26 | border-bottom: 1px solid #eee; 27 | } 28 | 29 | .d-buttons { 30 | margin-top: 10px; 31 | margin-bottom: 30px; 32 | } 33 | 34 | .d-side-bar { 35 | margin-bottom: 24px; 36 | } 37 | 38 | .d-description { 39 | padding: 20px; 40 | } -------------------------------------------------------------------------------- /example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/milworm/gulp-css-gsub/2ae90f1b128597c88075bafd12d041a5232673b8/example.gif -------------------------------------------------------------------------------- /gulp-css-gsub/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Ruslan P. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /gulp-css-gsub/README.md: -------------------------------------------------------------------------------- 1 | # A gulp module to minify CSS class names. 2 | 3 | by 60devs 4 | 5 | ![Demo](https://raw.githubusercontent.com/milworm/gulp-css-gsub/master/demo.gif) 6 | 7 | [![Support](https://supporter.60devs.com/api/b/399936c021d5111d90001de85283a4b5/gulp-css-gsub)](https://supporter.60devs.com/support/399936c021d5111d90001de85283a4b5/gulp-css-gsub) 8 | 9 | ## Introduction 10 | Gulp-css-gsub is a gulp module that rewrites your js and css files in order to reduce file size and obfuscate your code. 11 | 12 | ## Installation 13 | npm install gulp-css-gsub --save-dev 14 | 15 | ## Usage 16 | ```javascript 17 | const gulp = require("gulp"); 18 | const cssGsub = require("gulp-css-gsub"); 19 | 20 | gulp.task("css-gsub", () => { 21 | return gulp.src("./dist/css/main.css") 22 | .pipe(cssGsub({ 23 | jsIn: "./dist/js/app.js", 24 | jsOut: "./dist/js/app.min.js", 25 | prefix: "d" 26 | })) 27 | .pipe(rename("main.min.css")) 28 | .pipe(gulp.dest("./dist/css")); 29 | }); 30 | ``` 31 | 32 | ## Examples 33 | [Examples](http://milworm.github.io/gulp-css-gsub/demo/index.min.html) 34 | 35 | ## Authors and Contributors 36 | Created in 2016 by Ruslan Prytula (@milworm). 37 | -------------------------------------------------------------------------------- /gulp-css-gsub/gulpfile.js: -------------------------------------------------------------------------------- 1 | const gulp = require('gulp'); 2 | const babel = require('gulp-babel'); 3 | const watch = require('gulp-watch'); 4 | 5 | gulp.task('default', () => { 6 | return watch('src/*', () => { 7 | return gulp.src('src/*') 8 | .pipe(babel({ 9 | presets: ['es2015'] 10 | })) 11 | .pipe(gulp.dest('lib')); 12 | }); 13 | }); -------------------------------------------------------------------------------- /gulp-css-gsub/lib/main.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | var through = require("through2"), 7 | Replacer = require("./replacer.js"), 8 | File = require("vinyl"), 9 | fs = require("fs"); 10 | 11 | exports["default"] = function (config) { 12 | return through.obj(function (file, encoding, callback) { 13 | config = Object.assign({ 14 | cssIn: file.path 15 | }, config); 16 | 17 | var replacer, cssCode, jsCode; 18 | 19 | replacer = new Replacer(config); 20 | replacer.run(); 21 | 22 | cssCode = replacer.generateCss(), jsCode = replacer.generateJs(); 23 | 24 | fs.writeFileSync(config.jsOut, jsCode); 25 | 26 | file = new File({ 27 | cwd: "/", 28 | base: "/", 29 | path: "/", 30 | contents: new Buffer(cssCode) 31 | }); 32 | 33 | callback(null, file); 34 | }); 35 | }; 36 | 37 | module.exports = exports["default"]; -------------------------------------------------------------------------------- /gulp-css-gsub/lib/replacer.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | 7 | var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); 8 | 9 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 10 | 11 | var esprima = require("esprima"), 12 | css = require("css"), 13 | estraverse = require("estraverse"), 14 | escodegen = require("escodegen"), 15 | fs = require("fs"); 16 | 17 | var Replacer = (function () { 18 | 19 | /** 20 | * @param {Object} config 21 | * @param {String} config.prefix Used when CSS classes look like "{prefix}profile" "d-profile" 22 | * @param {RegExp} config.regexp Used when CSS classes use non-prefix declaration format. 23 | * @param {Function} config.replace 24 | * Function that will be called for each node from JS-AST. It's used when regexp is not enough and you need to 25 | * replace CSS classes based on some specific rules. 26 | * For example: 27 | * @example 28 | * In Sencha Touch / ExtJS, when you define a component: 29 | * Ext.define("MyComponent", { 30 | * extend: "Ext.Component", 31 | * config: { 32 | * baseCls: "d-my-component" 33 | * } 34 | * }); 35 | * ST/ExtJS will construct an additional CSS class "d-my-component-inner" using a rule #baseCls + '-inner', so 36 | * when you replace #baseCls you need to replace "d-my-component-inner" with a minimized version of #baseCls plus 37 | * '-inner' string to avoid bugs. So it could look like this: 38 | * "d-my-component" -> "a0" 39 | * "d-my-component-inner" -> "a0-inner" 40 | * 41 | * @param {Boolean} replaceAll Should be true to rename all CSS classes including those classes that couldn't be 42 | * found in js-file (probably unused). 43 | */ 44 | 45 | function Replacer(config) { 46 | _classCallCheck(this, Replacer); 47 | 48 | this.config = Object.assign({ 49 | regexp: null, 50 | prefix: null, 51 | replace: this.emptyFn, 52 | replaceAll: false 53 | }, config); 54 | 55 | this.key = "a0"; 56 | this.replacements = { 57 | count: 0, 58 | items: {} 59 | }; 60 | 61 | this.DANGER_MIN_NAMES = ["s0|s1|s2|s3|s4|s5|s6|s7|s8|s9|s10|s11|s12|", "m0|m1|m2|m3|m4|m5|m6|m7|m8|m9|m10|m11|m12|", "l0|l1|l3|l3|l4|l5|l6|l7|l8|l9|l10|l11|l12|", "fa"].join("").split("|"); 62 | } 63 | 64 | /** 65 | * a reusable empty function 66 | */ 67 | 68 | _createClass(Replacer, [{ 69 | key: "emptyFn", 70 | value: function emptyFn() {} 71 | 72 | /** 73 | * @param {String} 74 | * @return {String} 75 | */ 76 | }, { 77 | key: "succ", 78 | value: function succ(input) { 79 | var alphabet = 'abcdefghijklmnopqrstuvwxyz', 80 | length = alphabet.length, 81 | result = input, 82 | i = input.length, 83 | index; 84 | 85 | while (i >= 0) { 86 | var last = input.charAt(--i), 87 | next = '', 88 | carry = false; 89 | 90 | if (isNaN(last)) { 91 | index = alphabet.indexOf(last.toLowerCase()); 92 | 93 | if (index === -1) { 94 | next = last; 95 | carry = true; 96 | } else { 97 | var isUpperCase = last === last.toUpperCase(); 98 | next = alphabet.charAt((index + 1) % length); 99 | if (isUpperCase) { 100 | next = next.toUpperCase(); 101 | } 102 | 103 | carry = index + 1 >= length; 104 | if (carry && i === 0) { 105 | var added = isUpperCase ? 'A' : 'a'; 106 | result = added + next + result.slice(1); 107 | break; 108 | } 109 | } 110 | } else { 111 | next = +last + 1; 112 | if (next > 9) { 113 | next = 0; 114 | carry = true; 115 | } 116 | 117 | if (carry && i === 0) { 118 | result = '1' + next + result.slice(1); 119 | break; 120 | } 121 | } 122 | 123 | result = result.slice(0, i) + next + result.slice(i + 1); 124 | if (!carry) { 125 | break; 126 | } 127 | } 128 | 129 | if (this.DANGER_MIN_NAMES.indexOf(result) > -1) return this.succ(result); 130 | 131 | return result; 132 | } 133 | 134 | /** 135 | * an entry point. 136 | */ 137 | }, { 138 | key: "run", 139 | value: function run() { 140 | this.openFiles(); 141 | this.initFilesAst(); 142 | this.parseCssRules(); 143 | this.replace(); 144 | } 145 | 146 | /** 147 | * simply reads the content of CSS and js file. 148 | */ 149 | }, { 150 | key: "openFiles", 151 | value: function openFiles() { 152 | this.cssText = fs.readFileSync(this.config.cssIn, "utf8"); 153 | this.jsText = fs.readFileSync(this.config.jsIn, "utf8"); 154 | } 155 | 156 | /** 157 | * initializes AST for both CSS and JS. 158 | */ 159 | }, { 160 | key: "initFilesAst", 161 | value: function initFilesAst() { 162 | this.cssAst = css.parse(this.cssText); 163 | this.jsAst = esprima.parse(this.jsText); 164 | } 165 | 166 | /** 167 | * @return {RegExp} regexp to match CSS classes like: .d-user-profile 168 | */ 169 | }, { 170 | key: "generateCssClsRegExp", 171 | value: function generateCssClsRegExp() { 172 | var config = this.config; 173 | 174 | if (config.prefix) return new RegExp("\\.(?:" + config.prefix + "){1}[0-9a-zA-Z\\-_]+", "g"); 175 | 176 | if (config.regexp) return new RegExp(config.regexp.toString().replace("\/", "\/.")); 177 | 178 | return new RegExp("\\.[0-9a-zA-Z\\-_]+", "g"); 179 | } 180 | 181 | /** 182 | * @return {RegExp} regexp to match CSS classes like:
183 | */ 184 | }, { 185 | key: "generateJsClsRegExp", 186 | value: function generateJsClsRegExp() { 187 | var config = this.config; 188 | 189 | if (config.prefix) return new RegExp("(\\b" + config.prefix + "[0-9a-zA-Z\-_]+)", "g"); 190 | 191 | if (config.regexp) return config.regexp; 192 | 193 | return new RegExp(this.classes.join("|"), "g"); 194 | } 195 | 196 | /** 197 | * parses CSS file to extract all CSS class names in required order. 198 | */ 199 | }, { 200 | key: "parseCssRules", 201 | value: function parseCssRules() { 202 | var config = this.config, 203 | regexp = this.generateCssClsRegExp(), 204 | classes = []; 205 | 206 | this.rules = this.cssAst.stylesheet.rules; 207 | 208 | for (var i = 0, rule; rule = this.rules[i]; i++) { 209 | if (rule.type != "rule") continue; 210 | 211 | var selectors = rule.selectors.join(" ").match(regexp); 212 | 213 | if (selectors) classes = classes.concat(selectors.join(" ").replace(/\./g, "").split(" ")); 214 | } 215 | 216 | this.classes = classes.sort(function (a, b) { 217 | return b.length - a.length; 218 | }).filter(function (cls, pos) { 219 | return classes.indexOf(cls) == pos; 220 | }); 221 | } 222 | 223 | /** 224 | * replaces CSS class names in JS AST 225 | * @return {Replacer} 226 | */ 227 | }, { 228 | key: "replace", 229 | value: function replace() { 230 | var _this = this; 231 | 232 | var config = this.config, 233 | replace = config.replace; 234 | 235 | estraverse.traverse(this.jsAst, { 236 | enter: function enter(node, parent) { 237 | if (replace.call(_this, node, parent) === false) return; 238 | 239 | if (node.type != "Literal") return; 240 | 241 | if (typeof node.value != "string") return; 242 | 243 | _this.replaceItem(node); 244 | } 245 | }); 246 | 247 | if (config.replaceAll) this.replaceAll(); 248 | 249 | return this; 250 | } 251 | 252 | /** 253 | * Replaces a CSS class name in string literal node with it's minimized version. 254 | * @param {Object} node String literal node. 255 | * @return {undefined} 256 | */ 257 | }, { 258 | key: "replaceItem", 259 | value: function replaceItem(node) { 260 | var value = node.value, 261 | key = this.key, 262 | replacements = this.replacements, 263 | regexp = this.generateJsClsRegExp(), 264 | matches = value.match(regexp); 265 | 266 | if (!matches) return; 267 | 268 | for (var i = 0, match; match = matches[i]; i++) { 269 | if (!replacements.items[match]) { 270 | replacements.items[match] = key; 271 | key = this.succ(key); 272 | } 273 | } 274 | 275 | value = value.replace(regexp, function (a) { 276 | replacements.count++; 277 | return replacements.items[a]; 278 | }); 279 | 280 | node.value = value; 281 | this.key = key; 282 | } 283 | 284 | /** 285 | * peforms replacements for all unmatched CSS class names. 286 | * @return {undefined} 287 | */ 288 | }, { 289 | key: "replaceAll", 290 | value: function replaceAll() { 291 | var _this2 = this; 292 | 293 | var replacements = this.replacements, 294 | key = this.key; 295 | 296 | this.classes.forEach(function (cls) { 297 | if (!replacements.items[cls]) { 298 | replacements.items[cls] = key; 299 | key = _this2.succ(key); 300 | replacements.count++; 301 | } 302 | }); 303 | } 304 | 305 | /** 306 | * @returns {String} Resulting CSS code with replacements based on CSS AST. 307 | */ 308 | }, { 309 | key: "generateCss", 310 | value: function generateCss() { 311 | var replacements = this.replacements, 312 | regexp = this.generateCssClsRegExp(); 313 | 314 | for (var i = 0, rule; rule = this.rules[i]; i++) { 315 | if (rule.type != "rule") continue; 316 | 317 | var newSelectors = []; 318 | 319 | for (var j = 0, selector; selector = rule.selectors[j]; j++) { 320 | selector = selector.replace(regexp, function (a) { 321 | return "." + replacements.items[a.replace(".", "")]; 322 | }); 323 | 324 | if (/undefined/.test(selector)) 325 | // it can mean two things: 326 | // 1. there is a CSS rule which is not used in js file. 327 | // 2. it's a bug in gulp-css-gsub :) 328 | console.log("undefined in " + selector + " === " + rule.selectors.join(" "));else newSelectors.push(selector); 329 | } 330 | 331 | if (newSelectors.length == rule.selectors.length) rule.selectors = newSelectors;else rule.selectors = []; // remove rule, because of unused selector. 332 | } 333 | 334 | return css.stringify(this.cssAst); 335 | } 336 | 337 | /** 338 | * @returns {String} a resulting JS code with replacements based on JS AST. 339 | */ 340 | }, { 341 | key: "generateJs", 342 | value: function generateJs() { 343 | return escodegen.generate(this.jsAst); 344 | } 345 | 346 | /** 347 | * @return {Number} number of replacments. 348 | */ 349 | }, { 350 | key: "getReplacementsCount", 351 | value: function getReplacementsCount() { 352 | return this.replacements.count; 353 | } 354 | }]); 355 | 356 | return Replacer; 357 | })(); 358 | 359 | exports["default"] = Replacer; 360 | module.exports = exports["default"]; -------------------------------------------------------------------------------- /gulp-css-gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gulp-css-gsub", 3 | "version": "2.6.0", 4 | "description": "", 5 | "main": "./lib/main.js", 6 | "scripts": { 7 | "test": "./node_modules/mocha/bin/mocha", 8 | "compile": "babel -d lib/ src/", 9 | "prepublish": "npm run compile" 10 | }, 11 | "author": "Ruslan Prytula (http://60devs.com)", 12 | "license": "ISC", 13 | "bugs": { 14 | "url": "https://github.com/milworm/gulp-css-gsub/issues" 15 | }, 16 | "keywords": [ 17 | "gulp-css-gsub" 18 | ], 19 | "dependencies": { 20 | "css": "^2.2.1", 21 | "escodegen": "^1.8.0", 22 | "esprima": "^2.7.1", 23 | "estraverse": "^4.1.1", 24 | "through2": "^2.0.0", 25 | "vinyl": "^1.1.1" 26 | }, 27 | "devDependencies": { 28 | "babel-preset-es2015": "^6.5.0", 29 | "gulp": "^3.9.1", 30 | "gulp-babel": "^6.1.2", 31 | "gulp-util": "^3.0.7", 32 | "gulp-watch": "^4.3.5", 33 | "mocha": "^2.4.5" 34 | }, 35 | "files": [ 36 | "README.md", 37 | "LICENSE", 38 | "lib/main.js", 39 | "lib/replacer.js" 40 | ], 41 | "homepage": "http://milworm.github.io/gulp-css-gsub", 42 | "repository": { 43 | "type": "git", 44 | "url": "git+https://github.com/milworm/gulp-css-gsub.git" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /gulp-css-gsub/src/main.js: -------------------------------------------------------------------------------- 1 | var through = require("through2"), 2 | Replacer = require("./replacer.js"), 3 | File = require("vinyl"), 4 | fs = require("fs"); 5 | 6 | export default (config) => { 7 | return through.obj((file, encoding, callback) => { 8 | config = Object.assign({ 9 | cssIn: file.path 10 | }, config); 11 | 12 | var replacer, 13 | cssCode, 14 | jsCode; 15 | 16 | replacer = new Replacer(config); 17 | replacer.run(); 18 | 19 | cssCode = replacer.generateCss(), 20 | jsCode = replacer.generateJs(); 21 | 22 | fs.writeFileSync(config.jsOut, jsCode); 23 | 24 | file = new File({ 25 | cwd: "/", 26 | base: "/", 27 | path: "/", 28 | contents: new Buffer(cssCode) 29 | }); 30 | 31 | callback(null, file); 32 | }); 33 | }; -------------------------------------------------------------------------------- /gulp-css-gsub/src/replacer.js: -------------------------------------------------------------------------------- 1 | var esprima = require("esprima"), 2 | css = require("css"), 3 | estraverse = require("estraverse"), 4 | escodegen = require("escodegen"), 5 | fs = require("fs"); 6 | 7 | export default class Replacer { 8 | 9 | /** 10 | * @param {Object} config 11 | * @param {String} config.prefix Used when CSS classes look like "{prefix}profile" "d-profile" 12 | * @param {RegExp} config.regexp Used when CSS classes use non-prefix declaration format. 13 | * @param {Function} config.replace 14 | * Function that will be called for each node from JS-AST. It's used when regexp is not enough and you need to 15 | * replace CSS classes based on some specific rules. 16 | * For example: 17 | * @example 18 | * In Sencha Touch / ExtJS, when you define a component: 19 | * Ext.define("MyComponent", { 20 | * extend: "Ext.Component", 21 | * config: { 22 | * baseCls: "d-my-component" 23 | * } 24 | * }); 25 | * ST/ExtJS will construct an additional CSS class "d-my-component-inner" using a rule #baseCls + '-inner', so 26 | * when you replace #baseCls you need to replace "d-my-component-inner" with a minimized version of #baseCls plus 27 | * '-inner' string to avoid bugs. So it could look like this: 28 | * "d-my-component" -> "a0" 29 | * "d-my-component-inner" -> "a0-inner" 30 | * 31 | * @param {Boolean} replaceAll Should be true to rename all CSS classes including those classes that couldn't be 32 | * found in js-file (probably unused). 33 | */ 34 | constructor(config) { 35 | this.config = Object.assign({ 36 | regexp: null, 37 | prefix: null, 38 | replace: this.emptyFn, 39 | replaceAll: false 40 | }, config); 41 | 42 | this.key = "a0"; 43 | this.replacements = { 44 | count: 0, 45 | items: {} 46 | }; 47 | 48 | this.DANGER_MIN_NAMES = [ 49 | "s0|s1|s2|s3|s4|s5|s6|s7|s8|s9|s10|s11|s12|", 50 | "m0|m1|m2|m3|m4|m5|m6|m7|m8|m9|m10|m11|m12|", 51 | "l0|l1|l3|l3|l4|l5|l6|l7|l8|l9|l10|l11|l12|", 52 | "fa" 53 | ].join("").split("|") 54 | } 55 | 56 | /** 57 | * a reusable empty function 58 | */ 59 | emptyFn() {} 60 | 61 | /** 62 | * @param {String} 63 | * @return {String} 64 | */ 65 | succ(input) { 66 | var alphabet = 'abcdefghijklmnopqrstuvwxyz', 67 | length = alphabet.length, 68 | result = input, 69 | i = input.length, 70 | index; 71 | 72 | while(i >= 0) { 73 | var last = input.charAt(--i), 74 | next = '', 75 | carry = false; 76 | 77 | if (isNaN(last)) { 78 | index = alphabet.indexOf(last.toLowerCase()); 79 | 80 | if (index === -1) { 81 | next = last; 82 | carry = true; 83 | } 84 | else { 85 | var isUpperCase = last === last.toUpperCase(); 86 | next = alphabet.charAt((index + 1) % length); 87 | if (isUpperCase) { 88 | next = next.toUpperCase(); 89 | } 90 | 91 | carry = index + 1 >= length; 92 | if (carry && i === 0) { 93 | var added = isUpperCase ? 'A' : 'a'; 94 | result = added + next + result.slice(1); 95 | break; 96 | } 97 | } 98 | } 99 | else { 100 | next = +last + 1; 101 | if(next > 9) { 102 | next = 0; 103 | carry = true 104 | } 105 | 106 | if (carry && i === 0) { 107 | result = '1' + next + result.slice(1); 108 | break; 109 | } 110 | } 111 | 112 | result = result.slice(0, i) + next + result.slice(i + 1); 113 | if (!carry) { 114 | break; 115 | } 116 | } 117 | 118 | if(this.DANGER_MIN_NAMES.indexOf(result) > -1) 119 | return this.succ(result); 120 | 121 | return result; 122 | } 123 | 124 | /** 125 | * an entry point. 126 | */ 127 | run() { 128 | this.openFiles(); 129 | this.initFilesAst(); 130 | this.parseCssRules(); 131 | this.replace(); 132 | } 133 | 134 | /** 135 | * simply reads the content of CSS and js file. 136 | */ 137 | openFiles() { 138 | this.cssText = fs.readFileSync(this.config.cssIn, "utf8"); 139 | this.jsText = fs.readFileSync(this.config.jsIn, "utf8"); 140 | } 141 | 142 | /** 143 | * initializes AST for both CSS and JS. 144 | */ 145 | initFilesAst() { 146 | this.cssAst = css.parse(this.cssText); 147 | this.jsAst = esprima.parse(this.jsText); 148 | } 149 | 150 | /** 151 | * @return {RegExp} regexp to match CSS classes like: .d-user-profile 152 | */ 153 | generateCssClsRegExp() { 154 | var config = this.config; 155 | 156 | if(config.prefix) 157 | return new RegExp("\\.(?:" + config.prefix + "){1}[0-9a-zA-Z\\-_]+", "g"); 158 | 159 | if(config.regexp) 160 | return new RegExp(config.regexp.toString().replace("\/", "\/.")); 161 | 162 | return new RegExp("\\.[0-9a-zA-Z\\-_]+", "g"); 163 | } 164 | 165 | /** 166 | * @return {RegExp} regexp to match CSS classes like: 167 | */ 168 | generateJsClsRegExp() { 169 | var config = this.config; 170 | 171 | if(config.prefix) 172 | return new RegExp("(\\b" + config.prefix + "[0-9a-zA-Z\-_]+)", "g"); 173 | 174 | if(config.regexp) 175 | return config.regexp; 176 | 177 | return new RegExp(this.classes.join("|"), "g"); 178 | } 179 | 180 | /** 181 | * parses CSS file to extract all CSS class names in required order. 182 | */ 183 | parseCssRules() { 184 | var config = this.config, 185 | regexp = this.generateCssClsRegExp(), 186 | classes = []; 187 | 188 | this.rules = this.cssAst.stylesheet.rules; 189 | 190 | for(var i=0, rule; rule=this.rules[i]; i++) { 191 | if(rule.type != "rule") 192 | continue; 193 | 194 | var selectors = rule.selectors.join(" ").match(regexp); 195 | 196 | if(selectors) 197 | classes = classes.concat(selectors.join(" ").replace(/\./g, "").split(" ")); 198 | } 199 | 200 | this.classes = classes.sort(function(a, b) { 201 | return b.length - a.length; 202 | }).filter(function(cls, pos) { 203 | return classes.indexOf(cls) == pos; 204 | }); 205 | } 206 | 207 | /** 208 | * replaces CSS class names in JS AST 209 | * @return {Replacer} 210 | */ 211 | replace() { 212 | var config = this.config, 213 | replace = config.replace; 214 | 215 | estraverse.traverse(this.jsAst, { 216 | enter: (node, parent) => { 217 | if(replace.call(this, node, parent) === false) 218 | return ; 219 | 220 | if(node.type != "Literal") 221 | return ; 222 | 223 | if(typeof node.value != "string") 224 | return ; 225 | 226 | this.replaceItem(node); 227 | } 228 | }); 229 | 230 | if(config.replaceAll) 231 | this.replaceAll(); 232 | 233 | return this; 234 | } 235 | 236 | /** 237 | * Replaces a CSS class name in string literal node with it's minimized version. 238 | * @param {Object} node String literal node. 239 | * @return {undefined} 240 | */ 241 | replaceItem(node) { 242 | var value = node.value, 243 | key = this.key, 244 | replacements = this.replacements, 245 | regexp = this.generateJsClsRegExp(), 246 | matches = value.match(regexp); 247 | 248 | if(! matches) 249 | return ; 250 | 251 | for(var i=0, match; match=matches[i]; i++) { 252 | if(! replacements.items[match]) { 253 | replacements.items[match] = key; 254 | key = this.succ(key); 255 | } 256 | } 257 | 258 | value = value.replace(regexp, function(a) { 259 | replacements.count ++; 260 | return replacements.items[a]; 261 | }); 262 | 263 | node.value = value; 264 | this.key = key; 265 | } 266 | 267 | /** 268 | * peforms replacements for all unmatched CSS class names. 269 | * @return {undefined} 270 | */ 271 | replaceAll() { 272 | var replacements = this.replacements, 273 | key = this.key; 274 | 275 | this.classes.forEach((cls) => { 276 | if(! replacements.items[cls]) { 277 | replacements.items[cls] = key; 278 | key = this.succ(key); 279 | replacements.count ++; 280 | } 281 | }); 282 | } 283 | 284 | /** 285 | * @returns {String} Resulting CSS code with replacements based on CSS AST. 286 | */ 287 | generateCss() { 288 | var replacements = this.replacements, 289 | regexp = this.generateCssClsRegExp(); 290 | 291 | for(var i=0, rule; rule=this.rules[i]; i++) { 292 | if(rule.type != "rule") 293 | continue; 294 | 295 | var newSelectors = []; 296 | 297 | for(var j=0, selector; selector=rule.selectors[j]; j++) { 298 | selector = selector.replace(regexp, function(a) { 299 | return "." + replacements.items[a.replace(".", "")]; 300 | }); 301 | 302 | if(/undefined/.test(selector)) 303 | // it can mean two things: 304 | // 1. there is a CSS rule which is not used in js file. 305 | // 2. it's a bug in gulp-css-gsub :) 306 | console.log("undefined in " + selector + " === " + rule.selectors.join(" ")) 307 | else 308 | newSelectors.push(selector); 309 | } 310 | 311 | if(newSelectors.length == rule.selectors.length) 312 | rule.selectors = newSelectors; 313 | else 314 | rule.selectors = []; // remove rule, because of unused selector. 315 | } 316 | 317 | return css.stringify(this.cssAst); 318 | } 319 | 320 | /** 321 | * @returns {String} a resulting JS code with replacements based on JS AST. 322 | */ 323 | generateJs() { 324 | return escodegen.generate(this.jsAst); 325 | } 326 | 327 | /** 328 | * @return {Number} number of replacments. 329 | */ 330 | getReplacementsCount() { 331 | return this.replacements.count; 332 | } 333 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example1/file.css: -------------------------------------------------------------------------------- 1 | .d-example { 2 | background: red; 3 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example1/file.js: -------------------------------------------------------------------------------- 1 | function Example(config) { 2 | this.cls = config.cls; 3 | } 4 | 5 | new Example({ 6 | cls: "d-example" 7 | }); -------------------------------------------------------------------------------- /gulp-css-gsub/test/example2/file.css: -------------------------------------------------------------------------------- 1 | .d-example { 2 | background: red; 3 | } 4 | 5 | .d-inner-item-1 { 6 | background: orange; 7 | } 8 | 9 | .d-inner-item-2 { 10 | background: white; 11 | } 12 | 13 | .d-inner-item-3 { 14 | background: blue; 15 | } 16 | 17 | .d-inner-item-4 { 18 | background: gold; 19 | } 20 | 21 | .d-inner-item-1, 22 | .d-inner-item-2, 23 | .d-inner-item-3, 24 | .d-inner-item-4 { 25 | display: inline-block; 26 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example2/file.js: -------------------------------------------------------------------------------- 1 | function Example() { 2 | this.cls = "d-example"; 3 | this.html = [ 4 | "
", 5 | "

hello world

", 6 | "
", 7 | "
", 8 | "

hello world 2

", 9 | "
", 10 | "
", 11 | "

hello world 3

", 12 | "
", 13 | "
", 14 | "

hello world 4

", 15 | "
" 16 | ]; 17 | } 18 | 19 | new Example(); -------------------------------------------------------------------------------- /gulp-css-gsub/test/example3/file.css: -------------------------------------------------------------------------------- 1 | .a-example { 2 | background: red; 3 | } 4 | 5 | .a-inner-item-1 { 6 | background: orange; 7 | } 8 | 9 | .a-inner-item-2 { 10 | background: white; 11 | } 12 | 13 | .row { 14 | display: flex; 15 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example3/file.js: -------------------------------------------------------------------------------- 1 | function Example() { 2 | this.cls = "a-example"; 3 | this.html = [ 4 | "
", 5 | "

hello world

", 6 | "
", 7 | "
", 8 | "

hello world 2

", 9 | "
", 10 | "
" 11 | ]; 12 | } 13 | 14 | new Example(); -------------------------------------------------------------------------------- /gulp-css-gsub/test/example4/file.css: -------------------------------------------------------------------------------- 1 | .d-user-profile { 2 | height: 100px; 3 | width: 100px; 4 | } 5 | 6 | .d-user-profile-inner { 7 | height: 50px; 8 | padding: 10px; 9 | background: gold; 10 | } 11 | 12 | .d-user-billing { 13 | height: 100px; 14 | width: 100px; 15 | } 16 | 17 | .d-user-billing-inner { 18 | height: 50px; 19 | padding: 10px; 20 | background: gold; 21 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example4/file.js: -------------------------------------------------------------------------------- 1 | Ext.define("app.view.UserProfile", { 2 | config: { 3 | baseCls: "d-user-profile", 4 | 5 | tpl: Ext.create("Ext.Template", 6 | "

User Profile

", { 7 | compiled: true 8 | }) 9 | } 10 | }); 11 | 12 | Ext.define("app.view.UserBilling", { 13 | config: { 14 | baseCls: "d-user-billing", 15 | 16 | tpl: Ext.create("Ext.Template", 17 | "

User Billing

", { 18 | compiled: true 19 | }) 20 | } 21 | }); 22 | 23 | -------------------------------------------------------------------------------- /gulp-css-gsub/test/example5/file.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.5.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"} 5 | -------------------------------------------------------------------------------- /gulp-css-gsub/test/example5/result.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @font-face { 7 | font-family: 'FontAwesome'; 8 | src: url('../fonts/fontawesome-webfont.eot?v=4.5.0'); 9 | src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg'); 10 | font-weight: normal; 11 | font-style: normal; 12 | } 13 | 14 | .fa { 15 | display: inline-block; 16 | font: normal normal normal 14px/1 FontAwesome; 17 | font-size: inherit; 18 | text-rendering: auto; 19 | -webkit-font-smoothing: antialiased; 20 | -moz-osx-font-smoothing: grayscale; 21 | } 22 | 23 | .bv9 { 24 | font-size: 1.33333333em; 25 | line-height: .75em; 26 | vertical-align: -15%; 27 | } 28 | 29 | .bv5 { 30 | font-size: 2em; 31 | } 32 | 33 | .bw5 { 34 | font-size: 3em; 35 | } 36 | 37 | .bw4 { 38 | font-size: 4em; 39 | } 40 | 41 | .bw3 { 42 | font-size: 5em; 43 | } 44 | 45 | .bw2 { 46 | width: 1.28571429em; 47 | text-align: center; 48 | } 49 | 50 | .bw1 { 51 | padding-left: 0; 52 | margin-left: 2.14285714em; 53 | list-style-type: none; 54 | } 55 | 56 | .bw1>li { 57 | position: relative; 58 | } 59 | 60 | .bw0 { 61 | position: absolute; 62 | left: -2.14285714em; 63 | width: 2.14285714em; 64 | top: .14285714em; 65 | text-align: center; 66 | } 67 | 68 | .bw0.bv9 { 69 | left: -1.85714286em; 70 | } 71 | 72 | .bl9 { 73 | padding: .2em .25em .15em; 74 | border: solid .08em #eee; 75 | border-radius: .1em; 76 | } 77 | 78 | .bf5 { 79 | float: left; 80 | } 81 | 82 | .bb0 { 83 | float: right; 84 | } 85 | 86 | .fa.bf5 { 87 | margin-right: .3em; 88 | } 89 | 90 | .fa.bb0 { 91 | margin-left: .3em; 92 | } 93 | 94 | .pull-right { 95 | float: right; 96 | } 97 | 98 | .pull-left { 99 | float: left; 100 | } 101 | 102 | .fa.pull-left { 103 | margin-right: .3em; 104 | } 105 | 106 | .fa.pull-right { 107 | margin-left: .3em; 108 | } 109 | 110 | .bs7 { 111 | -webkit-animation: fa-spin 2s infinite linear; 112 | animation: fa-spin 2s infinite linear; 113 | } 114 | 115 | .bo9 { 116 | -webkit-animation: fa-spin 1s infinite steps(8); 117 | animation: fa-spin 1s infinite steps(8); 118 | } 119 | 120 | @-webkit-keyframes fa-spin { 121 | 0% { 122 | -webkit-transform: rotate(0deg); 123 | transform: rotate(0deg); 124 | } 125 | 126 | 100% { 127 | -webkit-transform: rotate(359deg); 128 | transform: rotate(359deg); 129 | } 130 | } 131 | 132 | @keyframes fa-spin { 133 | 0% { 134 | -webkit-transform: rotate(0deg); 135 | transform: rotate(0deg); 136 | } 137 | 138 | 100% { 139 | -webkit-transform: rotate(359deg); 140 | transform: rotate(359deg); 141 | } 142 | } 143 | 144 | .bf3 { 145 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); 146 | -webkit-transform: rotate(90deg); 147 | -ms-transform: rotate(90deg); 148 | transform: rotate(90deg); 149 | } 150 | 151 | .bb1 { 152 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); 153 | -webkit-transform: rotate(180deg); 154 | -ms-transform: rotate(180deg); 155 | transform: rotate(180deg); 156 | } 157 | 158 | .bb5 { 159 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); 160 | -webkit-transform: rotate(270deg); 161 | -ms-transform: rotate(270deg); 162 | transform: rotate(270deg); 163 | } 164 | 165 | .at2 { 166 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); 167 | -webkit-transform: scale(-1, 1); 168 | -ms-transform: scale(-1, 1); 169 | transform: scale(-1, 1); 170 | } 171 | 172 | .av8 { 173 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); 174 | -webkit-transform: scale(1, -1); 175 | -ms-transform: scale(1, -1); 176 | transform: scale(1, -1); 177 | } 178 | 179 | :root .bf3, 180 | :root .bb1, 181 | :root .bb5, 182 | :root .at2, 183 | :root .av8 { 184 | filter: none; 185 | } 186 | 187 | .bp0 { 188 | position: relative; 189 | display: inline-block; 190 | width: 2em; 191 | height: 2em; 192 | line-height: 2em; 193 | vertical-align: middle; 194 | } 195 | 196 | .bh3, 197 | .bh2 { 198 | position: absolute; 199 | left: 0; 200 | width: 100%; 201 | text-align: center; 202 | } 203 | 204 | .bh3 { 205 | line-height: inherit; 206 | } 207 | 208 | .bh2 { 209 | font-size: 2em; 210 | } 211 | 212 | .bj7 { 213 | color: #fff; 214 | } 215 | 216 | .t6:before { 217 | content: "\f000"; 218 | } 219 | 220 | .ab5:before { 221 | content: "\f001"; 222 | } 223 | 224 | .ag0:before { 225 | content: "\f002"; 226 | } 227 | 228 | .n6:before { 229 | content: "\f003"; 230 | } 231 | 232 | .v2:before { 233 | content: "\f004"; 234 | } 235 | 236 | .aj9:before { 237 | content: "\f005"; 238 | } 239 | 240 | .ak4:before { 241 | content: "\f006"; 242 | } 243 | 244 | .ao9:before { 245 | content: "\f007"; 246 | } 247 | 248 | .q6:before { 249 | content: "\f008"; 250 | } 251 | 252 | .bh0:before { 253 | content: "\f009"; 254 | } 255 | 256 | .bv2:before { 257 | content: "\f00a"; 258 | } 259 | 260 | .bi9:before { 261 | content: "\f00b"; 262 | } 263 | 264 | .h0:before { 265 | content: "\f00c"; 266 | } 267 | 268 | .af1:before, 269 | .i2:before, 270 | .am5:before { 271 | content: "\f00d"; 272 | } 273 | 274 | .ag2:before { 275 | content: "\f00e"; 276 | } 277 | 278 | .ag1:before { 279 | content: "\f010"; 280 | } 281 | 282 | .ad9:before { 283 | content: "\f011"; 284 | } 285 | 286 | .ah8:before { 287 | content: "\f012"; 288 | } 289 | 290 | .t3:before, 291 | .i9:before { 292 | content: "\f013"; 293 | } 294 | 295 | .an7:before { 296 | content: "\f014"; 297 | } 298 | 299 | .v6:before { 300 | content: "\f015"; 301 | } 302 | 303 | .bn4:before { 304 | content: "\f016"; 305 | } 306 | 307 | .i0:before { 308 | content: "\f017"; 309 | } 310 | 311 | .af6:before { 312 | content: "\f018"; 313 | } 314 | 315 | .n1:before { 316 | content: "\f019"; 317 | } 318 | 319 | .aq9:before { 320 | content: "\f01a"; 321 | } 322 | 323 | .ar7:before { 324 | content: "\f01b"; 325 | } 326 | 327 | .w8:before { 328 | content: "\f01c"; 329 | } 330 | 331 | .av4:before { 332 | content: "\f01d"; 333 | } 334 | 335 | .aw9:before, 336 | .bn5:before { 337 | content: "\f01e"; 338 | } 339 | 340 | .ae9:before { 341 | content: "\f021"; 342 | } 343 | 344 | .bg8:before { 345 | content: "\f022"; 346 | } 347 | 348 | .y9:before { 349 | content: "\f023"; 350 | } 351 | 352 | .r0:before { 353 | content: "\f024"; 354 | } 355 | 356 | .v1:before { 357 | content: "\f025"; 358 | } 359 | 360 | .ap6:before { 361 | content: "\f026"; 362 | } 363 | 364 | .ap5:before { 365 | content: "\f027"; 366 | } 367 | 368 | .ap7:before { 369 | content: "\f028"; 370 | } 371 | 372 | .ae2:before { 373 | content: "\f029"; 374 | } 375 | 376 | .b6:before { 377 | content: "\f02a"; 378 | } 379 | 380 | .al3:before { 381 | content: "\f02b"; 382 | } 383 | 384 | .al4:before { 385 | content: "\f02c"; 386 | } 387 | 388 | .e1:before { 389 | content: "\f02d"; 390 | } 391 | 392 | .e2:before { 393 | content: "\f02e"; 394 | } 395 | 396 | .ae0:before { 397 | content: "\f02f"; 398 | } 399 | 400 | .f9:before { 401 | content: "\f030"; 402 | } 403 | 404 | .bs0:before { 405 | content: "\f031"; 406 | } 407 | 408 | .br9:before { 409 | content: "\f032"; 410 | } 411 | 412 | .bo1:before { 413 | content: "\f033"; 414 | } 415 | 416 | .az4:before { 417 | content: "\f034"; 418 | } 419 | 420 | .ba8:before { 421 | content: "\f035"; 422 | } 423 | 424 | .ba9:before { 425 | content: "\f036"; 426 | } 427 | 428 | .aw5:before { 429 | content: "\f037"; 430 | } 431 | 432 | .ay7:before { 433 | content: "\f038"; 434 | } 435 | 436 | .au9:before { 437 | content: "\f039"; 438 | } 439 | 440 | .br8:before { 441 | content: "\f03a"; 442 | } 443 | 444 | .bo2:before, 445 | .bj2:before { 446 | content: "\f03b"; 447 | } 448 | 449 | .bo3:before { 450 | content: "\f03c"; 451 | } 452 | 453 | .ap4:before { 454 | content: "\f03d"; 455 | } 456 | 457 | .ad0:before, 458 | .w7:before, 459 | .ad1:before { 460 | content: "\f03e"; 461 | } 462 | 463 | .ac4:before { 464 | content: "\f040"; 465 | } 466 | 467 | .z7:before { 468 | content: "\f041"; 469 | } 470 | 471 | .a1:before { 472 | content: "\f042"; 473 | } 474 | 475 | .am8:before { 476 | content: "\f043"; 477 | } 478 | 479 | .n2:before, 480 | .ac6:before { 481 | content: "\f044"; 482 | } 483 | 484 | .ah0:before { 485 | content: "\f045"; 486 | } 487 | 488 | .h4:before { 489 | content: "\f046"; 490 | } 491 | 492 | .a5:before { 493 | content: "\f047"; 494 | } 495 | 496 | .au4:before { 497 | content: "\f048"; 498 | } 499 | 500 | .au3:before { 501 | content: "\f049"; 502 | } 503 | 504 | .bg4:before { 505 | content: "\f04a"; 506 | } 507 | 508 | .br4:before { 509 | content: "\f04b"; 510 | } 511 | 512 | .bq6:before { 513 | content: "\f04c"; 514 | } 515 | 516 | .br3:before { 517 | content: "\f04d"; 518 | } 519 | 520 | .bi5:before { 521 | content: "\f04e"; 522 | } 523 | 524 | .ax5:before { 525 | content: "\f050"; 526 | } 527 | 528 | .ax4:before { 529 | content: "\f051"; 530 | } 531 | 532 | .br1:before { 533 | content: "\f052"; 534 | } 535 | 536 | .aw6:before { 537 | content: "\f053"; 538 | } 539 | 540 | .av1:before { 541 | content: "\f054"; 542 | } 543 | 544 | .ad6:before { 545 | content: "\f055"; 546 | } 547 | 548 | .aa5:before { 549 | content: "\f056"; 550 | } 551 | 552 | .am6:before { 553 | content: "\f057"; 554 | } 555 | 556 | .h1:before { 557 | content: "\f058"; 558 | } 559 | 560 | .ae4:before { 561 | content: "\f059"; 562 | } 563 | 564 | .x1:before { 565 | content: "\f05a"; 566 | } 567 | 568 | .k3:before { 569 | content: "\f05b"; 570 | } 571 | 572 | .am7:before { 573 | content: "\f05c"; 574 | } 575 | 576 | .h2:before { 577 | content: "\f05d"; 578 | } 579 | 580 | .b2:before { 581 | content: "\f05e"; 582 | } 583 | 584 | .bc6:before { 585 | content: "\f060"; 586 | } 587 | 588 | .ay9:before { 589 | content: "\f061"; 590 | } 591 | 592 | .bg3:before { 593 | content: "\f062"; 594 | } 595 | 596 | .bc8:before { 597 | content: "\f063"; 598 | } 599 | 600 | .z2:before, 601 | .ag6:before { 602 | content: "\f064"; 603 | } 604 | 605 | .bk8:before { 606 | content: "\f065"; 607 | } 608 | 609 | .bg2:before { 610 | content: "\f066"; 611 | } 612 | 613 | .ad5:before { 614 | content: "\f067"; 615 | } 616 | 617 | .aa4:before { 618 | content: "\f068"; 619 | } 620 | 621 | .a8:before { 622 | content: "\f069"; 623 | } 624 | 625 | .o1:before { 626 | content: "\f06a"; 627 | } 628 | 629 | .t5:before { 630 | content: "\f06b"; 631 | } 632 | 633 | .x7:before { 634 | content: "\f06c"; 635 | } 636 | 637 | .q8:before { 638 | content: "\f06d"; 639 | } 640 | 641 | .o5:before { 642 | content: "\f06e"; 643 | } 644 | 645 | .o6:before { 646 | content: "\f070"; 647 | } 648 | 649 | .ap8:before, 650 | .o2:before { 651 | content: "\f071"; 652 | } 653 | 654 | .ad3:before { 655 | content: "\f072"; 656 | } 657 | 658 | .f3:before { 659 | content: "\f073"; 660 | } 661 | 662 | .ae7:before { 663 | content: "\f074"; 664 | } 665 | 666 | .j1:before { 667 | content: "\f075"; 668 | } 669 | 670 | .z1:before { 671 | content: "\f076"; 672 | } 673 | 674 | .bc0:before { 675 | content: "\f077"; 676 | } 677 | 678 | .aw4:before { 679 | content: "\f078"; 680 | } 681 | 682 | .af5:before { 683 | content: "\f079"; 684 | } 685 | 686 | .ah5:before { 687 | content: "\f07a"; 688 | } 689 | 690 | .r5:before { 691 | content: "\f07b"; 692 | } 693 | 694 | .r7:before { 695 | content: "\f07c"; 696 | } 697 | 698 | .a7:before { 699 | content: "\f07d"; 700 | } 701 | 702 | .a6:before { 703 | content: "\f07e"; 704 | } 705 | 706 | .b5:before, 707 | .b4:before { 708 | content: "\f080"; 709 | } 710 | 711 | .at5:before { 712 | content: "\f081"; 713 | } 714 | 715 | .at0:before { 716 | content: "\f082"; 717 | } 718 | 719 | .g0:before { 720 | content: "\f083"; 721 | } 722 | 723 | .x3:before { 724 | content: "\f084"; 725 | } 726 | 727 | .t4:before, 728 | .j0:before { 729 | content: "\f085"; 730 | } 731 | 732 | .j5:before { 733 | content: "\f086"; 734 | } 735 | 736 | .am2:before { 737 | content: "\f087"; 738 | } 739 | 740 | .am1:before { 741 | content: "\f088"; 742 | } 743 | 744 | .ak0:before { 745 | content: "\f089"; 746 | } 747 | 748 | .v3:before { 749 | content: "\f08a"; 750 | } 751 | 752 | .ah7:before { 753 | content: "\f08b"; 754 | } 755 | 756 | .as8:before { 757 | content: "\f08c"; 758 | } 759 | 760 | .al9:before { 761 | content: "\f08d"; 762 | } 763 | 764 | .o3:before { 765 | content: "\f08e"; 766 | } 767 | 768 | .ah6:before { 769 | content: "\f090"; 770 | } 771 | 772 | .an9:before { 773 | content: "\f091"; 774 | } 775 | 776 | .au7:before { 777 | content: "\f092"; 778 | } 779 | 780 | .ao8:before { 781 | content: "\f093"; 782 | } 783 | 784 | .x9:before { 785 | content: "\f094"; 786 | } 787 | 788 | .ac8:before { 789 | content: "\f095"; 790 | } 791 | 792 | .aj8:before { 793 | content: "\f096"; 794 | } 795 | 796 | .e3:before { 797 | content: "\f097"; 798 | } 799 | 800 | .ac9:before { 801 | content: "\f098"; 802 | } 803 | 804 | .bj0:before { 805 | content: "\f099"; 806 | } 807 | 808 | .bb7:before, 809 | .bi1:before { 810 | content: "\f09a"; 811 | } 812 | 813 | .bo5:before { 814 | content: "\f09b"; 815 | } 816 | 817 | .ao5:before { 818 | content: "\f09c"; 819 | } 820 | 821 | .k0:before { 822 | content: "\f09d"; 823 | } 824 | 825 | .o9:before, 826 | .af8:before { 827 | content: "\f09e"; 828 | } 829 | 830 | .v0:before { 831 | content: "\f0a0"; 832 | } 833 | 834 | .e8:before { 835 | content: "\f0a1"; 836 | } 837 | 838 | .d0:before { 839 | content: "\f0f3"; 840 | } 841 | 842 | .g9:before { 843 | content: "\f0a3"; 844 | } 845 | 846 | .aw3:before { 847 | content: "\f0a4"; 848 | } 849 | 850 | .ay3:before { 851 | content: "\f0a5"; 852 | } 853 | 854 | .be3:before { 855 | content: "\f0a6"; 856 | } 857 | 858 | .ay6:before { 859 | content: "\f0a7"; 860 | } 861 | 862 | .as0:before { 863 | content: "\f0a8"; 864 | } 865 | 866 | .ar1:before { 867 | content: "\f0a9"; 868 | } 869 | 870 | .as7:before { 871 | content: "\f0aa"; 872 | } 873 | 874 | .as1:before { 875 | content: "\f0ab"; 876 | } 877 | 878 | .t7:before { 879 | content: "\f0ac"; 880 | } 881 | 882 | .aq1:before { 883 | content: "\f0ad"; 884 | } 885 | 886 | .al5:before { 887 | content: "\f0ae"; 888 | } 889 | 890 | .q7:before { 891 | content: "\f0b0"; 892 | } 893 | 894 | .e4:before { 895 | content: "\f0b1"; 896 | } 897 | 898 | .ba7:before { 899 | content: "\f0b2"; 900 | } 901 | 902 | .t9:before, 903 | .ap3:before { 904 | content: "\f0c0"; 905 | } 906 | 907 | .bq0:before, 908 | .br5:before { 909 | content: "\f0c1"; 910 | } 911 | 912 | .i3:before { 913 | content: "\f0c2"; 914 | } 915 | 916 | .r4:before { 917 | content: "\f0c3"; 918 | } 919 | 920 | .bu4:before, 921 | .bg7:before { 922 | content: "\f0c4"; 923 | } 924 | 925 | .br7:before, 926 | .bk4:before { 927 | content: "\f0c5"; 928 | } 929 | 930 | .be2:before { 931 | content: "\f0c6"; 932 | } 933 | 934 | .bt2:before, 935 | .bg5:before { 936 | content: "\f0c7"; 937 | } 938 | 939 | .aj7:before { 940 | content: "\f0c8"; 941 | } 942 | 943 | .ab6:before, 944 | .af2:before, 945 | .b7:before { 946 | content: "\f0c9"; 947 | } 948 | 949 | .bi7:before { 950 | content: "\f0ca"; 951 | } 952 | 953 | .bi8:before { 954 | content: "\f0cb"; 955 | } 956 | 957 | .av2:before { 958 | content: "\f0cc"; 959 | } 960 | 961 | .be1:before { 962 | content: "\f0cd"; 963 | } 964 | 965 | .bp6:before { 966 | content: "\f0ce"; 967 | } 968 | 969 | .z0:before { 970 | content: "\f0d0"; 971 | } 972 | 973 | .ao0:before { 974 | content: "\f0d1"; 975 | } 976 | 977 | .bd9:before { 978 | content: "\f0d2"; 979 | } 980 | 981 | .as3:before { 982 | content: "\f0d3"; 983 | } 984 | 985 | .ar2:before { 986 | content: "\f0d4"; 987 | } 988 | 989 | .ba2:before { 990 | content: "\f0d5"; 991 | } 992 | 993 | .ab0:before { 994 | content: "\f0d6"; 995 | } 996 | 997 | .bc2:before { 998 | content: "\f0d7"; 999 | } 1000 | 1001 | .bg0:before { 1002 | content: "\f0d8"; 1003 | } 1004 | 1005 | .bc4:before { 1006 | content: "\f0d9"; 1007 | } 1008 | 1009 | .ba6:before { 1010 | content: "\f0da"; 1011 | } 1012 | 1013 | .bk1:before { 1014 | content: "\f0db"; 1015 | } 1016 | 1017 | .ao7:before, 1018 | .ai3:before { 1019 | content: "\f0dc"; 1020 | } 1021 | 1022 | .aj0:before, 1023 | .ai9:before { 1024 | content: "\f0dd"; 1025 | } 1026 | 1027 | .aj3:before, 1028 | .ai8:before { 1029 | content: "\f0de"; 1030 | } 1031 | 1032 | .n5:before { 1033 | content: "\f0e0"; 1034 | } 1035 | 1036 | .bh9:before { 1037 | content: "\f0e1"; 1038 | } 1039 | 1040 | .ay5:before, 1041 | .bs1:before { 1042 | content: "\f0e2"; 1043 | } 1044 | 1045 | .x8:before, 1046 | .t2:before { 1047 | content: "\f0e3"; 1048 | } 1049 | 1050 | .k7:before, 1051 | .al2:before { 1052 | content: "\f0e4"; 1053 | } 1054 | 1055 | .j2:before { 1056 | content: "\f0e5"; 1057 | } 1058 | 1059 | .j6:before { 1060 | content: "\f0e6"; 1061 | } 1062 | 1063 | .r3:before, 1064 | .d9:before { 1065 | content: "\f0e7"; 1066 | } 1067 | 1068 | .ah9:before { 1069 | content: "\f0e8"; 1070 | } 1071 | 1072 | .ao3:before { 1073 | content: "\f0e9"; 1074 | } 1075 | 1076 | .bp3:before, 1077 | .bd6:before { 1078 | content: "\f0ea"; 1079 | } 1080 | 1081 | .y6:before { 1082 | content: "\f0eb"; 1083 | } 1084 | 1085 | .n9:before { 1086 | content: "\f0ec"; 1087 | } 1088 | 1089 | .i4:before { 1090 | content: "\f0ed"; 1091 | } 1092 | 1093 | .i5:before { 1094 | content: "\f0ee"; 1095 | } 1096 | 1097 | .bj5:before { 1098 | content: "\f0f0"; 1099 | } 1100 | 1101 | .az1:before { 1102 | content: "\f0f1"; 1103 | } 1104 | 1105 | .ak8:before { 1106 | content: "\f0f2"; 1107 | } 1108 | 1109 | .d1:before { 1110 | content: "\f0a2"; 1111 | } 1112 | 1113 | .i8:before { 1114 | content: "\f0f4"; 1115 | } 1116 | 1117 | .k6:before { 1118 | content: "\f0f5"; 1119 | } 1120 | 1121 | .az2:before { 1122 | content: "\f0f6"; 1123 | } 1124 | 1125 | .e7:before { 1126 | content: "\f0f7"; 1127 | } 1128 | 1129 | .bb2:before { 1130 | content: "\f0f8"; 1131 | } 1132 | 1133 | .bd4:before { 1134 | content: "\f0f9"; 1135 | } 1136 | 1137 | .bn7:before { 1138 | content: "\f0fa"; 1139 | } 1140 | 1141 | .p1:before { 1142 | content: "\f0fb"; 1143 | } 1144 | 1145 | .c9:before { 1146 | content: "\f0fc"; 1147 | } 1148 | 1149 | .bh8:before { 1150 | content: "\f0fd"; 1151 | } 1152 | 1153 | .ad7:before { 1154 | content: "\f0fe"; 1155 | } 1156 | 1157 | .ar4:before { 1158 | content: "\f100"; 1159 | } 1160 | 1161 | .ar3:before { 1162 | content: "\f101"; 1163 | } 1164 | 1165 | .at1:before { 1166 | content: "\f102"; 1167 | } 1168 | 1169 | .ar5:before { 1170 | content: "\f103"; 1171 | } 1172 | 1173 | .bb8:before { 1174 | content: "\f104"; 1175 | } 1176 | 1177 | .az6:before { 1178 | content: "\f105"; 1179 | } 1180 | 1181 | .bh7:before { 1182 | content: "\f106"; 1183 | } 1184 | 1185 | .bb9:before { 1186 | content: "\f107"; 1187 | } 1188 | 1189 | .k9:before { 1190 | content: "\f108"; 1191 | } 1192 | 1193 | .x6:before { 1194 | content: "\f109"; 1195 | } 1196 | 1197 | .al1:before { 1198 | content: "\f10a"; 1199 | } 1200 | 1201 | .aa9:before, 1202 | .aa8:before { 1203 | content: "\f10b"; 1204 | } 1205 | 1206 | .h7:before { 1207 | content: "\f10c"; 1208 | } 1209 | 1210 | .ae5:before { 1211 | content: "\f10d"; 1212 | } 1213 | 1214 | .ae6:before { 1215 | content: "\f10e"; 1216 | } 1217 | 1218 | .aj5:before { 1219 | content: "\f110"; 1220 | } 1221 | 1222 | .h6:before { 1223 | content: "\f111"; 1224 | } 1225 | 1226 | .z3:before, 1227 | .af3:before { 1228 | content: "\f112"; 1229 | } 1230 | 1231 | .bc1:before { 1232 | content: "\f113"; 1233 | } 1234 | 1235 | .r6:before { 1236 | content: "\f114"; 1237 | } 1238 | 1239 | .r8:before { 1240 | content: "\f115"; 1241 | } 1242 | 1243 | .ai1:before { 1244 | content: "\f118"; 1245 | } 1246 | 1247 | .r9:before { 1248 | content: "\f119"; 1249 | } 1250 | 1251 | .aa1:before { 1252 | content: "\f11a"; 1253 | } 1254 | 1255 | .t1:before { 1256 | content: "\f11b"; 1257 | } 1258 | 1259 | .x4:before { 1260 | content: "\f11c"; 1261 | } 1262 | 1263 | .r2:before { 1264 | content: "\f11d"; 1265 | } 1266 | 1267 | .r1:before { 1268 | content: "\f11e"; 1269 | } 1270 | 1271 | .al8:before { 1272 | content: "\f120"; 1273 | } 1274 | 1275 | .i6:before { 1276 | content: "\f121"; 1277 | } 1278 | 1279 | .z4:before, 1280 | .af4:before { 1281 | content: "\f122"; 1282 | } 1283 | 1284 | .ak1:before, 1285 | .ak2:before, 1286 | .ak3:before { 1287 | content: "\f123"; 1288 | } 1289 | 1290 | .y8:before { 1291 | content: "\f124"; 1292 | } 1293 | 1294 | .k2:before { 1295 | content: "\f125"; 1296 | } 1297 | 1298 | .i7:before { 1299 | content: "\f126"; 1300 | } 1301 | 1302 | .bk7:before, 1303 | .ax8:before { 1304 | content: "\f127"; 1305 | } 1306 | 1307 | .ae3:before { 1308 | content: "\f128"; 1309 | } 1310 | 1311 | .x0:before { 1312 | content: "\f129"; 1313 | } 1314 | 1315 | .o0:before { 1316 | content: "\f12a"; 1317 | } 1318 | 1319 | .ba0:before { 1320 | content: "\f12b"; 1321 | } 1322 | 1323 | .be5:before { 1324 | content: "\f12c"; 1325 | } 1326 | 1327 | .n8:before { 1328 | content: "\f12d"; 1329 | } 1330 | 1331 | .ae1:before { 1332 | content: "\f12e"; 1333 | } 1334 | 1335 | .aa2:before { 1336 | content: "\f130"; 1337 | } 1338 | 1339 | .aa3:before { 1340 | content: "\f131"; 1341 | } 1342 | 1343 | .ah1:before { 1344 | content: "\f132"; 1345 | } 1346 | 1347 | .f6:before { 1348 | content: "\f133"; 1349 | } 1350 | 1351 | .q9:before { 1352 | content: "\f134"; 1353 | } 1354 | 1355 | .af7:before { 1356 | content: "\f135"; 1357 | } 1358 | 1359 | .bn1:before { 1360 | content: "\f136"; 1361 | } 1362 | 1363 | .aq8:before { 1364 | content: "\f137"; 1365 | } 1366 | 1367 | .aq3:before { 1368 | content: "\f138"; 1369 | } 1370 | 1371 | .ar6:before { 1372 | content: "\f139"; 1373 | } 1374 | 1375 | .aq5:before { 1376 | content: "\f13a"; 1377 | } 1378 | 1379 | .bp7:before { 1380 | content: "\f13b"; 1381 | } 1382 | 1383 | .bs4:before { 1384 | content: "\f13c"; 1385 | } 1386 | 1387 | .a2:before { 1388 | content: "\f13d"; 1389 | } 1390 | 1391 | .ao6:before { 1392 | content: "\f13e"; 1393 | } 1394 | 1395 | .e9:before { 1396 | content: "\f140"; 1397 | } 1398 | 1399 | .n3:before { 1400 | content: "\f141"; 1401 | } 1402 | 1403 | .n4:before { 1404 | content: "\f142"; 1405 | } 1406 | 1407 | .af9:before { 1408 | content: "\f143"; 1409 | } 1410 | 1411 | .az7:before { 1412 | content: "\f144"; 1413 | } 1414 | 1415 | .am4:before { 1416 | content: "\f145"; 1417 | } 1418 | 1419 | .aa6:before { 1420 | content: "\f146"; 1421 | } 1422 | 1423 | .aa7:before { 1424 | content: "\f147"; 1425 | } 1426 | 1427 | .y1:before { 1428 | content: "\f148"; 1429 | } 1430 | 1431 | .y0:before { 1432 | content: "\f149"; 1433 | } 1434 | 1435 | .h3:before { 1436 | content: "\f14a"; 1437 | } 1438 | 1439 | .ac5:before { 1440 | content: "\f14b"; 1441 | } 1442 | 1443 | .o4:before { 1444 | content: "\f14c"; 1445 | } 1446 | 1447 | .ag9:before { 1448 | content: "\f14d"; 1449 | } 1450 | 1451 | .j7:before { 1452 | content: "\f14e"; 1453 | } 1454 | 1455 | .am9:before, 1456 | .g2:before { 1457 | content: "\f150"; 1458 | } 1459 | 1460 | .an4:before, 1461 | .g5:before { 1462 | content: "\f151"; 1463 | } 1464 | 1465 | .an3:before, 1466 | .g4:before { 1467 | content: "\f152"; 1468 | } 1469 | 1470 | .bs6:before, 1471 | .bt8:before { 1472 | content: "\f153"; 1473 | } 1474 | 1475 | .bt7:before { 1476 | content: "\f154"; 1477 | } 1478 | 1479 | .bm6:before, 1480 | .bt4:before { 1481 | content: "\f155"; 1482 | } 1483 | 1484 | .bq5:before, 1485 | .bt3:before { 1486 | content: "\f156"; 1487 | } 1488 | 1489 | .bv0:before, 1490 | .bu7:before, 1491 | .bu6:before, 1492 | .bu5:before { 1493 | content: "\f157"; 1494 | } 1495 | 1496 | .bq2:before, 1497 | .bm1:before, 1498 | .bu1:before { 1499 | content: "\f158"; 1500 | } 1501 | 1502 | .bu0:before, 1503 | .bt9:before { 1504 | content: "\f159"; 1505 | } 1506 | 1507 | .bj3:before, 1508 | .bt5:before { 1509 | content: "\f15a"; 1510 | } 1511 | 1512 | .bs8:before { 1513 | content: "\f15b"; 1514 | } 1515 | 1516 | .be0:before { 1517 | content: "\f15c"; 1518 | } 1519 | 1520 | .ai4:before { 1521 | content: "\f15d"; 1522 | } 1523 | 1524 | .ai5:before { 1525 | content: "\f15e"; 1526 | } 1527 | 1528 | .ai6:before { 1529 | content: "\f160"; 1530 | } 1531 | 1532 | .ai7:before { 1533 | content: "\f161"; 1534 | } 1535 | 1536 | .aj1:before { 1537 | content: "\f162"; 1538 | } 1539 | 1540 | .aj2:before { 1541 | content: "\f163"; 1542 | } 1543 | 1544 | .am3:before { 1545 | content: "\f164"; 1546 | } 1547 | 1548 | .am0:before { 1549 | content: "\f165"; 1550 | } 1551 | 1552 | .at6:before { 1553 | content: "\f166"; 1554 | } 1555 | 1556 | .bj6:before { 1557 | content: "\f167"; 1558 | } 1559 | 1560 | .bs9:before { 1561 | content: "\f168"; 1562 | } 1563 | 1564 | .ay4:before { 1565 | content: "\f169"; 1566 | } 1567 | 1568 | .aw2:before { 1569 | content: "\f16a"; 1570 | } 1571 | 1572 | .bj8:before { 1573 | content: "\f16b"; 1574 | } 1575 | 1576 | .au1:before { 1577 | content: "\f16c"; 1578 | } 1579 | 1580 | .be4:before { 1581 | content: "\f16d"; 1582 | } 1583 | 1584 | .bl8:before { 1585 | content: "\f16e"; 1586 | } 1587 | 1588 | .bu2:before { 1589 | content: "\f170"; 1590 | } 1591 | 1592 | .be6:before { 1593 | content: "\f171"; 1594 | } 1595 | 1596 | .as2:before { 1597 | content: "\f172"; 1598 | } 1599 | 1600 | .bl7:before { 1601 | content: "\f173"; 1602 | } 1603 | 1604 | .au8:before { 1605 | content: "\f174"; 1606 | } 1607 | 1608 | .as9:before { 1609 | content: "\f175"; 1610 | } 1611 | 1612 | .au5:before { 1613 | content: "\f176"; 1614 | } 1615 | 1616 | .as5:before { 1617 | content: "\f177"; 1618 | } 1619 | 1620 | .as4:before { 1621 | content: "\f178"; 1622 | } 1623 | 1624 | .br0:before { 1625 | content: "\f179"; 1626 | } 1627 | 1628 | .bk5:before { 1629 | content: "\f17a"; 1630 | } 1631 | 1632 | .bi2:before { 1633 | content: "\f17b"; 1634 | } 1635 | 1636 | .bq9:before { 1637 | content: "\f17c"; 1638 | } 1639 | 1640 | .bf8:before { 1641 | content: "\f17d"; 1642 | } 1643 | 1644 | .bq8:before { 1645 | content: "\f17e"; 1646 | } 1647 | 1648 | .bd0:before { 1649 | content: "\f180"; 1650 | } 1651 | 1652 | .bl6:before { 1653 | content: "\f181"; 1654 | } 1655 | 1656 | .p0:before { 1657 | content: "\f182"; 1658 | } 1659 | 1660 | .z5:before { 1661 | content: "\f183"; 1662 | } 1663 | 1664 | .bl5:before, 1665 | .bf9:before { 1666 | content: "\f184"; 1667 | } 1668 | 1669 | .ak9:before { 1670 | content: "\f185"; 1671 | } 1672 | 1673 | .ab1:before { 1674 | content: "\f186"; 1675 | } 1676 | 1677 | .a3:before { 1678 | content: "\f187"; 1679 | } 1680 | 1681 | .e5:before { 1682 | content: "\f188"; 1683 | } 1684 | 1685 | .bv1:before { 1686 | content: "\f189"; 1687 | } 1688 | 1689 | .bp4:before { 1690 | content: "\f18a"; 1691 | } 1692 | 1693 | .bl3:before { 1694 | content: "\f18b"; 1695 | } 1696 | 1697 | .be8:before { 1698 | content: "\f18c"; 1699 | } 1700 | 1701 | .au0:before { 1702 | content: "\f18d"; 1703 | } 1704 | 1705 | .aq2:before { 1706 | content: "\f18e"; 1707 | } 1708 | 1709 | .aq6:before { 1710 | content: "\f190"; 1711 | } 1712 | 1713 | .an0:before, 1714 | .g3:before { 1715 | content: "\f191"; 1716 | } 1717 | 1718 | .n0:before { 1719 | content: "\f192"; 1720 | } 1721 | 1722 | .ap9:before { 1723 | content: "\f193"; 1724 | } 1725 | 1726 | .aw7:before { 1727 | content: "\f194"; 1728 | } 1729 | 1730 | .aw8:before, 1731 | .bu9:before { 1732 | content: "\f195"; 1733 | } 1734 | 1735 | .ad8:before { 1736 | content: "\f196"; 1737 | } 1738 | 1739 | .aj4:before { 1740 | content: "\f197"; 1741 | } 1742 | 1743 | .br2:before { 1744 | content: "\f198"; 1745 | } 1746 | 1747 | .n7:before { 1748 | content: "\f199"; 1749 | } 1750 | 1751 | .bf0:before { 1752 | content: "\f19a"; 1753 | } 1754 | 1755 | .bl2:before { 1756 | content: "\f19b"; 1757 | } 1758 | 1759 | .x2:before, 1760 | .b3:before, 1761 | .ao4:before { 1762 | content: "\f19c"; 1763 | } 1764 | 1765 | .ab2:before, 1766 | .t8:before { 1767 | content: "\f19d"; 1768 | } 1769 | 1770 | .bq1:before { 1771 | content: "\f19e"; 1772 | } 1773 | 1774 | .bl1:before { 1775 | content: "\f1a0"; 1776 | } 1777 | 1778 | .bl0:before { 1779 | content: "\f1a1"; 1780 | } 1781 | 1782 | .av7:before { 1783 | content: "\f1a2"; 1784 | } 1785 | 1786 | .ar0:before { 1787 | content: "\f1a3"; 1788 | } 1789 | 1790 | .az8:before { 1791 | content: "\f1a4"; 1792 | } 1793 | 1794 | .bf4:before { 1795 | content: "\f1a5"; 1796 | } 1797 | 1798 | .bt1:before { 1799 | content: "\f1a6"; 1800 | } 1801 | 1802 | .bb6:before { 1803 | content: "\f1a7"; 1804 | } 1805 | 1806 | .at8:before { 1807 | content: "\f1a8"; 1808 | } 1809 | 1810 | .bk9:before { 1811 | content: "\f1a9"; 1812 | } 1813 | 1814 | .bn3:before { 1815 | content: "\f1aa"; 1816 | } 1817 | 1818 | .x5:before { 1819 | content: "\f1ab"; 1820 | } 1821 | 1822 | .o8:before { 1823 | content: "\f1ac"; 1824 | } 1825 | 1826 | .e6:before { 1827 | content: "\f1ad"; 1828 | } 1829 | 1830 | .h5:before { 1831 | content: "\f1ae"; 1832 | } 1833 | 1834 | .ac3:before { 1835 | content: "\f1b0"; 1836 | } 1837 | 1838 | .aj6:before { 1839 | content: "\f1b1"; 1840 | } 1841 | 1842 | .k4:before { 1843 | content: "\f1b2"; 1844 | } 1845 | 1846 | .k5:before { 1847 | content: "\f1b3"; 1848 | } 1849 | 1850 | .bk6:before { 1851 | content: "\f1b4"; 1852 | } 1853 | 1854 | .at4:before { 1855 | content: "\f1b5"; 1856 | } 1857 | 1858 | .bp5:before { 1859 | content: "\f1b6"; 1860 | } 1861 | 1862 | .ax1:before { 1863 | content: "\f1b7"; 1864 | } 1865 | 1866 | .ae8:before { 1867 | content: "\f1b8"; 1868 | } 1869 | 1870 | .b0:before, 1871 | .g1:before { 1872 | content: "\f1b9"; 1873 | } 1874 | 1875 | .f1:before, 1876 | .al6:before { 1877 | content: "\f1ba"; 1878 | } 1879 | 1880 | .an8:before { 1881 | content: "\f1bb"; 1882 | } 1883 | 1884 | .bk2:before { 1885 | content: "\f1bc"; 1886 | } 1887 | 1888 | .bb3:before { 1889 | content: "\f1bd"; 1890 | } 1891 | 1892 | .bb4:before { 1893 | content: "\f1be"; 1894 | } 1895 | 1896 | .k8:before { 1897 | content: "\f1c0"; 1898 | } 1899 | 1900 | .p8:before { 1901 | content: "\f1c1"; 1902 | } 1903 | 1904 | .q4:before { 1905 | content: "\f1c2"; 1906 | } 1907 | 1908 | .p5:before { 1909 | content: "\f1c3"; 1910 | } 1911 | 1912 | .q1:before { 1913 | content: "\f1c4"; 1914 | } 1915 | 1916 | .p9:before, 1917 | .q0:before, 1918 | .p6:before { 1919 | content: "\f1c5"; 1920 | } 1921 | 1922 | .q5:before, 1923 | .p2:before { 1924 | content: "\f1c6"; 1925 | } 1926 | 1927 | .q2:before, 1928 | .p3:before { 1929 | content: "\f1c7"; 1930 | } 1931 | 1932 | .p7:before, 1933 | .q3:before { 1934 | content: "\f1c8"; 1935 | } 1936 | 1937 | .p4:before { 1938 | content: "\f1c9"; 1939 | } 1940 | 1941 | .bt0:before { 1942 | content: "\f1ca"; 1943 | } 1944 | 1945 | .bi4:before { 1946 | content: "\f1cb"; 1947 | } 1948 | 1949 | .bf7:before { 1950 | content: "\f1cc"; 1951 | } 1952 | 1953 | .y2:before, 1954 | .y3:before, 1955 | .y5:before, 1956 | .al0:before, 1957 | .y4:before { 1958 | content: "\f1cd"; 1959 | } 1960 | 1961 | .h8:before { 1962 | content: "\f1ce"; 1963 | } 1964 | 1965 | .bv8:before, 1966 | .bp8:before { 1967 | content: "\f1d0"; 1968 | } 1969 | 1970 | .bv7:before, 1971 | .bm0:before { 1972 | content: "\f1d1"; 1973 | } 1974 | 1975 | .bc3:before { 1976 | content: "\f1d2"; 1977 | } 1978 | 1979 | .bt6:before { 1980 | content: "\f1d3"; 1981 | } 1982 | 1983 | .aq7:before, 1984 | .bd8:before, 1985 | .ay2:before { 1986 | content: "\f1d4"; 1987 | } 1988 | 1989 | .av3:before { 1990 | content: "\f1d5"; 1991 | } 1992 | 1993 | .bv6:before { 1994 | content: "\f1d6"; 1995 | } 1996 | 1997 | .bm2:before, 1998 | .bm3:before { 1999 | content: "\f1d7"; 2000 | } 2001 | 2002 | .ag3:before, 2003 | .ac1:before { 2004 | content: "\f1d8"; 2005 | } 2006 | 2007 | .ag4:before, 2008 | .ac2:before { 2009 | content: "\f1d9"; 2010 | } 2011 | 2012 | .v5:before { 2013 | content: "\f1da"; 2014 | } 2015 | 2016 | .h9:before { 2017 | content: "\f1db"; 2018 | } 2019 | 2020 | .bm5:before { 2021 | content: "\f1dc"; 2022 | } 2023 | 2024 | .bd7:before { 2025 | content: "\f1dd"; 2026 | } 2027 | 2028 | .ai0:before { 2029 | content: "\f1de"; 2030 | } 2031 | 2032 | .ag7:before { 2033 | content: "\f1e0"; 2034 | } 2035 | 2036 | .ag8:before { 2037 | content: "\f1e1"; 2038 | } 2039 | 2040 | .e0:before { 2041 | content: "\f1e2"; 2042 | } 2043 | 2044 | .ai2:before, 2045 | .t0:before { 2046 | content: "\f1e3"; 2047 | } 2048 | 2049 | .ao1:before { 2050 | content: "\f1e4"; 2051 | } 2052 | 2053 | .d5:before { 2054 | content: "\f1e5"; 2055 | } 2056 | 2057 | .ad4:before { 2058 | content: "\f1e6"; 2059 | } 2060 | 2061 | .bc9:before { 2062 | content: "\f1e7"; 2063 | } 2064 | 2065 | .bm8:before { 2066 | content: "\f1e8"; 2067 | } 2068 | 2069 | .bs5:before { 2070 | content: "\f1e9"; 2071 | } 2072 | 2073 | .ab7:before { 2074 | content: "\f1ea"; 2075 | } 2076 | 2077 | .aq0:before { 2078 | content: "\f1eb"; 2079 | } 2080 | 2081 | .f2:before { 2082 | content: "\f1ec"; 2083 | } 2084 | 2085 | .bm9:before { 2086 | content: "\f1ed"; 2087 | } 2088 | 2089 | .av9:before { 2090 | content: "\f1ee"; 2091 | } 2092 | 2093 | .bj4:before { 2094 | content: "\f1f0"; 2095 | } 2096 | 2097 | .aw0:before { 2098 | content: "\f1f1"; 2099 | } 2100 | 2101 | .ba5:before { 2102 | content: "\f1f2"; 2103 | } 2104 | 2105 | .bj1:before { 2106 | content: "\f1f3"; 2107 | } 2108 | 2109 | .bd3:before { 2110 | content: "\f1f4"; 2111 | } 2112 | 2113 | .be7:before { 2114 | content: "\f1f5"; 2115 | } 2116 | 2117 | .d2:before { 2118 | content: "\f1f6"; 2119 | } 2120 | 2121 | .d3:before { 2122 | content: "\f1f7"; 2123 | } 2124 | 2125 | .an6:before { 2126 | content: "\f1f8"; 2127 | } 2128 | 2129 | .j8:before { 2130 | content: "\f1f9"; 2131 | } 2132 | 2133 | .a9:before { 2134 | content: "\f1fa"; 2135 | } 2136 | 2137 | .o7:before { 2138 | content: "\f1fb"; 2139 | } 2140 | 2141 | .ac0:before { 2142 | content: "\f1fc"; 2143 | } 2144 | 2145 | .d6:before { 2146 | content: "\f1fd"; 2147 | } 2148 | 2149 | .a4:before { 2150 | content: "\f1fe"; 2151 | } 2152 | 2153 | .ad2:before { 2154 | content: "\f200"; 2155 | } 2156 | 2157 | .y7:before { 2158 | content: "\f201"; 2159 | } 2160 | 2161 | .bn6:before { 2162 | content: "\f202"; 2163 | } 2164 | 2165 | .av6:before { 2166 | content: "\f203"; 2167 | } 2168 | 2169 | .an1:before { 2170 | content: "\f204"; 2171 | } 2172 | 2173 | .an2:before { 2174 | content: "\f205"; 2175 | } 2176 | 2177 | .d4:before { 2178 | content: "\f206"; 2179 | } 2180 | 2181 | .f0:before { 2182 | content: "\f207"; 2183 | } 2184 | 2185 | .bj9:before { 2186 | content: "\f208"; 2187 | } 2188 | 2189 | .bd5:before { 2190 | content: "\f209"; 2191 | } 2192 | 2193 | .g8:before { 2194 | content: "\f20a"; 2195 | } 2196 | 2197 | .bn8:before, 2198 | .bn9:before, 2199 | .bu8:before { 2200 | content: "\f20b"; 2201 | } 2202 | 2203 | .bg6:before { 2204 | content: "\f20c"; 2205 | } 2206 | 2207 | .bd1:before { 2208 | content: "\f20d"; 2209 | } 2210 | 2211 | .at3:before { 2212 | content: "\f20e"; 2213 | } 2214 | 2215 | .bh1:before { 2216 | content: "\f210"; 2217 | } 2218 | 2219 | .bh6:before { 2220 | content: "\f211"; 2221 | } 2222 | 2223 | .bi6:before { 2224 | content: "\f212"; 2225 | } 2226 | 2227 | .bo0:before { 2228 | content: "\f213"; 2229 | } 2230 | 2231 | .ax0:before { 2232 | content: "\f214"; 2233 | } 2234 | 2235 | .ba3:before { 2236 | content: "\f215"; 2237 | } 2238 | 2239 | .bg1:before { 2240 | content: "\f216"; 2241 | } 2242 | 2243 | .g7:before { 2244 | content: "\f217"; 2245 | } 2246 | 2247 | .g6:before { 2248 | content: "\f218"; 2249 | } 2250 | 2251 | .l2:before { 2252 | content: "\f219"; 2253 | } 2254 | 2255 | .ah2:before { 2256 | content: "\f21a"; 2257 | } 2258 | 2259 | .ap1:before { 2260 | content: "\f21b"; 2261 | } 2262 | 2263 | .ab3:before { 2264 | content: "\f21c"; 2265 | } 2266 | 2267 | .ak7:before { 2268 | content: "\f21d"; 2269 | } 2270 | 2271 | .v4:before { 2272 | content: "\f21e"; 2273 | } 2274 | 2275 | .bp9:before { 2276 | content: "\f221"; 2277 | } 2278 | 2279 | .br6:before { 2280 | content: "\f222"; 2281 | } 2282 | 2283 | .bk0:before { 2284 | content: "\f223"; 2285 | } 2286 | 2287 | .bg9:before, 2288 | .az5:before { 2289 | content: "\f224"; 2290 | } 2291 | 2292 | .as6:before { 2293 | content: "\f225"; 2294 | } 2295 | 2296 | .ay1:before { 2297 | content: "\f226"; 2298 | } 2299 | 2300 | .az3:before { 2301 | content: "\f227"; 2302 | } 2303 | 2304 | .bd2:before { 2305 | content: "\f228"; 2306 | } 2307 | 2308 | .az0:before { 2309 | content: "\f229"; 2310 | } 2311 | 2312 | .au2:before { 2313 | content: "\f22a"; 2314 | } 2315 | 2316 | .av0:before { 2317 | content: "\f22b"; 2318 | } 2319 | 2320 | .bo4:before { 2321 | content: "\f22c"; 2322 | } 2323 | 2324 | .bc5:before { 2325 | content: "\f22d"; 2326 | } 2327 | 2328 | .ar9:before { 2329 | content: "\f230"; 2330 | } 2331 | 2332 | .az9:before { 2333 | content: "\f231"; 2334 | } 2335 | 2336 | .bh5:before { 2337 | content: "\f232"; 2338 | } 2339 | 2340 | .ag5:before { 2341 | content: "\f233"; 2342 | } 2343 | 2344 | .ap0:before { 2345 | content: "\f234"; 2346 | } 2347 | 2348 | .ap2:before { 2349 | content: "\f235"; 2350 | } 2351 | 2352 | .v7:before, 2353 | .c8:before { 2354 | content: "\f236"; 2355 | } 2356 | 2357 | .bi3:before { 2358 | content: "\f237"; 2359 | } 2360 | 2361 | .bq4:before { 2362 | content: "\f238"; 2363 | } 2364 | 2365 | .bo6:before { 2366 | content: "\f239"; 2367 | } 2368 | 2369 | .bo7:before { 2370 | content: "\f23a"; 2371 | } 2372 | 2373 | .bv4:before, 2374 | .ax6:before { 2375 | content: "\f23b"; 2376 | } 2377 | 2378 | .au6:before { 2379 | content: "\f23c"; 2380 | } 2381 | 2382 | .bf6:before { 2383 | content: "\f23d"; 2384 | } 2385 | 2386 | .ax2:before { 2387 | content: "\f23e"; 2388 | } 2389 | 2390 | .c2:before, 2391 | .c4:before { 2392 | content: "\f240"; 2393 | } 2394 | 2395 | .c1:before, 2396 | .c7:before { 2397 | content: "\f241"; 2398 | } 2399 | 2400 | .c0:before, 2401 | .c5:before { 2402 | content: "\f242"; 2403 | } 2404 | 2405 | .b9:before, 2406 | .c6:before { 2407 | content: "\f243"; 2408 | } 2409 | 2410 | .b8:before, 2411 | .c3:before { 2412 | content: "\f244"; 2413 | } 2414 | 2415 | .ab4:before { 2416 | content: "\f245"; 2417 | } 2418 | 2419 | .w6:before { 2420 | content: "\f246"; 2421 | } 2422 | 2423 | .ab8:before { 2424 | content: "\f247"; 2425 | } 2426 | 2427 | .ab9:before { 2428 | content: "\f248"; 2429 | } 2430 | 2431 | .ak5:before { 2432 | content: "\f249"; 2433 | } 2434 | 2435 | .ak6:before { 2436 | content: "\f24a"; 2437 | } 2438 | 2439 | .bo8:before { 2440 | content: "\f24b"; 2441 | } 2442 | 2443 | .at7:before { 2444 | content: "\f24c"; 2445 | } 2446 | 2447 | .i1:before { 2448 | content: "\f24d"; 2449 | } 2450 | 2451 | .b1:before { 2452 | content: "\f24e"; 2453 | } 2454 | 2455 | .w4:before { 2456 | content: "\f250"; 2457 | } 2458 | 2459 | .v9:before, 2460 | .w5:before { 2461 | content: "\f251"; 2462 | } 2463 | 2464 | .w0:before, 2465 | .w3:before { 2466 | content: "\f252"; 2467 | } 2468 | 2469 | .w1:before, 2470 | .w2:before { 2471 | content: "\f253"; 2472 | } 2473 | 2474 | .v8:before { 2475 | content: "\f254"; 2476 | } 2477 | 2478 | .u0:before, 2479 | .u5:before { 2480 | content: "\f255"; 2481 | } 2482 | 2483 | .u8:before, 2484 | .u2:before { 2485 | content: "\f256"; 2486 | } 2487 | 2488 | .u6:before { 2489 | content: "\f257"; 2490 | } 2491 | 2492 | .u1:before { 2493 | content: "\f258"; 2494 | } 2495 | 2496 | .u7:before { 2497 | content: "\f259"; 2498 | } 2499 | 2500 | .u4:before { 2501 | content: "\f25a"; 2502 | } 2503 | 2504 | .u3:before { 2505 | content: "\f25b"; 2506 | } 2507 | 2508 | .an5:before { 2509 | content: "\f25c"; 2510 | } 2511 | 2512 | .af0:before { 2513 | content: "\f25d"; 2514 | } 2515 | 2516 | .j9:before { 2517 | content: "\f25e"; 2518 | } 2519 | 2520 | .bv3:before { 2521 | content: "\f260"; 2522 | } 2523 | 2524 | .be9:before { 2525 | content: "\f261"; 2526 | } 2527 | 2528 | .ba1:before { 2529 | content: "\f262"; 2530 | } 2531 | 2532 | .av5:before { 2533 | content: "\f263"; 2534 | } 2535 | 2536 | .aq4:before { 2537 | content: "\f264"; 2538 | } 2539 | 2540 | .bc7:before { 2541 | content: "\f265"; 2542 | } 2543 | 2544 | .ay8:before { 2545 | content: "\f266"; 2546 | } 2547 | 2548 | .bn2:before { 2549 | content: "\f267"; 2550 | } 2551 | 2552 | .bn0:before { 2553 | content: "\f268"; 2554 | } 2555 | 2556 | .bk3:before { 2557 | content: "\f269"; 2558 | } 2559 | 2560 | .bp1:before { 2561 | content: "\f26a"; 2562 | } 2563 | 2564 | .ar8:before { 2565 | content: "\f26b"; 2566 | } 2567 | 2568 | .ao2:before, 2569 | .al7:before { 2570 | content: "\f26c"; 2571 | } 2572 | 2573 | .bm7:before { 2574 | content: "\f26d"; 2575 | } 2576 | 2577 | .bq7:before { 2578 | content: "\f26e"; 2579 | } 2580 | 2581 | .bm4:before { 2582 | content: "\f270"; 2583 | } 2584 | 2585 | .f7:before { 2586 | content: "\f271"; 2587 | } 2588 | 2589 | .f5:before { 2590 | content: "\f272"; 2591 | } 2592 | 2593 | .f8:before { 2594 | content: "\f273"; 2595 | } 2596 | 2597 | .f4:before { 2598 | content: "\f274"; 2599 | } 2600 | 2601 | .w9:before { 2602 | content: "\f275"; 2603 | } 2604 | 2605 | .z9:before { 2606 | content: "\f276"; 2607 | } 2608 | 2609 | .aa0:before { 2610 | content: "\f277"; 2611 | } 2612 | 2613 | .z8:before { 2614 | content: "\f278"; 2615 | } 2616 | 2617 | .z6:before { 2618 | content: "\f279"; 2619 | } 2620 | 2621 | .j3:before { 2622 | content: "\f27a"; 2623 | } 2624 | 2625 | .j4:before { 2626 | content: "\f27b"; 2627 | } 2628 | 2629 | .bp2:before { 2630 | content: "\f27c"; 2631 | } 2632 | 2633 | .bq3:before { 2634 | content: "\f27d"; 2635 | } 2636 | 2637 | .bf1:before { 2638 | content: "\f27e"; 2639 | } 2640 | 2641 | .bf2:before { 2642 | content: "\f280"; 2643 | } 2644 | 2645 | .ax3:before { 2646 | content: "\f281"; 2647 | } 2648 | 2649 | .bs2:before { 2650 | content: "\f282"; 2651 | } 2652 | 2653 | .k1:before { 2654 | content: "\f283"; 2655 | } 2656 | 2657 | .bh4:before { 2658 | content: "\f284"; 2659 | } 2660 | 2661 | .bs3:before { 2662 | content: "\f285"; 2663 | } 2664 | 2665 | .ax7:before { 2666 | content: "\f286"; 2667 | } 2668 | 2669 | .bu3:before { 2670 | content: "\f287"; 2671 | } 2672 | 2673 | .ax9:before { 2674 | content: "\f288"; 2675 | } 2676 | 2677 | .bi0:before { 2678 | content: "\f289"; 2679 | } 2680 | 2681 | .bl4:before { 2682 | content: "\f28a"; 2683 | } 2684 | 2685 | .ay0:before { 2686 | content: "\f28b"; 2687 | } 2688 | 2689 | .at9:before { 2690 | content: "\f28c"; 2691 | } 2692 | 2693 | .ba4:before { 2694 | content: "\f28d"; 2695 | } 2696 | 2697 | .aw1:before { 2698 | content: "\f28e"; 2699 | } 2700 | 2701 | .ah3:before { 2702 | content: "\f290"; 2703 | } 2704 | 2705 | .ah4:before { 2706 | content: "\f291"; 2707 | } 2708 | 2709 | .u9:before { 2710 | content: "\f292"; 2711 | } 2712 | 2713 | .d7:before { 2714 | content: "\f293"; 2715 | } 2716 | 2717 | .d8:before { 2718 | content: "\f294"; 2719 | } 2720 | 2721 | .ac7:before { 2722 | content: "\f295"; 2723 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example5/result.js: -------------------------------------------------------------------------------- 1 | function Layout() { 2 | this.html = '
'; 3 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example6/file.css: -------------------------------------------------------------------------------- 1 | .user { 2 | background-color: #eee; 3 | border: 1px solid #999; 4 | width: 200px; 5 | height: 200px; 6 | position: relative; 7 | } 8 | 9 | .user::after { 10 | position: absolute; 11 | left: 0; 12 | top: 0; 13 | width: 100%; 14 | height: 20px; 15 | } 16 | 17 | .left { 18 | float: left; 19 | } 20 | 21 | .right { 22 | float: right; 23 | } 24 | 25 | .fixed { 26 | position: fixed; 27 | } 28 | 29 | .white { 30 | background-color: #fff; 31 | } 32 | 33 | input[type="number"] { 34 | border-bottom: 2px solid #333; 35 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example6/file.js: -------------------------------------------------------------------------------- 1 | function Layout() { 2 | this.html = [ 3 | '
', 4 | '
', 5 | '
Cool guy :)
', 6 | '
', 7 | '
', 8 | '
', 9 | '', 10 | '
' 11 | ]; 12 | } 13 | 14 | Layout.prototype = { 15 | render: function() { 16 | // do stuff 17 | } 18 | } 19 | 20 | new Layout().render(); -------------------------------------------------------------------------------- /gulp-css-gsub/test/example6/result.css: -------------------------------------------------------------------------------- 1 | .a2 { 2 | background-color: #eee; 3 | border: 1px solid #999; 4 | width: 200px; 5 | height: 200px; 6 | position: relative; 7 | } 8 | 9 | .a2::after { 10 | position: absolute; 11 | left: 0; 12 | top: 0; 13 | width: 100%; 14 | height: 20px; 15 | } 16 | 17 | .a1 { 18 | float: left; 19 | } 20 | 21 | .a3 { 22 | float: right; 23 | } 24 | 25 | .a4 { 26 | position: fixed; 27 | } 28 | 29 | .a0 { 30 | background-color: #fff; 31 | } 32 | 33 | input[type="number"] { 34 | border-bottom: 2px solid #333; 35 | } -------------------------------------------------------------------------------- /gulp-css-gsub/test/example6/result.js: -------------------------------------------------------------------------------- 1 | function Layout() { 2 | this.html = [ 3 | '
', 4 | '
', 5 | '
Cool guy :)
', 6 | '
', 7 | '
', 8 | '
', 9 | '', 10 | '
' 11 | ]; 12 | } 13 | Layout.prototype = { 14 | render: function () { 15 | } 16 | }; 17 | new Layout().render(); -------------------------------------------------------------------------------- /gulp-css-gsub/test/test.js: -------------------------------------------------------------------------------- 1 | var assert = require("assert"), 2 | Replacer = require("../lib/replacer.js"), 3 | fs = require("fs"); 4 | 5 | describe("replacements", function () { 6 | it("should replace 'd-example' with 'a0'", function () { 7 | var replacer, 8 | css, 9 | js; 10 | 11 | replacer = new Replacer({ 12 | cssIn: "./test/example1/file.css", 13 | jsIn: "./test/example1/file.js" 14 | }); 15 | 16 | replacer.run(); 17 | 18 | css = replacer.generateCss(); 19 | js = replacer.generateJs(); 20 | 21 | assert.equal(true, css.indexOf("a0") > -1); 22 | assert.equal(true, css.indexOf("a0") > -1); 23 | }); 24 | 25 | it("should make 5 replacements", function () { 26 | var replacer, 27 | css, 28 | js; 29 | 30 | replacer = new Replacer({ 31 | cssIn: "./test/example2/file.css", 32 | jsIn: "./test/example2/file.js" 33 | }); 34 | 35 | replacer.run(); 36 | 37 | css = replacer.generateCss(); 38 | js = replacer.generateJs(); 39 | 40 | assert.equal(5, replacer.getReplacementsCount()); 41 | }); 42 | 43 | it("should make 3 replacements with prefix 'a'", function () { 44 | var replacer, 45 | css, 46 | js; 47 | 48 | replacer = new Replacer({ 49 | cssIn: "./test/example3/file.css", 50 | jsIn: "./test/example3/file.js", 51 | prefix: "a-" 52 | }); 53 | 54 | replacer.run(); 55 | 56 | css = replacer.generateCss(); 57 | js = replacer.generateJs(); 58 | 59 | assert.equal(3, replacer.getReplacementsCount()); 60 | }); 61 | 62 | it("should make #rules.count replacements with prefix 'fa-'", function () { 63 | var replacer, 64 | css, 65 | js; 66 | 67 | replacer = new Replacer({ 68 | cssIn: "./test/example5/file.css", 69 | jsIn: "./test/example5/file.js", 70 | prefix: "fa-", 71 | replaceAll: true 72 | }); 73 | 74 | replacer.run(); 75 | 76 | css = replacer.generateCss(); 77 | js = replacer.generateJs(); 78 | 79 | fs.writeFileSync("./test/example5/result.css", css); 80 | fs.writeFileSync("./test/example5/result.js", js); 81 | 82 | assert.equal(replacer.getReplacementsCount(), replacer.getReplacementsCount()); 83 | }); 84 | 85 | it("should make 5 replacements without a prefix (based on css-file)", function () { 86 | var replacer, 87 | css, 88 | js; 89 | 90 | replacer = new Replacer({ 91 | cssIn: "./test/example6/file.css", 92 | jsIn: "./test/example6/file.js" 93 | }); 94 | 95 | replacer.run(); 96 | 97 | css = replacer.generateCss(); 98 | js = replacer.generateJs(); 99 | 100 | fs.writeFileSync("./test/example6/result.css", css); 101 | fs.writeFileSync("./test/example6/result.js", js); 102 | 103 | assert.equal(true, true); 104 | }); 105 | }); 106 | 107 | describe("replace functions", function() { 108 | describe("Sencha Touch / ExtJS", function() { 109 | it("should use sencha-plugin to replace #baseCls+'inner'", function () { 110 | var replacer, 111 | css, 112 | js; 113 | 114 | replacer = new Replacer({ 115 | cssIn: "./test/example4/file.css", 116 | jsIn: "./test/example4/file.js", 117 | prefix: "d-", 118 | replace: function(node) { 119 | do { 120 | if(node.type != "Property") 121 | break; 122 | 123 | if(node.key.name != "baseCls") 124 | break; 125 | 126 | if(node.value.type != "Literal") 127 | break; 128 | 129 | var baseCls = node.value.value, 130 | innerCls = baseCls + "-inner"; 131 | 132 | if(! this.replacements.items[baseCls]) { 133 | this.replacements.items[baseCls] = this.key; 134 | this.key = this.succ(this.key); 135 | this.replacements.count ++; 136 | } 137 | 138 | if(! this.replacements.items[innerCls]) { 139 | this.replacements.items[innerCls] = this.key; 140 | this.key = this.succ(this.key); 141 | this.replacements.count ++; 142 | } 143 | } while(false); 144 | } 145 | }); 146 | 147 | replacer.run(); 148 | 149 | css = replacer.generateCss(); 150 | js = replacer.generateJs(); 151 | 152 | assert.equal(6, replacer.getReplacementsCount()); 153 | }); 154 | }); 155 | 156 | describe("ReactJS", function() { 157 | it("should use ReactJS-plugin to replace ...", function () { 158 | // @TODO 159 | }); 160 | }); 161 | 162 | describe("EmberJS", function() { 163 | it("should use EmberJS-plugin to replace ...", function () { 164 | // @TODO 165 | }); 166 | }); 167 | }); --------------------------------------------------------------------------------