Updated 3rdparty structure
4
assets/3rdparty/adminLTE/plugins/ionicons/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
_site
|
||||
.sass-cache
|
||||
*.scssc
|
||||
*.swp
|
21
assets/3rdparty/adminLTE/plugins/ionicons/LICENSE
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Drifty (http://drifty.com/)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
31
assets/3rdparty/adminLTE/plugins/ionicons/bower.json
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"builder",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"version": "2.0.0",
|
||||
"name": "Ionicons",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
"Ben Sperry <ben@drifty.com>",
|
||||
"Adam Bradley <adam@drifty.com>",
|
||||
"Max Lynch <max@drifty.com>"
|
||||
],
|
||||
"keywords": [
|
||||
"fonts",
|
||||
"icon font",
|
||||
"icons",
|
||||
"ionic",
|
||||
"web font"
|
||||
],
|
||||
"main": [
|
||||
"css/ionicons.css",
|
||||
"fonts/*"
|
||||
],
|
||||
"homepage": "https://github.com/driftyco/ionicons",
|
||||
"description": "Ionicons - free and beautiful icons from the creators of Ionic Framework"
|
||||
}
|
2940
assets/3rdparty/adminLTE/plugins/ionicons/builder/build_data.json
vendored
Normal file
38
assets/3rdparty/adminLTE/plugins/ionicons/builder/cheatsheet/icon-row.html
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
<div class="icon-row">
|
||||
<div class="preview-icon"><span class="step size-12">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-14">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-16">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-18">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-21">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-24">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-32">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-48">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-64">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span><span class="step size-96">
|
||||
<i class="icon {{prefix}}{{name}}"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="preview-scale"><span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">32</span><span class="step">48</span><span class="step">64</span><span class="step">96</span></div>
|
||||
<div class="usage">
|
||||
<label>Classname:</label>
|
||||
<input class="name" type="text" readonly="readonly" onClick="this.select();" value="{{prefix}}{{name}}" />
|
||||
|
||||
<label>Selectable:</label>
|
||||
<span class="ion">{{html_code}}</span>
|
||||
|
||||
<label>Escaped HTML:</label>
|
||||
<input class="html" type="text" readonly="readonly" onClick="this.select();" value="{{escaped_html_code}}" />
|
||||
|
||||
<label>CSS Content:</label>
|
||||
<input class="css" type="text" readonly="readonly" onClick="this.select();" value="{{css_code}}" />
|
||||
</div>
|
||||
</div>
|
156
assets/3rdparty/adminLTE/plugins/ionicons/builder/cheatsheet/template.html
vendored
Normal file
@ -0,0 +1,156 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{font_name}} v{{font_version}} Cheatsheet</title>
|
||||
<style>
|
||||
* {
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
color: #444;
|
||||
font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
color: #888;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover, a:focus { color: #000; }
|
||||
|
||||
header {
|
||||
border-bottom: 2px solid #ddd;
|
||||
margin-bottom: 20px;
|
||||
overflow: hidden;
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
color: #888;
|
||||
float: left;
|
||||
font-size: 36px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
header a {
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
max-width: 1200px;
|
||||
min-width: 960px;
|
||||
padding: 0 20px;
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.icon-row {
|
||||
border-bottom: 1px dotted #ccc;
|
||||
padding: 10px 0 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.ion {
|
||||
-webkit-touch-callout: text;
|
||||
-webkit-user-select: text;
|
||||
-khtml-user-select: text;
|
||||
-moz-user-select: text;
|
||||
-ms-user-select: text;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
.preview-icon { vertical-align: bottom; }
|
||||
|
||||
.preview-scale {
|
||||
color: #888;
|
||||
font-size: 12px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.step {
|
||||
display: inline-block;
|
||||
line-height: 1;
|
||||
position: relative;
|
||||
width: 10%;
|
||||
}
|
||||
|
||||
.step i {
|
||||
-webkit-transition: opacity .3s;
|
||||
-moz-transition: opacity .3s;
|
||||
-ms-transition: opacity .3s;
|
||||
-o-transition: opacity .3s;
|
||||
transition: opacity .3s;
|
||||
}
|
||||
|
||||
.step:hover i { opacity: .3; }
|
||||
|
||||
.size-12 { font-size: 12px; }
|
||||
.size-14 { font-size: 14px; }
|
||||
.size-16 { font-size: 16px; }
|
||||
.size-18 { font-size: 18px; }
|
||||
.size-21 { font-size: 21px; }
|
||||
.size-24 { font-size: 24px; }
|
||||
.size-32 { font-size: 32px; }
|
||||
.size-48 { font-size: 48px; }
|
||||
.size-64 { font-size: 64px; }
|
||||
.size-96 { font-size: 96px; }
|
||||
|
||||
.usage { margin-top: 10px; }
|
||||
.usage input {
|
||||
font-family: monospace;
|
||||
margin-right: 3px;
|
||||
padding: 2px 5px;
|
||||
text-align: center;
|
||||
-webkit-touch-callout: text;
|
||||
-webkit-user-select: text;
|
||||
-khtml-user-select: text;
|
||||
-moz-user-select: text;
|
||||
-ms-user-select: text;
|
||||
user-select: text;
|
||||
}
|
||||
|
||||
.usage label {
|
||||
font-size: 12px;
|
||||
text-align: right;
|
||||
padding: 0 3px 0 60px;
|
||||
}
|
||||
.usage label:first-child { padding-left: 0; }
|
||||
.usage .name { width: 180px; }
|
||||
.usage .html { width: 80px; }
|
||||
.usage .css { width: 80px; }
|
||||
|
||||
footer {
|
||||
color: #888;
|
||||
font-size: 12px;
|
||||
padding: 20px 0;
|
||||
}
|
||||
</style>
|
||||
<link href="css/ionicons.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>{{font_name}} v{{font_version}} Cheatsheet, {{icon_count}} icons:</h1>
|
||||
<p><a href="http://ionicons.com/">Ionicons Homepage</a></p>
|
||||
</header>
|
||||
<div class="content">
|
||||
{{content}}
|
||||
</div>
|
||||
<footer>
|
||||
Made with love by the <a href="http://ionicframework.com/">Ionic Framework</a>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
318
assets/3rdparty/adminLTE/plugins/ionicons/builder/generate.py
vendored
Normal file
@ -0,0 +1,318 @@
|
||||
from subprocess import call
|
||||
import os
|
||||
import json
|
||||
|
||||
|
||||
BUILDER_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||
ROOT_PATH = os.path.join(BUILDER_PATH, '..')
|
||||
FONTS_FOLDER_PATH = os.path.join(ROOT_PATH, 'fonts')
|
||||
CSS_FOLDER_PATH = os.path.join(ROOT_PATH, 'css')
|
||||
SCSS_FOLDER_PATH = os.path.join(ROOT_PATH, 'scss')
|
||||
LESS_FOLDER_PATH = os.path.join(ROOT_PATH, 'less')
|
||||
|
||||
|
||||
def main():
|
||||
generate_font_files()
|
||||
|
||||
data = get_build_data()
|
||||
|
||||
rename_svg_glyph_names(data)
|
||||
generate_scss(data)
|
||||
generate_less(data)
|
||||
generate_cheatsheet(data)
|
||||
generate_component_json(data)
|
||||
generate_composer_json(data)
|
||||
generate_bower_json(data)
|
||||
|
||||
|
||||
def generate_font_files():
|
||||
print "Generate Fonts"
|
||||
cmd = "fontforge -script %s/scripts/generate_font.py" % (BUILDER_PATH)
|
||||
call(cmd, shell=True)
|
||||
|
||||
|
||||
def rename_svg_glyph_names(data):
|
||||
# hacky and slow (but safe) way to rename glyph-name attributes
|
||||
svg_path = os.path.join(FONTS_FOLDER_PATH, 'ionicons.svg')
|
||||
svg_file = open(svg_path, 'r+')
|
||||
svg_text = svg_file.read()
|
||||
svg_file.seek(0)
|
||||
|
||||
for ionicon in data['icons']:
|
||||
# uniF2CA
|
||||
org_name = 'uni%s' % (ionicon['code'].replace('0x', '').upper())
|
||||
ion_name = 'ion-%s' % (ionicon['name'])
|
||||
svg_text = svg_text.replace(org_name, ion_name)
|
||||
|
||||
svg_file.write(svg_text)
|
||||
svg_file.close()
|
||||
|
||||
|
||||
def generate_less(data):
|
||||
print "Generate LESS"
|
||||
font_name = data['name']
|
||||
font_version = data['version']
|
||||
css_prefix = data['prefix']
|
||||
variables_file_path = os.path.join(LESS_FOLDER_PATH, '_ionicons-variables.less')
|
||||
icons_file_path = os.path.join(LESS_FOLDER_PATH, '_ionicons-icons.less')
|
||||
|
||||
d = []
|
||||
d.append('/*!');
|
||||
d.append('Ionicons, v%s' % (font_version) );
|
||||
d.append('Created by Ben Sperry for the Ionic Framework, http://ionicons.com/');
|
||||
d.append('https://twitter.com/benjsperry https://twitter.com/ionicframework');
|
||||
d.append('MIT License: https://github.com/driftyco/ionicons');
|
||||
d.append('*/');
|
||||
d.append('// Ionicons Variables')
|
||||
d.append('// --------------------------\n')
|
||||
d.append('@ionicons-font-path: "../fonts";')
|
||||
d.append('@ionicons-font-family: "%s";' % (font_name) )
|
||||
d.append('@ionicons-version: "%s";' % (font_version) )
|
||||
d.append('@ionicons-prefix: %s;' % (css_prefix) )
|
||||
d.append('')
|
||||
for ionicon in data['icons']:
|
||||
chr_code = ionicon['code'].replace('0x', '\\')
|
||||
d.append('@ionicon-var-%s: "%s";' % (ionicon['name'], chr_code) )
|
||||
f = open(variables_file_path, 'w')
|
||||
f.write( '\n'.join(d) )
|
||||
f.close()
|
||||
|
||||
d = []
|
||||
d.append('// Ionicons Icons')
|
||||
d.append('// --------------------------\n')
|
||||
|
||||
group = [ '.%s' % (data['name'].lower()) ]
|
||||
for ionicon in data['icons']:
|
||||
group.append('.@{ionicons-prefix}%s:before' % (ionicon['name']) )
|
||||
|
||||
d.append( ',\n'.join(group) )
|
||||
|
||||
d.append('{')
|
||||
d.append(' &:extend(.ion);')
|
||||
d.append('}')
|
||||
|
||||
for ionicon in data['icons']:
|
||||
chr_code = ionicon['code'].replace('0x', '\\')
|
||||
d.append('.@{ionicons-prefix}%s:before { content: @ionicon-var-%s; }' % (ionicon['name'], ionicon['name']) )
|
||||
|
||||
f = open(icons_file_path, 'w')
|
||||
f.write( '\n'.join(d) )
|
||||
f.close()
|
||||
|
||||
|
||||
def generate_scss(data):
|
||||
print "Generate SCSS"
|
||||
font_name = data['name']
|
||||
font_version = data['version']
|
||||
css_prefix = data['prefix']
|
||||
variables_file_path = os.path.join(SCSS_FOLDER_PATH, '_ionicons-variables.scss')
|
||||
icons_file_path = os.path.join(SCSS_FOLDER_PATH, '_ionicons-icons.scss')
|
||||
|
||||
d = []
|
||||
d.append('// Ionicons Variables')
|
||||
d.append('// --------------------------\n')
|
||||
d.append('$ionicons-font-path: "../fonts" !default;')
|
||||
d.append('$ionicons-font-family: "%s" !default;' % (font_name) )
|
||||
d.append('$ionicons-version: "%s" !default;' % (font_version) )
|
||||
d.append('$ionicons-prefix: %s !default;' % (css_prefix) )
|
||||
d.append('')
|
||||
for ionicon in data['icons']:
|
||||
chr_code = ionicon['code'].replace('0x', '\\')
|
||||
d.append('$ionicon-var-%s: "%s";' % (ionicon['name'], chr_code) )
|
||||
f = open(variables_file_path, 'w')
|
||||
f.write( '\n'.join(d) )
|
||||
f.close()
|
||||
|
||||
d = []
|
||||
d.append('// Ionicons Icons')
|
||||
d.append('// --------------------------\n')
|
||||
|
||||
group = [ '.%s' % (data['name'].lower()) ]
|
||||
for ionicon in data['icons']:
|
||||
group.append('.#{$ionicons-prefix}%s:before' % (ionicon['name']) )
|
||||
|
||||
d.append( ',\n'.join(group) )
|
||||
|
||||
d.append('{')
|
||||
d.append(' @extend .ion;')
|
||||
d.append('}')
|
||||
|
||||
for ionicon in data['icons']:
|
||||
chr_code = ionicon['code'].replace('0x', '\\')
|
||||
d.append('.#{$ionicons-prefix}%s:before { content: $ionicon-var-%s; }' % (ionicon['name'], ionicon['name']) )
|
||||
|
||||
f = open(icons_file_path, 'w')
|
||||
f.write( '\n'.join(d) )
|
||||
f.close()
|
||||
|
||||
generate_css_from_scss(data)
|
||||
|
||||
|
||||
def generate_css_from_scss(data):
|
||||
print "Generate CSS From SCSS"
|
||||
|
||||
scss_file_path = os.path.join(SCSS_FOLDER_PATH, 'ionicons.scss')
|
||||
css_file_path = os.path.join(CSS_FOLDER_PATH, 'ionicons.css')
|
||||
css_min_file_path = os.path.join(CSS_FOLDER_PATH, 'ionicons.min.css')
|
||||
|
||||
cmd = "sass %s %s --style compact" % (scss_file_path, css_file_path)
|
||||
call(cmd, shell=True)
|
||||
|
||||
print "Generate Minified CSS From SCSS"
|
||||
cmd = "sass %s %s --style compressed" % (scss_file_path, css_min_file_path)
|
||||
call(cmd, shell=True)
|
||||
|
||||
|
||||
def generate_cheatsheet(data):
|
||||
print "Generate Cheatsheet"
|
||||
|
||||
cheatsheet_file_path = os.path.join(ROOT_PATH, 'cheatsheet.html')
|
||||
template_path = os.path.join(BUILDER_PATH, 'cheatsheet', 'template.html')
|
||||
icon_row_path = os.path.join(BUILDER_PATH, 'cheatsheet', 'icon-row.html')
|
||||
|
||||
f = open(template_path, 'r')
|
||||
template_html = f.read()
|
||||
f.close()
|
||||
|
||||
f = open(icon_row_path, 'r')
|
||||
icon_row_template = f.read()
|
||||
f.close()
|
||||
|
||||
content = []
|
||||
|
||||
for ionicon in data['icons']:
|
||||
css_code = ionicon['code'].replace('0x', '\\')
|
||||
escaped_html_code = ionicon['code'].replace('0x', '&#x') + ';'
|
||||
html_code = ionicon['code'].replace('0x', '&#x') + ';'
|
||||
item_row = icon_row_template
|
||||
|
||||
item_row = item_row.replace('{{name}}', ionicon['name'])
|
||||
item_row = item_row.replace('{{prefix}}', data['prefix'])
|
||||
item_row = item_row.replace('{{css_code}}', css_code)
|
||||
item_row = item_row.replace('{{escaped_html_code}}', escaped_html_code)
|
||||
item_row = item_row.replace('{{html_code}}', html_code)
|
||||
|
||||
content.append(item_row)
|
||||
|
||||
template_html = template_html.replace("{{font_name}}", data["name"])
|
||||
template_html = template_html.replace("{{font_version}}", data["version"])
|
||||
template_html = template_html.replace("{{icon_count}}", str(len(data["icons"])) )
|
||||
template_html = template_html.replace("{{content}}", '\n'.join(content) )
|
||||
|
||||
f = open(cheatsheet_file_path, 'w')
|
||||
f.write(template_html)
|
||||
f.close()
|
||||
|
||||
|
||||
def generate_component_json(data):
|
||||
print "Generate component.json"
|
||||
d = {
|
||||
"name": data['name'],
|
||||
"repo": "driftyco/ionicons",
|
||||
"description": "The premium icon font for Ionic Framework.",
|
||||
"version": data['version'],
|
||||
"keywords": [],
|
||||
"dependencies": {},
|
||||
"development": {},
|
||||
"license": "MIT",
|
||||
"styles": [
|
||||
"css/%s.css" % (data['name'].lower())
|
||||
],
|
||||
"fonts": [
|
||||
"fonts/%s.eot" % (data['name'].lower()),
|
||||
"fonts/%s.svg" % (data['name'].lower()),
|
||||
"fonts/%s.ttf" % (data['name'].lower()),
|
||||
"fonts/%s.woff" % (data['name'].lower())
|
||||
]
|
||||
}
|
||||
txt = json.dumps(d, indent=4, separators=(',', ': '))
|
||||
|
||||
component_file_path = os.path.join(ROOT_PATH, 'component.json')
|
||||
f = open(component_file_path, 'w')
|
||||
f.write(txt)
|
||||
f.close()
|
||||
|
||||
|
||||
def generate_composer_json(data):
|
||||
print "Generate composer.json"
|
||||
d = {
|
||||
"name": "driftyco/ionicons",
|
||||
"description": "The premium icon font for Ionic Framework.",
|
||||
"keywords": [ "fonts", "icon font", "icons", "ionic", "web font"],
|
||||
"homepage": "http://ionicons.com/",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ben Sperry",
|
||||
"email": "ben@drifty.com",
|
||||
"role": "Designer",
|
||||
"homepage": "https://twitter.com/benjsperry"
|
||||
},
|
||||
{
|
||||
"name": "Adam Bradley",
|
||||
"email": "adam@drifty.com",
|
||||
"role": "Developer",
|
||||
"homepage": "https://twitter.com/adamdbradley"
|
||||
},
|
||||
{
|
||||
"name": "Max Lynch",
|
||||
"email": "max@drifty.com",
|
||||
"role": "Developer",
|
||||
"homepage": "https://twitter.com/maxlynch"
|
||||
}
|
||||
],
|
||||
"extra": {},
|
||||
"license": [ "MIT" ]
|
||||
}
|
||||
txt = json.dumps(d, indent=4, separators=(',', ': '))
|
||||
|
||||
composer_file_path = os.path.join(ROOT_PATH, 'composer.json')
|
||||
f = open(composer_file_path, 'w')
|
||||
f.write(txt)
|
||||
f.close()
|
||||
|
||||
|
||||
def generate_bower_json(data):
|
||||
print "Generate bower.json"
|
||||
d = {
|
||||
"name": data['name'],
|
||||
"version": data['version'],
|
||||
"homepage": "https://github.com/driftyco/ionicons",
|
||||
"authors": [
|
||||
"Ben Sperry <ben@drifty.com>",
|
||||
"Adam Bradley <adam@drifty.com>",
|
||||
"Max Lynch <max@drifty.com>"
|
||||
],
|
||||
"description": "Ionicons - free and beautiful icons from the creators of Ionic Framework",
|
||||
"main": [
|
||||
"css/%s.css" % (data['name'].lower()),
|
||||
"fonts/*"
|
||||
],
|
||||
"keywords": [ "fonts", "icon font", "icons", "ionic", "web font"],
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"builder",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
]
|
||||
}
|
||||
txt = json.dumps(d, indent=4, separators=(',', ': '))
|
||||
|
||||
bower_file_path = os.path.join(ROOT_PATH, 'bower.json')
|
||||
f = open(bower_file_path, 'w')
|
||||
f.write(txt)
|
||||
f.close()
|
||||
|
||||
|
||||
def get_build_data():
|
||||
build_data_path = os.path.join(BUILDER_PATH, 'build_data.json')
|
||||
f = open(build_data_path, 'r')
|
||||
data = json.loads(f.read())
|
||||
f.close()
|
||||
return data
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
2940
assets/3rdparty/adminLTE/plugins/ionicons/builder/manifest.json
vendored
Normal file
466
assets/3rdparty/adminLTE/plugins/ionicons/builder/scripts/eotlitetool.py
vendored
Normal file
@ -0,0 +1,466 @@
|
||||
#!/usr/bin/env python
|
||||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public License Version
|
||||
# 1.1 (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
# http://www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
# for the specific language governing rights and limitations under the
|
||||
# License.
|
||||
#
|
||||
# The Original Code is font utility code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Mozilla Corporation.
|
||||
# Portions created by the Initial Developer are Copyright (C) 2009
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# John Daggett <jdaggett@mozilla.com>
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
# of those above. If you wish to allow use of your version of this file only
|
||||
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
# use your version of this file under the terms of the MPL, indicate your
|
||||
# decision by deleting the provisions above and replace them with the notice
|
||||
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
# the provisions above, a recipient may use your version of this file under
|
||||
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK ***** */
|
||||
|
||||
# eotlitetool.py - create EOT version of OpenType font for use with IE
|
||||
#
|
||||
# Usage: eotlitetool.py [-o output-filename] font1 [font2 ...]
|
||||
#
|
||||
|
||||
# OpenType file structure
|
||||
# http://www.microsoft.com/typography/otspec/otff.htm
|
||||
#
|
||||
# Types:
|
||||
#
|
||||
# BYTE 8-bit unsigned integer.
|
||||
# CHAR 8-bit signed integer.
|
||||
# USHORT 16-bit unsigned integer.
|
||||
# SHORT 16-bit signed integer.
|
||||
# ULONG 32-bit unsigned integer.
|
||||
# Fixed 32-bit signed fixed-point number (16.16)
|
||||
# LONGDATETIME Date represented in number of seconds since 12:00 midnight, January 1, 1904. The value is represented as a signed 64-bit integer.
|
||||
#
|
||||
# SFNT Header
|
||||
#
|
||||
# Fixed sfnt version // 0x00010000 for version 1.0.
|
||||
# USHORT numTables // Number of tables.
|
||||
# USHORT searchRange // (Maximum power of 2 <= numTables) x 16.
|
||||
# USHORT entrySelector // Log2(maximum power of 2 <= numTables).
|
||||
# USHORT rangeShift // NumTables x 16-searchRange.
|
||||
#
|
||||
# Table Directory
|
||||
#
|
||||
# ULONG tag // 4-byte identifier.
|
||||
# ULONG checkSum // CheckSum for this table.
|
||||
# ULONG offset // Offset from beginning of TrueType font file.
|
||||
# ULONG length // Length of this table.
|
||||
#
|
||||
# OS/2 Table (Version 4)
|
||||
#
|
||||
# USHORT version // 0x0004
|
||||
# SHORT xAvgCharWidth
|
||||
# USHORT usWeightClass
|
||||
# USHORT usWidthClass
|
||||
# USHORT fsType
|
||||
# SHORT ySubscriptXSize
|
||||
# SHORT ySubscriptYSize
|
||||
# SHORT ySubscriptXOffset
|
||||
# SHORT ySubscriptYOffset
|
||||
# SHORT ySuperscriptXSize
|
||||
# SHORT ySuperscriptYSize
|
||||
# SHORT ySuperscriptXOffset
|
||||
# SHORT ySuperscriptYOffset
|
||||
# SHORT yStrikeoutSize
|
||||
# SHORT yStrikeoutPosition
|
||||
# SHORT sFamilyClass
|
||||
# BYTE panose[10]
|
||||
# ULONG ulUnicodeRange1 // Bits 0-31
|
||||
# ULONG ulUnicodeRange2 // Bits 32-63
|
||||
# ULONG ulUnicodeRange3 // Bits 64-95
|
||||
# ULONG ulUnicodeRange4 // Bits 96-127
|
||||
# CHAR achVendID[4]
|
||||
# USHORT fsSelection
|
||||
# USHORT usFirstCharIndex
|
||||
# USHORT usLastCharIndex
|
||||
# SHORT sTypoAscender
|
||||
# SHORT sTypoDescender
|
||||
# SHORT sTypoLineGap
|
||||
# USHORT usWinAscent
|
||||
# USHORT usWinDescent
|
||||
# ULONG ulCodePageRange1 // Bits 0-31
|
||||
# ULONG ulCodePageRange2 // Bits 32-63
|
||||
# SHORT sxHeight
|
||||
# SHORT sCapHeight
|
||||
# USHORT usDefaultChar
|
||||
# USHORT usBreakChar
|
||||
# USHORT usMaxContext
|
||||
#
|
||||
#
|
||||
# The Naming Table is organized as follows:
|
||||
#
|
||||
# [name table header]
|
||||
# [name records]
|
||||
# [string data]
|
||||
#
|
||||
# Name Table Header
|
||||
#
|
||||
# USHORT format // Format selector (=0).
|
||||
# USHORT count // Number of name records.
|
||||
# USHORT stringOffset // Offset to start of string storage (from start of table).
|
||||
#
|
||||
# Name Record
|
||||
#
|
||||
# USHORT platformID // Platform ID.
|
||||
# USHORT encodingID // Platform-specific encoding ID.
|
||||
# USHORT languageID // Language ID.
|
||||
# USHORT nameID // Name ID.
|
||||
# USHORT length // String length (in bytes).
|
||||
# USHORT offset // String offset from start of storage area (in bytes).
|
||||
#
|
||||
# head Table
|
||||
#
|
||||
# Fixed tableVersion // Table version number 0x00010000 for version 1.0.
|
||||
# Fixed fontRevision // Set by font manufacturer.
|
||||
# ULONG checkSumAdjustment // To compute: set it to 0, sum the entire font as ULONG, then store 0xB1B0AFBA - sum.
|
||||
# ULONG magicNumber // Set to 0x5F0F3CF5.
|
||||
# USHORT flags
|
||||
# USHORT unitsPerEm // Valid range is from 16 to 16384. This value should be a power of 2 for fonts that have TrueType outlines.
|
||||
# LONGDATETIME created // Number of seconds since 12:00 midnight, January 1, 1904. 64-bit integer
|
||||
# LONGDATETIME modified // Number of seconds since 12:00 midnight, January 1, 1904. 64-bit integer
|
||||
# SHORT xMin // For all glyph bounding boxes.
|
||||
# SHORT yMin
|
||||
# SHORT xMax
|
||||
# SHORT yMax
|
||||
# USHORT macStyle
|
||||
# USHORT lowestRecPPEM // Smallest readable size in pixels.
|
||||
# SHORT fontDirectionHint
|
||||
# SHORT indexToLocFormat // 0 for short offsets, 1 for long.
|
||||
# SHORT glyphDataFormat // 0 for current format.
|
||||
#
|
||||
#
|
||||
#
|
||||
# Embedded OpenType (EOT) file format
|
||||
# http://www.w3.org/Submission/EOT/
|
||||
#
|
||||
# EOT version 0x00020001
|
||||
#
|
||||
# An EOT font consists of a header with the original OpenType font
|
||||
# appended at the end. Most of the data in the EOT header is simply a
|
||||
# copy of data from specific tables within the font data. The exceptions
|
||||
# are the 'Flags' field and the root string name field. The root string
|
||||
# is a set of names indicating domains for which the font data can be
|
||||
# used. A null root string implies the font data can be used anywhere.
|
||||
# The EOT header is in little-endian byte order but the font data remains
|
||||
# in big-endian order as specified by the OpenType spec.
|
||||
#
|
||||
# Overall structure:
|
||||
#
|
||||
# [EOT header]
|
||||
# [EOT name records]
|
||||
# [font data]
|
||||
#
|
||||
# EOT header
|
||||
#
|
||||
# ULONG eotSize // Total structure length in bytes (including string and font data)
|
||||
# ULONG fontDataSize // Length of the OpenType font (FontData) in bytes
|
||||
# ULONG version // Version number of this format - 0x00020001
|
||||
# ULONG flags // Processing Flags (0 == no special processing)
|
||||
# BYTE fontPANOSE[10] // OS/2 Table panose
|
||||
# BYTE charset // DEFAULT_CHARSET (0x01)
|
||||
# BYTE italic // 0x01 if ITALIC in OS/2 Table fsSelection is set, 0 otherwise
|
||||
# ULONG weight // OS/2 Table usWeightClass
|
||||
# USHORT fsType // OS/2 Table fsType (specifies embedding permission flags)
|
||||
# USHORT magicNumber // Magic number for EOT file - 0x504C.
|
||||
# ULONG unicodeRange1 // OS/2 Table ulUnicodeRange1
|
||||
# ULONG unicodeRange2 // OS/2 Table ulUnicodeRange2
|
||||
# ULONG unicodeRange3 // OS/2 Table ulUnicodeRange3
|
||||
# ULONG unicodeRange4 // OS/2 Table ulUnicodeRange4
|
||||
# ULONG codePageRange1 // OS/2 Table ulCodePageRange1
|
||||
# ULONG codePageRange2 // OS/2 Table ulCodePageRange2
|
||||
# ULONG checkSumAdjustment // head Table CheckSumAdjustment
|
||||
# ULONG reserved[4] // Reserved - must be 0
|
||||
# USHORT padding1 // Padding - must be 0
|
||||
#
|
||||
# EOT name records
|
||||
#
|
||||
# USHORT FamilyNameSize // Font family name size in bytes
|
||||
# BYTE FamilyName[FamilyNameSize] // Font family name (name ID = 1), little-endian UTF-16
|
||||
# USHORT Padding2 // Padding - must be 0
|
||||
#
|
||||
# USHORT StyleNameSize // Style name size in bytes
|
||||
# BYTE StyleName[StyleNameSize] // Style name (name ID = 2), little-endian UTF-16
|
||||
# USHORT Padding3 // Padding - must be 0
|
||||
#
|
||||
# USHORT VersionNameSize // Version name size in bytes
|
||||
# bytes VersionName[VersionNameSize] // Version name (name ID = 5), little-endian UTF-16
|
||||
# USHORT Padding4 // Padding - must be 0
|
||||
#
|
||||
# USHORT FullNameSize // Full name size in bytes
|
||||
# BYTE FullName[FullNameSize] // Full name (name ID = 4), little-endian UTF-16
|
||||
# USHORT Padding5 // Padding - must be 0
|
||||
#
|
||||
# USHORT RootStringSize // Root string size in bytes
|
||||
# BYTE RootString[RootStringSize] // Root string, little-endian UTF-16
|
||||
|
||||
|
||||
|
||||
import optparse
|
||||
import struct
|
||||
|
||||
class FontError(Exception):
|
||||
"""Error related to font handling"""
|
||||
pass
|
||||
|
||||
def multichar(str):
|
||||
vals = struct.unpack('4B', str[:4])
|
||||
return (vals[0] << 24) + (vals[1] << 16) + (vals[2] << 8) + vals[3]
|
||||
|
||||
def multicharval(v):
|
||||
return struct.pack('4B', (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF)
|
||||
|
||||
class EOT:
|
||||
EOT_VERSION = 0x00020001
|
||||
EOT_MAGIC_NUMBER = 0x504c
|
||||
EOT_DEFAULT_CHARSET = 0x01
|
||||
EOT_FAMILY_NAME_INDEX = 0 # order of names in variable portion of EOT header
|
||||
EOT_STYLE_NAME_INDEX = 1
|
||||
EOT_VERSION_NAME_INDEX = 2
|
||||
EOT_FULL_NAME_INDEX = 3
|
||||
EOT_NUM_NAMES = 4
|
||||
|
||||
EOT_HEADER_PACK = '<4L10B2BL2H7L18x'
|
||||
|
||||
class OpenType:
|
||||
SFNT_CFF = multichar('OTTO') # Postscript CFF SFNT version
|
||||
SFNT_TRUE = 0x10000 # Standard TrueType version
|
||||
SFNT_APPLE = multichar('true') # Apple TrueType version
|
||||
|
||||
SFNT_UNPACK = '>I4H'
|
||||
TABLE_DIR_UNPACK = '>4I'
|
||||
|
||||
TABLE_HEAD = multichar('head') # TrueType table tags
|
||||
TABLE_NAME = multichar('name')
|
||||
TABLE_OS2 = multichar('OS/2')
|
||||
TABLE_GLYF = multichar('glyf')
|
||||
TABLE_CFF = multichar('CFF ')
|
||||
|
||||
OS2_FSSELECTION_ITALIC = 0x1
|
||||
OS2_UNPACK = '>4xH2xH22x10B4L4xH14x2L'
|
||||
|
||||
HEAD_UNPACK = '>8xL'
|
||||
|
||||
NAME_RECORD_UNPACK = '>6H'
|
||||
NAME_ID_FAMILY = 1
|
||||
NAME_ID_STYLE = 2
|
||||
NAME_ID_UNIQUE = 3
|
||||
NAME_ID_FULL = 4
|
||||
NAME_ID_VERSION = 5
|
||||
NAME_ID_POSTSCRIPT = 6
|
||||
PLATFORM_ID_UNICODE = 0 # Mac OS uses this typically
|
||||
PLATFORM_ID_MICROSOFT = 3
|
||||
ENCODING_ID_MICROSOFT_UNICODEBMP = 1 # with Microsoft platformID BMP-only Unicode encoding
|
||||
LANG_ID_MICROSOFT_EN_US = 0x0409 # with Microsoft platformID EN US lang code
|
||||
|
||||
def eotname(ttf):
|
||||
i = ttf.rfind('.')
|
||||
if i != -1:
|
||||
ttf = ttf[:i]
|
||||
return ttf + '.eotlite'
|
||||
|
||||
def readfont(f):
|
||||
data = open(f, 'rb').read()
|
||||
return data
|
||||
|
||||
def get_table_directory(data):
|
||||
"""read the SFNT header and table directory"""
|
||||
datalen = len(data)
|
||||
sfntsize = struct.calcsize(OpenType.SFNT_UNPACK)
|
||||
if sfntsize > datalen:
|
||||
raise FontError, 'truncated font data'
|
||||
sfntvers, numTables = struct.unpack(OpenType.SFNT_UNPACK, data[:sfntsize])[:2]
|
||||
if sfntvers != OpenType.SFNT_CFF and sfntvers != OpenType.SFNT_TRUE:
|
||||
raise FontError, 'invalid font type';
|
||||
|
||||
font = {}
|
||||
font['version'] = sfntvers
|
||||
font['numTables'] = numTables
|
||||
|
||||
# create set of offsets, lengths for tables
|
||||
table_dir_size = struct.calcsize(OpenType.TABLE_DIR_UNPACK)
|
||||
if sfntsize + table_dir_size * numTables > datalen:
|
||||
raise FontError, 'truncated font data, table directory extends past end of data'
|
||||
table_dir = {}
|
||||
for i in range(0, numTables):
|
||||
start = sfntsize + i * table_dir_size
|
||||
end = start + table_dir_size
|
||||
tag, check, bongo, dirlen = struct.unpack(OpenType.TABLE_DIR_UNPACK, data[start:end])
|
||||
table_dir[tag] = {'offset': bongo, 'length': dirlen, 'checksum': check}
|
||||
|
||||
font['tableDir'] = table_dir
|
||||
|
||||
return font
|
||||
|
||||
def get_name_records(nametable):
|
||||
"""reads through the name records within name table"""
|
||||
name = {}
|
||||
# read the header
|
||||
headersize = 6
|
||||
count, strOffset = struct.unpack('>2H', nametable[2:6])
|
||||
namerecsize = struct.calcsize(OpenType.NAME_RECORD_UNPACK)
|
||||
if count * namerecsize + headersize > len(nametable):
|
||||
raise FontError, 'names exceed size of name table'
|
||||
name['count'] = count
|
||||
name['strOffset'] = strOffset
|
||||
|
||||
# read through the name records
|
||||
namerecs = {}
|
||||
for i in range(0, count):
|
||||
start = headersize + i * namerecsize
|
||||
end = start + namerecsize
|
||||
platformID, encodingID, languageID, nameID, namelen, offset = struct.unpack(OpenType.NAME_RECORD_UNPACK, nametable[start:end])
|
||||
if platformID != OpenType.PLATFORM_ID_MICROSOFT or \
|
||||
encodingID != OpenType.ENCODING_ID_MICROSOFT_UNICODEBMP or \
|
||||
languageID != OpenType.LANG_ID_MICROSOFT_EN_US:
|
||||
continue
|
||||
namerecs[nameID] = {'offset': offset, 'length': namelen}
|
||||
|
||||
name['namerecords'] = namerecs
|
||||
return name
|
||||
|
||||
def make_eot_name_headers(fontdata, nameTableDir):
|
||||
"""extracts names from the name table and generates the names header portion of the EOT header"""
|
||||
nameoffset = nameTableDir['offset']
|
||||
namelen = nameTableDir['length']
|
||||
name = get_name_records(fontdata[nameoffset : nameoffset + namelen])
|
||||
namestroffset = name['strOffset']
|
||||
namerecs = name['namerecords']
|
||||
|
||||
eotnames = (OpenType.NAME_ID_FAMILY, OpenType.NAME_ID_STYLE, OpenType.NAME_ID_VERSION, OpenType.NAME_ID_FULL)
|
||||
nameheaders = []
|
||||
for nameid in eotnames:
|
||||
if nameid in namerecs:
|
||||
namerecord = namerecs[nameid]
|
||||
noffset = namerecord['offset']
|
||||
nlen = namerecord['length']
|
||||
nformat = '%dH' % (nlen / 2) # length is in number of bytes
|
||||
start = nameoffset + namestroffset + noffset
|
||||
end = start + nlen
|
||||
nstr = struct.unpack('>' + nformat, fontdata[start:end])
|
||||
nameheaders.append(struct.pack('<H' + nformat + '2x', nlen, *nstr))
|
||||
else:
|
||||
nameheaders.append(struct.pack('4x')) # len = 0, padding = 0
|
||||
|
||||
return ''.join(nameheaders)
|
||||
|
||||
# just return a null-string (len = 0)
|
||||
def make_root_string():
|
||||
return struct.pack('2x')
|
||||
|
||||
def make_eot_header(fontdata):
|
||||
"""given ttf font data produce an EOT header"""
|
||||
fontDataSize = len(fontdata)
|
||||
font = get_table_directory(fontdata)
|
||||
|
||||
# toss out .otf fonts, t2embed library doesn't support these
|
||||
tableDir = font['tableDir']
|
||||
|
||||
# check for required tables
|
||||
required = (OpenType.TABLE_HEAD, OpenType.TABLE_NAME, OpenType.TABLE_OS2)
|
||||
for table in required:
|
||||
if not (table in tableDir):
|
||||
raise FontError, 'missing required table ' + multicharval(table)
|
||||
|
||||
# read name strings
|
||||
|
||||
# pull out data from individual tables to construct fixed header portion
|
||||
# need to calculate eotSize before packing
|
||||
version = EOT.EOT_VERSION
|
||||
flags = 0
|
||||
charset = EOT.EOT_DEFAULT_CHARSET
|
||||
magicNumber = EOT.EOT_MAGIC_NUMBER
|
||||
|
||||
# read values from OS/2 table
|
||||
os2Dir = tableDir[OpenType.TABLE_OS2]
|
||||
os2offset = os2Dir['offset']
|
||||
os2size = struct.calcsize(OpenType.OS2_UNPACK)
|
||||
|
||||
if os2size > os2Dir['length']:
|
||||
raise FontError, 'OS/2 table invalid length'
|
||||
|
||||
os2fields = struct.unpack(OpenType.OS2_UNPACK, fontdata[os2offset : os2offset + os2size])
|
||||
|
||||
panose = []
|
||||
urange = []
|
||||
codepage = []
|
||||
|
||||
weight, fsType = os2fields[:2]
|
||||
panose[:10] = os2fields[2:12]
|
||||
urange[:4] = os2fields[12:16]
|
||||
fsSelection = os2fields[16]
|
||||
codepage[:2] = os2fields[17:19]
|
||||
|
||||
italic = fsSelection & OpenType.OS2_FSSELECTION_ITALIC
|
||||
|
||||
# read in values from head table
|
||||
headDir = tableDir[OpenType.TABLE_HEAD]
|
||||
headoffset = headDir['offset']
|
||||
headsize = struct.calcsize(OpenType.HEAD_UNPACK)
|
||||
|
||||
if headsize > headDir['length']:
|
||||
raise FontError, 'head table invalid length'
|
||||
|
||||
headfields = struct.unpack(OpenType.HEAD_UNPACK, fontdata[headoffset : headoffset + headsize])
|
||||
checkSumAdjustment = headfields[0]
|
||||
|
||||
# make name headers
|
||||
nameheaders = make_eot_name_headers(fontdata, tableDir[OpenType.TABLE_NAME])
|
||||
rootstring = make_root_string()
|
||||
|
||||
# calculate the total eot size
|
||||
eotSize = struct.calcsize(EOT.EOT_HEADER_PACK) + len(nameheaders) + len(rootstring) + fontDataSize
|
||||
fixed = struct.pack(EOT.EOT_HEADER_PACK,
|
||||
*([eotSize, fontDataSize, version, flags] + panose + [charset, italic] +
|
||||
[weight, fsType, magicNumber] + urange + codepage + [checkSumAdjustment]))
|
||||
|
||||
return ''.join((fixed, nameheaders, rootstring))
|
||||
|
||||
|
||||
def write_eot_font(eot, header, data):
|
||||
open(eot,'wb').write(''.join((header, data)))
|
||||
return
|
||||
|
||||
def main():
|
||||
|
||||
# deal with options
|
||||
p = optparse.OptionParser()
|
||||
p.add_option('--output', '-o', default="world")
|
||||
options, args = p.parse_args()
|
||||
|
||||
# iterate over font files
|
||||
for f in args:
|
||||
data = readfont(f)
|
||||
if len(data) == 0:
|
||||
print 'Error reading %s' % f
|
||||
else:
|
||||
eot = eotname(f)
|
||||
header = make_eot_header(data)
|
||||
write_eot_font(eot, header, data)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
|
173
assets/3rdparty/adminLTE/plugins/ionicons/builder/scripts/generate_font.py
vendored
Executable file
@ -0,0 +1,173 @@
|
||||
# Font generation script from FontCustom
|
||||
# https://github.com/FontCustom/fontcustom/
|
||||
# http://fontcustom.com/
|
||||
|
||||
import fontforge
|
||||
import os
|
||||
import md5
|
||||
import subprocess
|
||||
import tempfile
|
||||
import json
|
||||
import copy
|
||||
|
||||
SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||
INPUT_SVG_DIR = os.path.join(SCRIPT_PATH, '..', '..', 'src')
|
||||
OUTPUT_FONT_DIR = os.path.join(SCRIPT_PATH, '..', '..', 'fonts')
|
||||
MANIFEST_PATH = os.path.join(SCRIPT_PATH, '..', 'manifest.json')
|
||||
BUILD_DATA_PATH = os.path.join(SCRIPT_PATH, '..', 'build_data.json')
|
||||
AUTO_WIDTH = True
|
||||
KERNING = 15
|
||||
|
||||
cp = 0xf100
|
||||
m = md5.new()
|
||||
|
||||
f = fontforge.font()
|
||||
f.encoding = 'UnicodeFull'
|
||||
f.design_size = 16
|
||||
f.em = 512
|
||||
f.ascent = 448
|
||||
f.descent = 64
|
||||
|
||||
manifest_file = open(MANIFEST_PATH, 'r')
|
||||
manifest_data = json.loads(manifest_file.read())
|
||||
manifest_file.close()
|
||||
print "Load Manifest, Icons: %s" % ( len(manifest_data['icons']) )
|
||||
|
||||
build_data = copy.deepcopy(manifest_data)
|
||||
build_data['icons'] = []
|
||||
|
||||
font_name = manifest_data['name']
|
||||
m.update(font_name + ';')
|
||||
m.update(manifest_data['prefix'] + ';')
|
||||
|
||||
for dirname, dirnames, filenames in os.walk(INPUT_SVG_DIR):
|
||||
for filename in filenames:
|
||||
name, ext = os.path.splitext(filename)
|
||||
filePath = os.path.join(dirname, filename)
|
||||
size = os.path.getsize(filePath)
|
||||
|
||||
if ext in ['.svg', '.eps']:
|
||||
|
||||
# see if this file is already in the manifest
|
||||
chr_code = None
|
||||
for ionicon in manifest_data['icons']:
|
||||
if ionicon['name'] == name:
|
||||
chr_code = ionicon['code']
|
||||
break
|
||||
|
||||
if chr_code is None:
|
||||
# this is a new src icon
|
||||
print 'New Icon: \n - %s' % (name)
|
||||
|
||||
while True:
|
||||
chr_code = '0x%x' % (cp)
|
||||
already_exists = False
|
||||
for ionicon in manifest_data['icons']:
|
||||
if ionicon.get('code') == chr_code:
|
||||
already_exists = True
|
||||
cp += 1
|
||||
chr_code = '0x%x' % (cp)
|
||||
continue
|
||||
if not already_exists:
|
||||
break
|
||||
|
||||
print ' - %s' % chr_code
|
||||
manifest_data['icons'].append({
|
||||
'name': name,
|
||||
'code': chr_code
|
||||
})
|
||||
|
||||
build_data['icons'].append({
|
||||
'name': name,
|
||||
'code': chr_code
|
||||
})
|
||||
|
||||
if ext in ['.svg']:
|
||||
# hack removal of <switch> </switch> tags
|
||||
svgfile = open(filePath, 'r+')
|
||||
tmpsvgfile = tempfile.NamedTemporaryFile(suffix=ext, delete=False)
|
||||
svgtext = svgfile.read()
|
||||
svgfile.seek(0)
|
||||
|
||||
# replace the <switch> </switch> tags with 'nothing'
|
||||
svgtext = svgtext.replace('<switch>', '')
|
||||
svgtext = svgtext.replace('</switch>', '')
|
||||
|
||||
tmpsvgfile.file.write(svgtext)
|
||||
|
||||
svgfile.close()
|
||||
tmpsvgfile.file.close()
|
||||
|
||||
filePath = tmpsvgfile.name
|
||||
# end hack
|
||||
|
||||
m.update(name + str(size) + ';')
|
||||
glyph = f.createChar( int(chr_code, 16) )
|
||||
glyph.importOutlines(filePath)
|
||||
|
||||
# if we created a temporary file, let's clean it up
|
||||
if tmpsvgfile:
|
||||
os.unlink(tmpsvgfile.name)
|
||||
|
||||
# set glyph size explicitly or automatically depending on autowidth
|
||||
if AUTO_WIDTH:
|
||||
glyph.left_side_bearing = glyph.right_side_bearing = 0
|
||||
glyph.round()
|
||||
|
||||
# resize glyphs if autowidth is enabled
|
||||
if AUTO_WIDTH:
|
||||
f.autoWidth(0, 0, 512)
|
||||
|
||||
fontfile = '%s/ionicons' % (OUTPUT_FONT_DIR)
|
||||
|
||||
build_hash = m.hexdigest()
|
||||
|
||||
if build_hash == manifest_data.get('build_hash'):
|
||||
print "Source files unchanged, did not rebuild fonts"
|
||||
|
||||
else:
|
||||
manifest_data['build_hash'] = build_hash
|
||||
|
||||
f.fontname = font_name
|
||||
f.familyname = font_name
|
||||
f.fullname = font_name
|
||||
f.generate(fontfile + '.ttf')
|
||||
f.generate(fontfile + '.svg')
|
||||
|
||||
# Fix SVG header for webkit
|
||||
# from: https://github.com/fontello/font-builder/blob/master/bin/fontconvert.py
|
||||
svgfile = open(fontfile + '.svg', 'r+')
|
||||
svgtext = svgfile.read()
|
||||
svgfile.seek(0)
|
||||
svgfile.write(svgtext.replace('''<svg>''', '''<svg xmlns="http://www.w3.org/2000/svg">'''))
|
||||
svgfile.close()
|
||||
|
||||
scriptPath = os.path.dirname(os.path.realpath(__file__))
|
||||
try:
|
||||
subprocess.Popen([scriptPath + '/sfnt2woff', fontfile + '.ttf'], stdout=subprocess.PIPE)
|
||||
except OSError:
|
||||
# If the local version of sfnt2woff fails (i.e., on Linux), try to use the
|
||||
# global version. This allows us to avoid forcing OS X users to compile
|
||||
# sfnt2woff from source, simplifying install.
|
||||
subprocess.call(['sfnt2woff', fontfile + '.ttf'])
|
||||
|
||||
# eotlitetool.py script to generate IE7-compatible .eot fonts
|
||||
subprocess.call('python ' + scriptPath + '/eotlitetool.py ' + fontfile + '.ttf -o ' + fontfile + '.eot', shell=True)
|
||||
subprocess.call('mv ' + fontfile + '.eotlite ' + fontfile + '.eot', shell=True)
|
||||
|
||||
# Hint the TTF file
|
||||
subprocess.call('ttfautohint -s -f -n ' + fontfile + '.ttf ' + fontfile + '-hinted.ttf > /dev/null 2>&1 && mv ' + fontfile + '-hinted.ttf ' + fontfile + '.ttf', shell=True)
|
||||
|
||||
manifest_data['icons'] = sorted(manifest_data['icons'], key=lambda k: k['name'])
|
||||
build_data['icons'] = sorted(build_data['icons'], key=lambda k: k['name'])
|
||||
|
||||
print "Save Manifest, Icons: %s" % ( len(manifest_data['icons']) )
|
||||
f = open(MANIFEST_PATH, 'w')
|
||||
f.write( json.dumps(manifest_data, indent=2, separators=(',', ': ')) )
|
||||
f.close()
|
||||
|
||||
print "Save Build, Icons: %s" % ( len(build_data['icons']) )
|
||||
f = open(BUILD_DATA_PATH, 'w')
|
||||
f.write( json.dumps(build_data, indent=2, separators=(',', ': ')) )
|
||||
f.close()
|
||||
|
BIN
assets/3rdparty/adminLTE/plugins/ionicons/builder/scripts/sfnt2woff
vendored
Executable file
28009
assets/3rdparty/adminLTE/plugins/ionicons/cheatsheet.html
vendored
Normal file
19
assets/3rdparty/adminLTE/plugins/ionicons/component.json
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"repo": "driftyco/ionicons",
|
||||
"development": {},
|
||||
"version": "2.0.0",
|
||||
"styles": [
|
||||
"css/ionicons.css"
|
||||
],
|
||||
"name": "Ionicons",
|
||||
"dependencies": {},
|
||||
"keywords": [],
|
||||
"license": "MIT",
|
||||
"fonts": [
|
||||
"fonts/ionicons.eot",
|
||||
"fonts/ionicons.svg",
|
||||
"fonts/ionicons.ttf",
|
||||
"fonts/ionicons.woff"
|
||||
],
|
||||
"description": "The premium icon font for Ionic Framework."
|
||||
}
|
36
assets/3rdparty/adminLTE/plugins/ionicons/composer.json
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": "driftyco/ionicons",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"extra": {},
|
||||
"authors": [
|
||||
{
|
||||
"homepage": "https://twitter.com/benjsperry",
|
||||
"role": "Designer",
|
||||
"name": "Ben Sperry",
|
||||
"email": "ben@drifty.com"
|
||||
},
|
||||
{
|
||||
"homepage": "https://twitter.com/adamdbradley",
|
||||
"role": "Developer",
|
||||
"name": "Adam Bradley",
|
||||
"email": "adam@drifty.com"
|
||||
},
|
||||
{
|
||||
"homepage": "https://twitter.com/maxlynch",
|
||||
"role": "Developer",
|
||||
"name": "Max Lynch",
|
||||
"email": "max@drifty.com"
|
||||
}
|
||||
],
|
||||
"keywords": [
|
||||
"fonts",
|
||||
"icon font",
|
||||
"icons",
|
||||
"ionic",
|
||||
"web font"
|
||||
],
|
||||
"homepage": "http://ionicons.com/",
|
||||
"description": "The premium icon font for Ionic Framework."
|
||||
}
|
1480
assets/3rdparty/adminLTE/plugins/ionicons/css/ionicons.css
vendored
Normal file
11
assets/3rdparty/adminLTE/plugins/ionicons/css/ionicons.min.css
vendored
Normal file
BIN
assets/3rdparty/adminLTE/plugins/ionicons/fonts/ionicons.eot
vendored
Normal file
2230
assets/3rdparty/adminLTE/plugins/ionicons/fonts/ionicons.svg
vendored
Normal file
After Width: | Height: | Size: 326 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/fonts/ionicons.ttf
vendored
Normal file
BIN
assets/3rdparty/adminLTE/plugins/ionicons/fonts/ionicons.woff
vendored
Normal file
27
assets/3rdparty/adminLTE/plugins/ionicons/less/_ionicons-font.less
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
// Ionicons Font Path
|
||||
// --------------------------
|
||||
|
||||
@font-face {
|
||||
font-family: @ionicons-font-family;
|
||||
src:url("@{ionicons-font-path}/ionicons.eot?v=@{ionicons-version}");
|
||||
src:url("@{ionicons-font-path}/ionicons.eot?v=@{ionicons-version}#iefix") format("embedded-opentype"),
|
||||
url("@{ionicons-font-path}/ionicons.ttf?v=@{ionicons-version}") format("truetype"),
|
||||
url("@{ionicons-font-path}/ionicons.woff?v=@{ionicons-version}") format("woff"),
|
||||
url("@{ionicons-font-path}/ionicons.svg?v=@{ionicons-version}#Ionicons") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.ion {
|
||||
display: inline-block;
|
||||
font-family: @ionicons-font-family;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
text-rendering: auto;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
1473
assets/3rdparty/adminLTE/plugins/ionicons/less/_ionicons-icons.less
vendored
Normal file
747
assets/3rdparty/adminLTE/plugins/ionicons/less/_ionicons-variables.less
vendored
Normal file
@ -0,0 +1,747 @@
|
||||
/*!
|
||||
Ionicons, v2.0.0
|
||||
Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
|
||||
https://twitter.com/benjsperry https://twitter.com/ionicframework
|
||||
MIT License: https://github.com/driftyco/ionicons
|
||||
*/
|
||||
// Ionicons Variables
|
||||
// --------------------------
|
||||
|
||||
@ionicons-font-path: "../fonts";
|
||||
@ionicons-font-family: "Ionicons";
|
||||
@ionicons-version: "2.0.0";
|
||||
@ionicons-prefix: ion-;
|
||||
|
||||
@ionicon-var-alert: "\f101";
|
||||
@ionicon-var-alert-circled: "\f100";
|
||||
@ionicon-var-android-add: "\f2c7";
|
||||
@ionicon-var-android-add-circle: "\f359";
|
||||
@ionicon-var-android-alarm-clock: "\f35a";
|
||||
@ionicon-var-android-alert: "\f35b";
|
||||
@ionicon-var-android-apps: "\f35c";
|
||||
@ionicon-var-android-archive: "\f2c9";
|
||||
@ionicon-var-android-arrow-back: "\f2ca";
|
||||
@ionicon-var-android-arrow-down: "\f35d";
|
||||
@ionicon-var-android-arrow-dropdown: "\f35f";
|
||||
@ionicon-var-android-arrow-dropdown-circle: "\f35e";
|
||||
@ionicon-var-android-arrow-dropleft: "\f361";
|
||||
@ionicon-var-android-arrow-dropleft-circle: "\f360";
|
||||
@ionicon-var-android-arrow-dropright: "\f363";
|
||||
@ionicon-var-android-arrow-dropright-circle: "\f362";
|
||||
@ionicon-var-android-arrow-dropup: "\f365";
|
||||
@ionicon-var-android-arrow-dropup-circle: "\f364";
|
||||
@ionicon-var-android-arrow-forward: "\f30f";
|
||||
@ionicon-var-android-arrow-up: "\f366";
|
||||
@ionicon-var-android-attach: "\f367";
|
||||
@ionicon-var-android-bar: "\f368";
|
||||
@ionicon-var-android-bicycle: "\f369";
|
||||
@ionicon-var-android-boat: "\f36a";
|
||||
@ionicon-var-android-bookmark: "\f36b";
|
||||
@ionicon-var-android-bulb: "\f36c";
|
||||
@ionicon-var-android-bus: "\f36d";
|
||||
@ionicon-var-android-calendar: "\f2d1";
|
||||
@ionicon-var-android-call: "\f2d2";
|
||||
@ionicon-var-android-camera: "\f2d3";
|
||||
@ionicon-var-android-cancel: "\f36e";
|
||||
@ionicon-var-android-car: "\f36f";
|
||||
@ionicon-var-android-cart: "\f370";
|
||||
@ionicon-var-android-chat: "\f2d4";
|
||||
@ionicon-var-android-checkbox: "\f374";
|
||||
@ionicon-var-android-checkbox-blank: "\f371";
|
||||
@ionicon-var-android-checkbox-outline: "\f373";
|
||||
@ionicon-var-android-checkbox-outline-blank: "\f372";
|
||||
@ionicon-var-android-checkmark-circle: "\f375";
|
||||
@ionicon-var-android-clipboard: "\f376";
|
||||
@ionicon-var-android-close: "\f2d7";
|
||||
@ionicon-var-android-cloud: "\f37a";
|
||||
@ionicon-var-android-cloud-circle: "\f377";
|
||||
@ionicon-var-android-cloud-done: "\f378";
|
||||
@ionicon-var-android-cloud-outline: "\f379";
|
||||
@ionicon-var-android-color-palette: "\f37b";
|
||||
@ionicon-var-android-compass: "\f37c";
|
||||
@ionicon-var-android-contact: "\f2d8";
|
||||
@ionicon-var-android-contacts: "\f2d9";
|
||||
@ionicon-var-android-contract: "\f37d";
|
||||
@ionicon-var-android-create: "\f37e";
|
||||
@ionicon-var-android-delete: "\f37f";
|
||||
@ionicon-var-android-desktop: "\f380";
|
||||
@ionicon-var-android-document: "\f381";
|
||||
@ionicon-var-android-done: "\f383";
|
||||
@ionicon-var-android-done-all: "\f382";
|
||||
@ionicon-var-android-download: "\f2dd";
|
||||
@ionicon-var-android-drafts: "\f384";
|
||||
@ionicon-var-android-exit: "\f385";
|
||||
@ionicon-var-android-expand: "\f386";
|
||||
@ionicon-var-android-favorite: "\f388";
|
||||
@ionicon-var-android-favorite-outline: "\f387";
|
||||
@ionicon-var-android-film: "\f389";
|
||||
@ionicon-var-android-folder: "\f2e0";
|
||||
@ionicon-var-android-folder-open: "\f38a";
|
||||
@ionicon-var-android-funnel: "\f38b";
|
||||
@ionicon-var-android-globe: "\f38c";
|
||||
@ionicon-var-android-hand: "\f2e3";
|
||||
@ionicon-var-android-hangout: "\f38d";
|
||||
@ionicon-var-android-happy: "\f38e";
|
||||
@ionicon-var-android-home: "\f38f";
|
||||
@ionicon-var-android-image: "\f2e4";
|
||||
@ionicon-var-android-laptop: "\f390";
|
||||
@ionicon-var-android-list: "\f391";
|
||||
@ionicon-var-android-locate: "\f2e9";
|
||||
@ionicon-var-android-lock: "\f392";
|
||||
@ionicon-var-android-mail: "\f2eb";
|
||||
@ionicon-var-android-map: "\f393";
|
||||
@ionicon-var-android-menu: "\f394";
|
||||
@ionicon-var-android-microphone: "\f2ec";
|
||||
@ionicon-var-android-microphone-off: "\f395";
|
||||
@ionicon-var-android-more-horizontal: "\f396";
|
||||
@ionicon-var-android-more-vertical: "\f397";
|
||||
@ionicon-var-android-navigate: "\f398";
|
||||
@ionicon-var-android-notifications: "\f39b";
|
||||
@ionicon-var-android-notifications-none: "\f399";
|
||||
@ionicon-var-android-notifications-off: "\f39a";
|
||||
@ionicon-var-android-open: "\f39c";
|
||||
@ionicon-var-android-options: "\f39d";
|
||||
@ionicon-var-android-people: "\f39e";
|
||||
@ionicon-var-android-person: "\f3a0";
|
||||
@ionicon-var-android-person-add: "\f39f";
|
||||
@ionicon-var-android-phone-landscape: "\f3a1";
|
||||
@ionicon-var-android-phone-portrait: "\f3a2";
|
||||
@ionicon-var-android-pin: "\f3a3";
|
||||
@ionicon-var-android-plane: "\f3a4";
|
||||
@ionicon-var-android-playstore: "\f2f0";
|
||||
@ionicon-var-android-print: "\f3a5";
|
||||
@ionicon-var-android-radio-button-off: "\f3a6";
|
||||
@ionicon-var-android-radio-button-on: "\f3a7";
|
||||
@ionicon-var-android-refresh: "\f3a8";
|
||||
@ionicon-var-android-remove: "\f2f4";
|
||||
@ionicon-var-android-remove-circle: "\f3a9";
|
||||
@ionicon-var-android-restaurant: "\f3aa";
|
||||
@ionicon-var-android-sad: "\f3ab";
|
||||
@ionicon-var-android-search: "\f2f5";
|
||||
@ionicon-var-android-send: "\f2f6";
|
||||
@ionicon-var-android-settings: "\f2f7";
|
||||
@ionicon-var-android-share: "\f2f8";
|
||||
@ionicon-var-android-share-alt: "\f3ac";
|
||||
@ionicon-var-android-star: "\f2fc";
|
||||
@ionicon-var-android-star-half: "\f3ad";
|
||||
@ionicon-var-android-star-outline: "\f3ae";
|
||||
@ionicon-var-android-stopwatch: "\f2fd";
|
||||
@ionicon-var-android-subway: "\f3af";
|
||||
@ionicon-var-android-sunny: "\f3b0";
|
||||
@ionicon-var-android-sync: "\f3b1";
|
||||
@ionicon-var-android-textsms: "\f3b2";
|
||||
@ionicon-var-android-time: "\f3b3";
|
||||
@ionicon-var-android-train: "\f3b4";
|
||||
@ionicon-var-android-unlock: "\f3b5";
|
||||
@ionicon-var-android-upload: "\f3b6";
|
||||
@ionicon-var-android-volume-down: "\f3b7";
|
||||
@ionicon-var-android-volume-mute: "\f3b8";
|
||||
@ionicon-var-android-volume-off: "\f3b9";
|
||||
@ionicon-var-android-volume-up: "\f3ba";
|
||||
@ionicon-var-android-walk: "\f3bb";
|
||||
@ionicon-var-android-warning: "\f3bc";
|
||||
@ionicon-var-android-watch: "\f3bd";
|
||||
@ionicon-var-android-wifi: "\f305";
|
||||
@ionicon-var-aperture: "\f313";
|
||||
@ionicon-var-archive: "\f102";
|
||||
@ionicon-var-arrow-down-a: "\f103";
|
||||
@ionicon-var-arrow-down-b: "\f104";
|
||||
@ionicon-var-arrow-down-c: "\f105";
|
||||
@ionicon-var-arrow-expand: "\f25e";
|
||||
@ionicon-var-arrow-graph-down-left: "\f25f";
|
||||
@ionicon-var-arrow-graph-down-right: "\f260";
|
||||
@ionicon-var-arrow-graph-up-left: "\f261";
|
||||
@ionicon-var-arrow-graph-up-right: "\f262";
|
||||
@ionicon-var-arrow-left-a: "\f106";
|
||||
@ionicon-var-arrow-left-b: "\f107";
|
||||
@ionicon-var-arrow-left-c: "\f108";
|
||||
@ionicon-var-arrow-move: "\f263";
|
||||
@ionicon-var-arrow-resize: "\f264";
|
||||
@ionicon-var-arrow-return-left: "\f265";
|
||||
@ionicon-var-arrow-return-right: "\f266";
|
||||
@ionicon-var-arrow-right-a: "\f109";
|
||||
@ionicon-var-arrow-right-b: "\f10a";
|
||||
@ionicon-var-arrow-right-c: "\f10b";
|
||||
@ionicon-var-arrow-shrink: "\f267";
|
||||
@ionicon-var-arrow-swap: "\f268";
|
||||
@ionicon-var-arrow-up-a: "\f10c";
|
||||
@ionicon-var-arrow-up-b: "\f10d";
|
||||
@ionicon-var-arrow-up-c: "\f10e";
|
||||
@ionicon-var-asterisk: "\f314";
|
||||
@ionicon-var-at: "\f10f";
|
||||
@ionicon-var-backspace: "\f3bf";
|
||||
@ionicon-var-backspace-outline: "\f3be";
|
||||
@ionicon-var-bag: "\f110";
|
||||
@ionicon-var-battery-charging: "\f111";
|
||||
@ionicon-var-battery-empty: "\f112";
|
||||
@ionicon-var-battery-full: "\f113";
|
||||
@ionicon-var-battery-half: "\f114";
|
||||
@ionicon-var-battery-low: "\f115";
|
||||
@ionicon-var-beaker: "\f269";
|
||||
@ionicon-var-beer: "\f26a";
|
||||
@ionicon-var-bluetooth: "\f116";
|
||||
@ionicon-var-bonfire: "\f315";
|
||||
@ionicon-var-bookmark: "\f26b";
|
||||
@ionicon-var-bowtie: "\f3c0";
|
||||
@ionicon-var-briefcase: "\f26c";
|
||||
@ionicon-var-bug: "\f2be";
|
||||
@ionicon-var-calculator: "\f26d";
|
||||
@ionicon-var-calendar: "\f117";
|
||||
@ionicon-var-camera: "\f118";
|
||||
@ionicon-var-card: "\f119";
|
||||
@ionicon-var-cash: "\f316";
|
||||
@ionicon-var-chatbox: "\f11b";
|
||||
@ionicon-var-chatbox-working: "\f11a";
|
||||
@ionicon-var-chatboxes: "\f11c";
|
||||
@ionicon-var-chatbubble: "\f11e";
|
||||
@ionicon-var-chatbubble-working: "\f11d";
|
||||
@ionicon-var-chatbubbles: "\f11f";
|
||||
@ionicon-var-checkmark: "\f122";
|
||||
@ionicon-var-checkmark-circled: "\f120";
|
||||
@ionicon-var-checkmark-round: "\f121";
|
||||
@ionicon-var-chevron-down: "\f123";
|
||||
@ionicon-var-chevron-left: "\f124";
|
||||
@ionicon-var-chevron-right: "\f125";
|
||||
@ionicon-var-chevron-up: "\f126";
|
||||
@ionicon-var-clipboard: "\f127";
|
||||
@ionicon-var-clock: "\f26e";
|
||||
@ionicon-var-close: "\f12a";
|
||||
@ionicon-var-close-circled: "\f128";
|
||||
@ionicon-var-close-round: "\f129";
|
||||
@ionicon-var-closed-captioning: "\f317";
|
||||
@ionicon-var-cloud: "\f12b";
|
||||
@ionicon-var-code: "\f271";
|
||||
@ionicon-var-code-download: "\f26f";
|
||||
@ionicon-var-code-working: "\f270";
|
||||
@ionicon-var-coffee: "\f272";
|
||||
@ionicon-var-compass: "\f273";
|
||||
@ionicon-var-compose: "\f12c";
|
||||
@ionicon-var-connection-bars: "\f274";
|
||||
@ionicon-var-contrast: "\f275";
|
||||
@ionicon-var-crop: "\f3c1";
|
||||
@ionicon-var-cube: "\f318";
|
||||
@ionicon-var-disc: "\f12d";
|
||||
@ionicon-var-document: "\f12f";
|
||||
@ionicon-var-document-text: "\f12e";
|
||||
@ionicon-var-drag: "\f130";
|
||||
@ionicon-var-earth: "\f276";
|
||||
@ionicon-var-easel: "\f3c2";
|
||||
@ionicon-var-edit: "\f2bf";
|
||||
@ionicon-var-egg: "\f277";
|
||||
@ionicon-var-eject: "\f131";
|
||||
@ionicon-var-email: "\f132";
|
||||
@ionicon-var-email-unread: "\f3c3";
|
||||
@ionicon-var-erlenmeyer-flask: "\f3c5";
|
||||
@ionicon-var-erlenmeyer-flask-bubbles: "\f3c4";
|
||||
@ionicon-var-eye: "\f133";
|
||||
@ionicon-var-eye-disabled: "\f306";
|
||||
@ionicon-var-female: "\f278";
|
||||
@ionicon-var-filing: "\f134";
|
||||
@ionicon-var-film-marker: "\f135";
|
||||
@ionicon-var-fireball: "\f319";
|
||||
@ionicon-var-flag: "\f279";
|
||||
@ionicon-var-flame: "\f31a";
|
||||
@ionicon-var-flash: "\f137";
|
||||
@ionicon-var-flash-off: "\f136";
|
||||
@ionicon-var-folder: "\f139";
|
||||
@ionicon-var-fork: "\f27a";
|
||||
@ionicon-var-fork-repo: "\f2c0";
|
||||
@ionicon-var-forward: "\f13a";
|
||||
@ionicon-var-funnel: "\f31b";
|
||||
@ionicon-var-gear-a: "\f13d";
|
||||
@ionicon-var-gear-b: "\f13e";
|
||||
@ionicon-var-grid: "\f13f";
|
||||
@ionicon-var-hammer: "\f27b";
|
||||
@ionicon-var-happy: "\f31c";
|
||||
@ionicon-var-happy-outline: "\f3c6";
|
||||
@ionicon-var-headphone: "\f140";
|
||||
@ionicon-var-heart: "\f141";
|
||||
@ionicon-var-heart-broken: "\f31d";
|
||||
@ionicon-var-help: "\f143";
|
||||
@ionicon-var-help-buoy: "\f27c";
|
||||
@ionicon-var-help-circled: "\f142";
|
||||
@ionicon-var-home: "\f144";
|
||||
@ionicon-var-icecream: "\f27d";
|
||||
@ionicon-var-image: "\f147";
|
||||
@ionicon-var-images: "\f148";
|
||||
@ionicon-var-information: "\f14a";
|
||||
@ionicon-var-information-circled: "\f149";
|
||||
@ionicon-var-ionic: "\f14b";
|
||||
@ionicon-var-ios-alarm: "\f3c8";
|
||||
@ionicon-var-ios-alarm-outline: "\f3c7";
|
||||
@ionicon-var-ios-albums: "\f3ca";
|
||||
@ionicon-var-ios-albums-outline: "\f3c9";
|
||||
@ionicon-var-ios-americanfootball: "\f3cc";
|
||||
@ionicon-var-ios-americanfootball-outline: "\f3cb";
|
||||
@ionicon-var-ios-analytics: "\f3ce";
|
||||
@ionicon-var-ios-analytics-outline: "\f3cd";
|
||||
@ionicon-var-ios-arrow-back: "\f3cf";
|
||||
@ionicon-var-ios-arrow-down: "\f3d0";
|
||||
@ionicon-var-ios-arrow-forward: "\f3d1";
|
||||
@ionicon-var-ios-arrow-left: "\f3d2";
|
||||
@ionicon-var-ios-arrow-right: "\f3d3";
|
||||
@ionicon-var-ios-arrow-thin-down: "\f3d4";
|
||||
@ionicon-var-ios-arrow-thin-left: "\f3d5";
|
||||
@ionicon-var-ios-arrow-thin-right: "\f3d6";
|
||||
@ionicon-var-ios-arrow-thin-up: "\f3d7";
|
||||
@ionicon-var-ios-arrow-up: "\f3d8";
|
||||
@ionicon-var-ios-at: "\f3da";
|
||||
@ionicon-var-ios-at-outline: "\f3d9";
|
||||
@ionicon-var-ios-barcode: "\f3dc";
|
||||
@ionicon-var-ios-barcode-outline: "\f3db";
|
||||
@ionicon-var-ios-baseball: "\f3de";
|
||||
@ionicon-var-ios-baseball-outline: "\f3dd";
|
||||
@ionicon-var-ios-basketball: "\f3e0";
|
||||
@ionicon-var-ios-basketball-outline: "\f3df";
|
||||
@ionicon-var-ios-bell: "\f3e2";
|
||||
@ionicon-var-ios-bell-outline: "\f3e1";
|
||||
@ionicon-var-ios-body: "\f3e4";
|
||||
@ionicon-var-ios-body-outline: "\f3e3";
|
||||
@ionicon-var-ios-bolt: "\f3e6";
|
||||
@ionicon-var-ios-bolt-outline: "\f3e5";
|
||||
@ionicon-var-ios-book: "\f3e8";
|
||||
@ionicon-var-ios-book-outline: "\f3e7";
|
||||
@ionicon-var-ios-bookmarks: "\f3ea";
|
||||
@ionicon-var-ios-bookmarks-outline: "\f3e9";
|
||||
@ionicon-var-ios-box: "\f3ec";
|
||||
@ionicon-var-ios-box-outline: "\f3eb";
|
||||
@ionicon-var-ios-briefcase: "\f3ee";
|
||||
@ionicon-var-ios-briefcase-outline: "\f3ed";
|
||||
@ionicon-var-ios-browsers: "\f3f0";
|
||||
@ionicon-var-ios-browsers-outline: "\f3ef";
|
||||
@ionicon-var-ios-calculator: "\f3f2";
|
||||
@ionicon-var-ios-calculator-outline: "\f3f1";
|
||||
@ionicon-var-ios-calendar: "\f3f4";
|
||||
@ionicon-var-ios-calendar-outline: "\f3f3";
|
||||
@ionicon-var-ios-camera: "\f3f6";
|
||||
@ionicon-var-ios-camera-outline: "\f3f5";
|
||||
@ionicon-var-ios-cart: "\f3f8";
|
||||
@ionicon-var-ios-cart-outline: "\f3f7";
|
||||
@ionicon-var-ios-chatboxes: "\f3fa";
|
||||
@ionicon-var-ios-chatboxes-outline: "\f3f9";
|
||||
@ionicon-var-ios-chatbubble: "\f3fc";
|
||||
@ionicon-var-ios-chatbubble-outline: "\f3fb";
|
||||
@ionicon-var-ios-checkmark: "\f3ff";
|
||||
@ionicon-var-ios-checkmark-empty: "\f3fd";
|
||||
@ionicon-var-ios-checkmark-outline: "\f3fe";
|
||||
@ionicon-var-ios-circle-filled: "\f400";
|
||||
@ionicon-var-ios-circle-outline: "\f401";
|
||||
@ionicon-var-ios-clock: "\f403";
|
||||
@ionicon-var-ios-clock-outline: "\f402";
|
||||
@ionicon-var-ios-close: "\f406";
|
||||
@ionicon-var-ios-close-empty: "\f404";
|
||||
@ionicon-var-ios-close-outline: "\f405";
|
||||
@ionicon-var-ios-cloud: "\f40c";
|
||||
@ionicon-var-ios-cloud-download: "\f408";
|
||||
@ionicon-var-ios-cloud-download-outline: "\f407";
|
||||
@ionicon-var-ios-cloud-outline: "\f409";
|
||||
@ionicon-var-ios-cloud-upload: "\f40b";
|
||||
@ionicon-var-ios-cloud-upload-outline: "\f40a";
|
||||
@ionicon-var-ios-cloudy: "\f410";
|
||||
@ionicon-var-ios-cloudy-night: "\f40e";
|
||||
@ionicon-var-ios-cloudy-night-outline: "\f40d";
|
||||
@ionicon-var-ios-cloudy-outline: "\f40f";
|
||||
@ionicon-var-ios-cog: "\f412";
|
||||
@ionicon-var-ios-cog-outline: "\f411";
|
||||
@ionicon-var-ios-color-filter: "\f414";
|
||||
@ionicon-var-ios-color-filter-outline: "\f413";
|
||||
@ionicon-var-ios-color-wand: "\f416";
|
||||
@ionicon-var-ios-color-wand-outline: "\f415";
|
||||
@ionicon-var-ios-compose: "\f418";
|
||||
@ionicon-var-ios-compose-outline: "\f417";
|
||||
@ionicon-var-ios-contact: "\f41a";
|
||||
@ionicon-var-ios-contact-outline: "\f419";
|
||||
@ionicon-var-ios-copy: "\f41c";
|
||||
@ionicon-var-ios-copy-outline: "\f41b";
|
||||
@ionicon-var-ios-crop: "\f41e";
|
||||
@ionicon-var-ios-crop-strong: "\f41d";
|
||||
@ionicon-var-ios-download: "\f420";
|
||||
@ionicon-var-ios-download-outline: "\f41f";
|
||||
@ionicon-var-ios-drag: "\f421";
|
||||
@ionicon-var-ios-email: "\f423";
|
||||
@ionicon-var-ios-email-outline: "\f422";
|
||||
@ionicon-var-ios-eye: "\f425";
|
||||
@ionicon-var-ios-eye-outline: "\f424";
|
||||
@ionicon-var-ios-fastforward: "\f427";
|
||||
@ionicon-var-ios-fastforward-outline: "\f426";
|
||||
@ionicon-var-ios-filing: "\f429";
|
||||
@ionicon-var-ios-filing-outline: "\f428";
|
||||
@ionicon-var-ios-film: "\f42b";
|
||||
@ionicon-var-ios-film-outline: "\f42a";
|
||||
@ionicon-var-ios-flag: "\f42d";
|
||||
@ionicon-var-ios-flag-outline: "\f42c";
|
||||
@ionicon-var-ios-flame: "\f42f";
|
||||
@ionicon-var-ios-flame-outline: "\f42e";
|
||||
@ionicon-var-ios-flask: "\f431";
|
||||
@ionicon-var-ios-flask-outline: "\f430";
|
||||
@ionicon-var-ios-flower: "\f433";
|
||||
@ionicon-var-ios-flower-outline: "\f432";
|
||||
@ionicon-var-ios-folder: "\f435";
|
||||
@ionicon-var-ios-folder-outline: "\f434";
|
||||
@ionicon-var-ios-football: "\f437";
|
||||
@ionicon-var-ios-football-outline: "\f436";
|
||||
@ionicon-var-ios-game-controller-a: "\f439";
|
||||
@ionicon-var-ios-game-controller-a-outline: "\f438";
|
||||
@ionicon-var-ios-game-controller-b: "\f43b";
|
||||
@ionicon-var-ios-game-controller-b-outline: "\f43a";
|
||||
@ionicon-var-ios-gear: "\f43d";
|
||||
@ionicon-var-ios-gear-outline: "\f43c";
|
||||
@ionicon-var-ios-glasses: "\f43f";
|
||||
@ionicon-var-ios-glasses-outline: "\f43e";
|
||||
@ionicon-var-ios-grid-view: "\f441";
|
||||
@ionicon-var-ios-grid-view-outline: "\f440";
|
||||
@ionicon-var-ios-heart: "\f443";
|
||||
@ionicon-var-ios-heart-outline: "\f442";
|
||||
@ionicon-var-ios-help: "\f446";
|
||||
@ionicon-var-ios-help-empty: "\f444";
|
||||
@ionicon-var-ios-help-outline: "\f445";
|
||||
@ionicon-var-ios-home: "\f448";
|
||||
@ionicon-var-ios-home-outline: "\f447";
|
||||
@ionicon-var-ios-infinite: "\f44a";
|
||||
@ionicon-var-ios-infinite-outline: "\f449";
|
||||
@ionicon-var-ios-information: "\f44d";
|
||||
@ionicon-var-ios-information-empty: "\f44b";
|
||||
@ionicon-var-ios-information-outline: "\f44c";
|
||||
@ionicon-var-ios-ionic-outline: "\f44e";
|
||||
@ionicon-var-ios-keypad: "\f450";
|
||||
@ionicon-var-ios-keypad-outline: "\f44f";
|
||||
@ionicon-var-ios-lightbulb: "\f452";
|
||||
@ionicon-var-ios-lightbulb-outline: "\f451";
|
||||
@ionicon-var-ios-list: "\f454";
|
||||
@ionicon-var-ios-list-outline: "\f453";
|
||||
@ionicon-var-ios-location: "\f456";
|
||||
@ionicon-var-ios-location-outline: "\f455";
|
||||
@ionicon-var-ios-locked: "\f458";
|
||||
@ionicon-var-ios-locked-outline: "\f457";
|
||||
@ionicon-var-ios-loop: "\f45a";
|
||||
@ionicon-var-ios-loop-strong: "\f459";
|
||||
@ionicon-var-ios-medical: "\f45c";
|
||||
@ionicon-var-ios-medical-outline: "\f45b";
|
||||
@ionicon-var-ios-medkit: "\f45e";
|
||||
@ionicon-var-ios-medkit-outline: "\f45d";
|
||||
@ionicon-var-ios-mic: "\f461";
|
||||
@ionicon-var-ios-mic-off: "\f45f";
|
||||
@ionicon-var-ios-mic-outline: "\f460";
|
||||
@ionicon-var-ios-minus: "\f464";
|
||||
@ionicon-var-ios-minus-empty: "\f462";
|
||||
@ionicon-var-ios-minus-outline: "\f463";
|
||||
@ionicon-var-ios-monitor: "\f466";
|
||||
@ionicon-var-ios-monitor-outline: "\f465";
|
||||
@ionicon-var-ios-moon: "\f468";
|
||||
@ionicon-var-ios-moon-outline: "\f467";
|
||||
@ionicon-var-ios-more: "\f46a";
|
||||
@ionicon-var-ios-more-outline: "\f469";
|
||||
@ionicon-var-ios-musical-note: "\f46b";
|
||||
@ionicon-var-ios-musical-notes: "\f46c";
|
||||
@ionicon-var-ios-navigate: "\f46e";
|
||||
@ionicon-var-ios-navigate-outline: "\f46d";
|
||||
@ionicon-var-ios-nutrition: "\f470";
|
||||
@ionicon-var-ios-nutrition-outline: "\f46f";
|
||||
@ionicon-var-ios-paper: "\f472";
|
||||
@ionicon-var-ios-paper-outline: "\f471";
|
||||
@ionicon-var-ios-paperplane: "\f474";
|
||||
@ionicon-var-ios-paperplane-outline: "\f473";
|
||||
@ionicon-var-ios-partlysunny: "\f476";
|
||||
@ionicon-var-ios-partlysunny-outline: "\f475";
|
||||
@ionicon-var-ios-pause: "\f478";
|
||||
@ionicon-var-ios-pause-outline: "\f477";
|
||||
@ionicon-var-ios-paw: "\f47a";
|
||||
@ionicon-var-ios-paw-outline: "\f479";
|
||||
@ionicon-var-ios-people: "\f47c";
|
||||
@ionicon-var-ios-people-outline: "\f47b";
|
||||
@ionicon-var-ios-person: "\f47e";
|
||||
@ionicon-var-ios-person-outline: "\f47d";
|
||||
@ionicon-var-ios-personadd: "\f480";
|
||||
@ionicon-var-ios-personadd-outline: "\f47f";
|
||||
@ionicon-var-ios-photos: "\f482";
|
||||
@ionicon-var-ios-photos-outline: "\f481";
|
||||
@ionicon-var-ios-pie: "\f484";
|
||||
@ionicon-var-ios-pie-outline: "\f483";
|
||||
@ionicon-var-ios-pint: "\f486";
|
||||
@ionicon-var-ios-pint-outline: "\f485";
|
||||
@ionicon-var-ios-play: "\f488";
|
||||
@ionicon-var-ios-play-outline: "\f487";
|
||||
@ionicon-var-ios-plus: "\f48b";
|
||||
@ionicon-var-ios-plus-empty: "\f489";
|
||||
@ionicon-var-ios-plus-outline: "\f48a";
|
||||
@ionicon-var-ios-pricetag: "\f48d";
|
||||
@ionicon-var-ios-pricetag-outline: "\f48c";
|
||||
@ionicon-var-ios-pricetags: "\f48f";
|
||||
@ionicon-var-ios-pricetags-outline: "\f48e";
|
||||
@ionicon-var-ios-printer: "\f491";
|
||||
@ionicon-var-ios-printer-outline: "\f490";
|
||||
@ionicon-var-ios-pulse: "\f493";
|
||||
@ionicon-var-ios-pulse-strong: "\f492";
|
||||
@ionicon-var-ios-rainy: "\f495";
|
||||
@ionicon-var-ios-rainy-outline: "\f494";
|
||||
@ionicon-var-ios-recording: "\f497";
|
||||
@ionicon-var-ios-recording-outline: "\f496";
|
||||
@ionicon-var-ios-redo: "\f499";
|
||||
@ionicon-var-ios-redo-outline: "\f498";
|
||||
@ionicon-var-ios-refresh: "\f49c";
|
||||
@ionicon-var-ios-refresh-empty: "\f49a";
|
||||
@ionicon-var-ios-refresh-outline: "\f49b";
|
||||
@ionicon-var-ios-reload: "\f49d";
|
||||
@ionicon-var-ios-reverse-camera: "\f49f";
|
||||
@ionicon-var-ios-reverse-camera-outline: "\f49e";
|
||||
@ionicon-var-ios-rewind: "\f4a1";
|
||||
@ionicon-var-ios-rewind-outline: "\f4a0";
|
||||
@ionicon-var-ios-rose: "\f4a3";
|
||||
@ionicon-var-ios-rose-outline: "\f4a2";
|
||||
@ionicon-var-ios-search: "\f4a5";
|
||||
@ionicon-var-ios-search-strong: "\f4a4";
|
||||
@ionicon-var-ios-settings: "\f4a7";
|
||||
@ionicon-var-ios-settings-strong: "\f4a6";
|
||||
@ionicon-var-ios-shuffle: "\f4a9";
|
||||
@ionicon-var-ios-shuffle-strong: "\f4a8";
|
||||
@ionicon-var-ios-skipbackward: "\f4ab";
|
||||
@ionicon-var-ios-skipbackward-outline: "\f4aa";
|
||||
@ionicon-var-ios-skipforward: "\f4ad";
|
||||
@ionicon-var-ios-skipforward-outline: "\f4ac";
|
||||
@ionicon-var-ios-snowy: "\f4ae";
|
||||
@ionicon-var-ios-speedometer: "\f4b0";
|
||||
@ionicon-var-ios-speedometer-outline: "\f4af";
|
||||
@ionicon-var-ios-star: "\f4b3";
|
||||
@ionicon-var-ios-star-half: "\f4b1";
|
||||
@ionicon-var-ios-star-outline: "\f4b2";
|
||||
@ionicon-var-ios-stopwatch: "\f4b5";
|
||||
@ionicon-var-ios-stopwatch-outline: "\f4b4";
|
||||
@ionicon-var-ios-sunny: "\f4b7";
|
||||
@ionicon-var-ios-sunny-outline: "\f4b6";
|
||||
@ionicon-var-ios-telephone: "\f4b9";
|
||||
@ionicon-var-ios-telephone-outline: "\f4b8";
|
||||
@ionicon-var-ios-tennisball: "\f4bb";
|
||||
@ionicon-var-ios-tennisball-outline: "\f4ba";
|
||||
@ionicon-var-ios-thunderstorm: "\f4bd";
|
||||
@ionicon-var-ios-thunderstorm-outline: "\f4bc";
|
||||
@ionicon-var-ios-time: "\f4bf";
|
||||
@ionicon-var-ios-time-outline: "\f4be";
|
||||
@ionicon-var-ios-timer: "\f4c1";
|
||||
@ionicon-var-ios-timer-outline: "\f4c0";
|
||||
@ionicon-var-ios-toggle: "\f4c3";
|
||||
@ionicon-var-ios-toggle-outline: "\f4c2";
|
||||
@ionicon-var-ios-trash: "\f4c5";
|
||||
@ionicon-var-ios-trash-outline: "\f4c4";
|
||||
@ionicon-var-ios-undo: "\f4c7";
|
||||
@ionicon-var-ios-undo-outline: "\f4c6";
|
||||
@ionicon-var-ios-unlocked: "\f4c9";
|
||||
@ionicon-var-ios-unlocked-outline: "\f4c8";
|
||||
@ionicon-var-ios-upload: "\f4cb";
|
||||
@ionicon-var-ios-upload-outline: "\f4ca";
|
||||
@ionicon-var-ios-videocam: "\f4cd";
|
||||
@ionicon-var-ios-videocam-outline: "\f4cc";
|
||||
@ionicon-var-ios-volume-high: "\f4ce";
|
||||
@ionicon-var-ios-volume-low: "\f4cf";
|
||||
@ionicon-var-ios-wineglass: "\f4d1";
|
||||
@ionicon-var-ios-wineglass-outline: "\f4d0";
|
||||
@ionicon-var-ios-world: "\f4d3";
|
||||
@ionicon-var-ios-world-outline: "\f4d2";
|
||||
@ionicon-var-ipad: "\f1f9";
|
||||
@ionicon-var-iphone: "\f1fa";
|
||||
@ionicon-var-ipod: "\f1fb";
|
||||
@ionicon-var-jet: "\f295";
|
||||
@ionicon-var-key: "\f296";
|
||||
@ionicon-var-knife: "\f297";
|
||||
@ionicon-var-laptop: "\f1fc";
|
||||
@ionicon-var-leaf: "\f1fd";
|
||||
@ionicon-var-levels: "\f298";
|
||||
@ionicon-var-lightbulb: "\f299";
|
||||
@ionicon-var-link: "\f1fe";
|
||||
@ionicon-var-load-a: "\f29a";
|
||||
@ionicon-var-load-b: "\f29b";
|
||||
@ionicon-var-load-c: "\f29c";
|
||||
@ionicon-var-load-d: "\f29d";
|
||||
@ionicon-var-location: "\f1ff";
|
||||
@ionicon-var-lock-combination: "\f4d4";
|
||||
@ionicon-var-locked: "\f200";
|
||||
@ionicon-var-log-in: "\f29e";
|
||||
@ionicon-var-log-out: "\f29f";
|
||||
@ionicon-var-loop: "\f201";
|
||||
@ionicon-var-magnet: "\f2a0";
|
||||
@ionicon-var-male: "\f2a1";
|
||||
@ionicon-var-man: "\f202";
|
||||
@ionicon-var-map: "\f203";
|
||||
@ionicon-var-medkit: "\f2a2";
|
||||
@ionicon-var-merge: "\f33f";
|
||||
@ionicon-var-mic-a: "\f204";
|
||||
@ionicon-var-mic-b: "\f205";
|
||||
@ionicon-var-mic-c: "\f206";
|
||||
@ionicon-var-minus: "\f209";
|
||||
@ionicon-var-minus-circled: "\f207";
|
||||
@ionicon-var-minus-round: "\f208";
|
||||
@ionicon-var-model-s: "\f2c1";
|
||||
@ionicon-var-monitor: "\f20a";
|
||||
@ionicon-var-more: "\f20b";
|
||||
@ionicon-var-mouse: "\f340";
|
||||
@ionicon-var-music-note: "\f20c";
|
||||
@ionicon-var-navicon: "\f20e";
|
||||
@ionicon-var-navicon-round: "\f20d";
|
||||
@ionicon-var-navigate: "\f2a3";
|
||||
@ionicon-var-network: "\f341";
|
||||
@ionicon-var-no-smoking: "\f2c2";
|
||||
@ionicon-var-nuclear: "\f2a4";
|
||||
@ionicon-var-outlet: "\f342";
|
||||
@ionicon-var-paintbrush: "\f4d5";
|
||||
@ionicon-var-paintbucket: "\f4d6";
|
||||
@ionicon-var-paper-airplane: "\f2c3";
|
||||
@ionicon-var-paperclip: "\f20f";
|
||||
@ionicon-var-pause: "\f210";
|
||||
@ionicon-var-person: "\f213";
|
||||
@ionicon-var-person-add: "\f211";
|
||||
@ionicon-var-person-stalker: "\f212";
|
||||
@ionicon-var-pie-graph: "\f2a5";
|
||||
@ionicon-var-pin: "\f2a6";
|
||||
@ionicon-var-pinpoint: "\f2a7";
|
||||
@ionicon-var-pizza: "\f2a8";
|
||||
@ionicon-var-plane: "\f214";
|
||||
@ionicon-var-planet: "\f343";
|
||||
@ionicon-var-play: "\f215";
|
||||
@ionicon-var-playstation: "\f30a";
|
||||
@ionicon-var-plus: "\f218";
|
||||
@ionicon-var-plus-circled: "\f216";
|
||||
@ionicon-var-plus-round: "\f217";
|
||||
@ionicon-var-podium: "\f344";
|
||||
@ionicon-var-pound: "\f219";
|
||||
@ionicon-var-power: "\f2a9";
|
||||
@ionicon-var-pricetag: "\f2aa";
|
||||
@ionicon-var-pricetags: "\f2ab";
|
||||
@ionicon-var-printer: "\f21a";
|
||||
@ionicon-var-pull-request: "\f345";
|
||||
@ionicon-var-qr-scanner: "\f346";
|
||||
@ionicon-var-quote: "\f347";
|
||||
@ionicon-var-radio-waves: "\f2ac";
|
||||
@ionicon-var-record: "\f21b";
|
||||
@ionicon-var-refresh: "\f21c";
|
||||
@ionicon-var-reply: "\f21e";
|
||||
@ionicon-var-reply-all: "\f21d";
|
||||
@ionicon-var-ribbon-a: "\f348";
|
||||
@ionicon-var-ribbon-b: "\f349";
|
||||
@ionicon-var-sad: "\f34a";
|
||||
@ionicon-var-sad-outline: "\f4d7";
|
||||
@ionicon-var-scissors: "\f34b";
|
||||
@ionicon-var-search: "\f21f";
|
||||
@ionicon-var-settings: "\f2ad";
|
||||
@ionicon-var-share: "\f220";
|
||||
@ionicon-var-shuffle: "\f221";
|
||||
@ionicon-var-skip-backward: "\f222";
|
||||
@ionicon-var-skip-forward: "\f223";
|
||||
@ionicon-var-social-android: "\f225";
|
||||
@ionicon-var-social-android-outline: "\f224";
|
||||
@ionicon-var-social-angular: "\f4d9";
|
||||
@ionicon-var-social-angular-outline: "\f4d8";
|
||||
@ionicon-var-social-apple: "\f227";
|
||||
@ionicon-var-social-apple-outline: "\f226";
|
||||
@ionicon-var-social-bitcoin: "\f2af";
|
||||
@ionicon-var-social-bitcoin-outline: "\f2ae";
|
||||
@ionicon-var-social-buffer: "\f229";
|
||||
@ionicon-var-social-buffer-outline: "\f228";
|
||||
@ionicon-var-social-chrome: "\f4db";
|
||||
@ionicon-var-social-chrome-outline: "\f4da";
|
||||
@ionicon-var-social-codepen: "\f4dd";
|
||||
@ionicon-var-social-codepen-outline: "\f4dc";
|
||||
@ionicon-var-social-css3: "\f4df";
|
||||
@ionicon-var-social-css3-outline: "\f4de";
|
||||
@ionicon-var-social-designernews: "\f22b";
|
||||
@ionicon-var-social-designernews-outline: "\f22a";
|
||||
@ionicon-var-social-dribbble: "\f22d";
|
||||
@ionicon-var-social-dribbble-outline: "\f22c";
|
||||
@ionicon-var-social-dropbox: "\f22f";
|
||||
@ionicon-var-social-dropbox-outline: "\f22e";
|
||||
@ionicon-var-social-euro: "\f4e1";
|
||||
@ionicon-var-social-euro-outline: "\f4e0";
|
||||
@ionicon-var-social-facebook: "\f231";
|
||||
@ionicon-var-social-facebook-outline: "\f230";
|
||||
@ionicon-var-social-foursquare: "\f34d";
|
||||
@ionicon-var-social-foursquare-outline: "\f34c";
|
||||
@ionicon-var-social-freebsd-devil: "\f2c4";
|
||||
@ionicon-var-social-github: "\f233";
|
||||
@ionicon-var-social-github-outline: "\f232";
|
||||
@ionicon-var-social-google: "\f34f";
|
||||
@ionicon-var-social-google-outline: "\f34e";
|
||||
@ionicon-var-social-googleplus: "\f235";
|
||||
@ionicon-var-social-googleplus-outline: "\f234";
|
||||
@ionicon-var-social-hackernews: "\f237";
|
||||
@ionicon-var-social-hackernews-outline: "\f236";
|
||||
@ionicon-var-social-html5: "\f4e3";
|
||||
@ionicon-var-social-html5-outline: "\f4e2";
|
||||
@ionicon-var-social-instagram: "\f351";
|
||||
@ionicon-var-social-instagram-outline: "\f350";
|
||||
@ionicon-var-social-javascript: "\f4e5";
|
||||
@ionicon-var-social-javascript-outline: "\f4e4";
|
||||
@ionicon-var-social-linkedin: "\f239";
|
||||
@ionicon-var-social-linkedin-outline: "\f238";
|
||||
@ionicon-var-social-markdown: "\f4e6";
|
||||
@ionicon-var-social-nodejs: "\f4e7";
|
||||
@ionicon-var-social-octocat: "\f4e8";
|
||||
@ionicon-var-social-pinterest: "\f2b1";
|
||||
@ionicon-var-social-pinterest-outline: "\f2b0";
|
||||
@ionicon-var-social-python: "\f4e9";
|
||||
@ionicon-var-social-reddit: "\f23b";
|
||||
@ionicon-var-social-reddit-outline: "\f23a";
|
||||
@ionicon-var-social-rss: "\f23d";
|
||||
@ionicon-var-social-rss-outline: "\f23c";
|
||||
@ionicon-var-social-sass: "\f4ea";
|
||||
@ionicon-var-social-skype: "\f23f";
|
||||
@ionicon-var-social-skype-outline: "\f23e";
|
||||
@ionicon-var-social-snapchat: "\f4ec";
|
||||
@ionicon-var-social-snapchat-outline: "\f4eb";
|
||||
@ionicon-var-social-tumblr: "\f241";
|
||||
@ionicon-var-social-tumblr-outline: "\f240";
|
||||
@ionicon-var-social-tux: "\f2c5";
|
||||
@ionicon-var-social-twitch: "\f4ee";
|
||||
@ionicon-var-social-twitch-outline: "\f4ed";
|
||||
@ionicon-var-social-twitter: "\f243";
|
||||
@ionicon-var-social-twitter-outline: "\f242";
|
||||
@ionicon-var-social-usd: "\f353";
|
||||
@ionicon-var-social-usd-outline: "\f352";
|
||||
@ionicon-var-social-vimeo: "\f245";
|
||||
@ionicon-var-social-vimeo-outline: "\f244";
|
||||
@ionicon-var-social-whatsapp: "\f4f0";
|
||||
@ionicon-var-social-whatsapp-outline: "\f4ef";
|
||||
@ionicon-var-social-windows: "\f247";
|
||||
@ionicon-var-social-windows-outline: "\f246";
|
||||
@ionicon-var-social-wordpress: "\f249";
|
||||
@ionicon-var-social-wordpress-outline: "\f248";
|
||||
@ionicon-var-social-yahoo: "\f24b";
|
||||
@ionicon-var-social-yahoo-outline: "\f24a";
|
||||
@ionicon-var-social-yen: "\f4f2";
|
||||
@ionicon-var-social-yen-outline: "\f4f1";
|
||||
@ionicon-var-social-youtube: "\f24d";
|
||||
@ionicon-var-social-youtube-outline: "\f24c";
|
||||
@ionicon-var-soup-can: "\f4f4";
|
||||
@ionicon-var-soup-can-outline: "\f4f3";
|
||||
@ionicon-var-speakerphone: "\f2b2";
|
||||
@ionicon-var-speedometer: "\f2b3";
|
||||
@ionicon-var-spoon: "\f2b4";
|
||||
@ionicon-var-star: "\f24e";
|
||||
@ionicon-var-stats-bars: "\f2b5";
|
||||
@ionicon-var-steam: "\f30b";
|
||||
@ionicon-var-stop: "\f24f";
|
||||
@ionicon-var-thermometer: "\f2b6";
|
||||
@ionicon-var-thumbsdown: "\f250";
|
||||
@ionicon-var-thumbsup: "\f251";
|
||||
@ionicon-var-toggle: "\f355";
|
||||
@ionicon-var-toggle-filled: "\f354";
|
||||
@ionicon-var-transgender: "\f4f5";
|
||||
@ionicon-var-trash-a: "\f252";
|
||||
@ionicon-var-trash-b: "\f253";
|
||||
@ionicon-var-trophy: "\f356";
|
||||
@ionicon-var-tshirt: "\f4f7";
|
||||
@ionicon-var-tshirt-outline: "\f4f6";
|
||||
@ionicon-var-umbrella: "\f2b7";
|
||||
@ionicon-var-university: "\f357";
|
||||
@ionicon-var-unlocked: "\f254";
|
||||
@ionicon-var-upload: "\f255";
|
||||
@ionicon-var-usb: "\f2b8";
|
||||
@ionicon-var-videocamera: "\f256";
|
||||
@ionicon-var-volume-high: "\f257";
|
||||
@ionicon-var-volume-low: "\f258";
|
||||
@ionicon-var-volume-medium: "\f259";
|
||||
@ionicon-var-volume-mute: "\f25a";
|
||||
@ionicon-var-wand: "\f358";
|
||||
@ionicon-var-waterdrop: "\f25b";
|
||||
@ionicon-var-wifi: "\f25c";
|
||||
@ionicon-var-wineglass: "\f2b9";
|
||||
@ionicon-var-woman: "\f25d";
|
||||
@ionicon-var-wrench: "\f2ba";
|
||||
@ionicon-var-xbox: "\f30c";
|
3
assets/3rdparty/adminLTE/plugins/ionicons/less/ionicons.less
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
@import "_ionicons-variables";
|
||||
@import "_ionicons-font";
|
||||
@import "_ionicons-icons";
|
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/alert-circled.png
vendored
Executable file
After Width: | Height: | Size: 2.5 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/alert.png
vendored
Executable file
After Width: | Height: | Size: 766 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-add-contact.png
vendored
Executable file
After Width: | Height: | Size: 3.2 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-add.png
vendored
Executable file
After Width: | Height: | Size: 240 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-alarm.png
vendored
Executable file
After Width: | Height: | Size: 6.3 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-archive.png
vendored
Executable file
After Width: | Height: | Size: 1.6 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-arrow-back.png
vendored
Executable file
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-arrow-down-left.png
vendored
Executable file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-arrow-down-right.png
vendored
Executable file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-arrow-forward.png
vendored
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-arrow-up-left.png
vendored
Executable file
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-arrow-up-right.png
vendored
Executable file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-battery.png
vendored
Executable file
After Width: | Height: | Size: 238 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-book.png
vendored
Executable file
After Width: | Height: | Size: 3.7 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-calendar.png
vendored
Executable file
After Width: | Height: | Size: 849 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-call.png
vendored
Executable file
After Width: | Height: | Size: 4.7 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-camera.png
vendored
Executable file
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-chat.png
vendored
Executable file
After Width: | Height: | Size: 3.5 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-checkmark.png
vendored
Executable file
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-clock.png
vendored
Executable file
After Width: | Height: | Size: 5.1 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-close.png
vendored
Executable file
After Width: | Height: | Size: 2.1 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-contact.png
vendored
Executable file
After Width: | Height: | Size: 3.6 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-contacts.png
vendored
Executable file
After Width: | Height: | Size: 4.2 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-data.png
vendored
Executable file
After Width: | Height: | Size: 4.7 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-developer.png
vendored
Executable file
After Width: | Height: | Size: 4.0 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-display.png
vendored
Executable file
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-download.png
vendored
Executable file
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-drawer.png
vendored
Normal file
After Width: | Height: | Size: 190 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-dropdown.png
vendored
Executable file
After Width: | Height: | Size: 777 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-earth.png
vendored
Executable file
After Width: | Height: | Size: 6.4 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-folder.png
vendored
Executable file
After Width: | Height: | Size: 1.6 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-forums.png
vendored
Executable file
After Width: | Height: | Size: 1.7 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-friends.png
vendored
Executable file
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-hand.png
vendored
Executable file
After Width: | Height: | Size: 4.5 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-image.png
vendored
Executable file
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-inbox.png
vendored
Executable file
After Width: | Height: | Size: 2.9 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-information.png
vendored
Executable file
After Width: | Height: | Size: 3.3 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-keypad.png
vendored
Executable file
After Width: | Height: | Size: 1.0 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-lightbulb.png
vendored
Executable file
After Width: | Height: | Size: 3.4 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-locate.png
vendored
Executable file
After Width: | Height: | Size: 4.9 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-location.png
vendored
Executable file
After Width: | Height: | Size: 3.0 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-mail.png
vendored
Executable file
After Width: | Height: | Size: 3.4 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-microphone.png
vendored
Executable file
After Width: | Height: | Size: 3.2 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-mixer.png
vendored
Executable file
After Width: | Height: | Size: 2.7 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-more.png
vendored
Executable file
After Width: | Height: | Size: 224 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-note.png
vendored
Executable file
After Width: | Height: | Size: 249 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-playstore.png
vendored
Executable file
After Width: | Height: | Size: 3.1 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-printer.png
vendored
Executable file
After Width: | Height: | Size: 1.7 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-promotion.png
vendored
Executable file
After Width: | Height: | Size: 2.3 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-reminder.png
vendored
Executable file
After Width: | Height: | Size: 2.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-remove.png
vendored
Executable file
After Width: | Height: | Size: 160 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-search.png
vendored
Executable file
After Width: | Height: | Size: 4.1 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-send.png
vendored
Executable file
After Width: | Height: | Size: 2.0 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-settings.png
vendored
Executable file
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-share.png
vendored
Executable file
After Width: | Height: | Size: 3.1 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-social-user.png
vendored
Executable file
After Width: | Height: | Size: 3.6 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-social.png
vendored
Executable file
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-sort.png
vendored
Executable file
After Width: | Height: | Size: 197 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-stair-drawer.png
vendored
Normal file
After Width: | Height: | Size: 209 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-star.png
vendored
Executable file
After Width: | Height: | Size: 2.9 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-stopwatch.png
vendored
Executable file
After Width: | Height: | Size: 5.1 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-storage.png
vendored
Executable file
After Width: | Height: | Size: 233 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-system-back.png
vendored
Executable file
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-system-home.png
vendored
Executable file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-system-windows.png
vendored
Executable file
After Width: | Height: | Size: 202 B |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-timer.png
vendored
Executable file
After Width: | Height: | Size: 3.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-trash.png
vendored
Executable file
After Width: | Height: | Size: 2.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-user-menu.png
vendored
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-volume.png
vendored
Executable file
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/android-wifi.png
vendored
Executable file
After Width: | Height: | Size: 4.8 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/aperture.png
vendored
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/archive.png
vendored
Executable file
After Width: | Height: | Size: 2.4 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/arrow-down-a.png
vendored
Executable file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/arrow-down-b.png
vendored
Executable file
After Width: | Height: | Size: 1.3 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/arrow-down-c.png
vendored
Executable file
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/3rdparty/adminLTE/plugins/ionicons/png/512/arrow-expand.png
vendored
Executable file
After Width: | Height: | Size: 2.4 KiB |