├── demo.gif
├── example.gif
├── gulp-css-gsub
├── test
│ ├── example1
│ │ ├── file.css
│ │ └── file.js
│ ├── example3
│ │ ├── file.css
│ │ └── file.js
│ ├── example4
│ │ ├── file.css
│ │ └── file.js
│ ├── example2
│ │ ├── file.css
│ │ └── file.js
│ ├── example6
│ │ ├── result.js
│ │ ├── file.js
│ │ ├── result.css
│ │ └── file.css
│ ├── test.js
│ └── example5
│ │ ├── file.css
│ │ ├── result.css
│ │ └── result.js
├── gulpfile.js
├── src
│ ├── main.js
│ └── replacer.js
├── lib
│ ├── main.js
│ └── replacer.js
├── LICENSE
├── README.md
└── package.json
├── .gitignore
├── demo
├── index.html
├── index.min.html
├── bower.json
├── dist
│ ├── css
│ │ ├── main.css
│ │ └── main.min.css
│ └── js
│ │ ├── app.js
│ │ └── app.min.js
├── package.json
├── sass
│ └── main.scss
├── gulpfile.js
├── js
│ └── app.js
└── gif.html
├── LICENSE
└── README.md
/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milworm/gulp-css-gsub/HEAD/demo.gif
--------------------------------------------------------------------------------
/example.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/milworm/gulp-css-gsub/HEAD/example.gif
--------------------------------------------------------------------------------
/gulp-css-gsub/test/example1/file.css:
--------------------------------------------------------------------------------
1 | .d-example {
2 | background: red;
3 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | demo/node_modules/
2 | demo/bower_components/
3 | gulp-css-gsub/node_modules/
4 | npm-debug.log
5 |
--------------------------------------------------------------------------------
/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/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 | }
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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/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/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/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();
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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/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/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/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();
--------------------------------------------------------------------------------
/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/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 |
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/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/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"];
--------------------------------------------------------------------------------
/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/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 | 
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 |
--------------------------------------------------------------------------------
/gulp-css-gsub/README.md:
--------------------------------------------------------------------------------
1 | # A gulp module to minify CSS class names.
2 |
3 | by 60devs
4 |
5 | 
6 |
7 | [](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/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 |
--------------------------------------------------------------------------------
/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/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 |
62 |
63 |
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/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 ";
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();
--------------------------------------------------------------------------------
/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 | });
--------------------------------------------------------------------------------
/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 ';
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 |
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 |
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 |
--------------------------------------------------------------------------------
/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/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/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 | }
--------------------------------------------------------------------------------