diff --git a/CHANGELOG.md b/CHANGELOG.md index 20fc7ac..5571c0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,13 +16,21 @@ Here is a template for new release sections ### Removed - ``` -## [Unreleased] +## [0.1.4] 2020-04-20 ### Added +- Short link to Stemp-Tools on landing page +- Sphinx Makefile +- dynamic title for meta app lists ### Changed - +- Removed unnecessary ionicon files +- Black style - WAM installation instructions improved (esp. for Windows) #95 +- Assumptions and sources are deleted if category is deleted (cascade) + +### Security +- set django version to 2.2.10 ## [0.1.3] 2019-09-19 diff --git a/db_apps/oemof_results.py b/db_apps/oemof_results.py index 606c932..0782660 100644 --- a/db_apps/oemof_results.py +++ b/db_apps/oemof_results.py @@ -1,9 +1,7 @@ - import re import pandas import transaction -from sqlalchemy import ( - Column, Integer, String, ARRAY, ForeignKey) +from sqlalchemy import Column, Integer, String, ARRAY, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.dialects.postgresql import DOUBLE_PRECISION from sqlalchemy.ext.declarative import declarative_base @@ -48,90 +46,49 @@ class OemofInputResult(Base): - __tablename__ = 'stemp_oemof_input_result' + __tablename__ = "stemp_oemof_input_result" - input_result_id = Column( - Integer, - primary_key=True - ) - input_id = Column(Integer, ForeignKey('stemp_oemof_data.data_id')) - result_id = Column(Integer, ForeignKey('stemp_oemof_data.data_id')) + input_result_id = Column(Integer, primary_key=True) + input_id = Column(Integer, ForeignKey("stemp_oemof_data.data_id")) + result_id = Column(Integer, ForeignKey("stemp_oemof_data.data_id")) input = relationship( - "OemofData", - backref="input", - uselist=False, - foreign_keys=[input_id], + "OemofData", backref="input", uselist=False, foreign_keys=[input_id], ) result = relationship( - "OemofData", - backref="result", - uselist=False, - foreign_keys=[result_id], + "OemofData", backref="result", uselist=False, foreign_keys=[result_id], ) class OemofData(Base): - __tablename__ = 'stemp_oemof_data' + __tablename__ = "stemp_oemof_data" - data_id = Column( - Integer, - primary_key=True - ) + data_id = Column(Integer, primary_key=True) scalars = relationship("OemofScalar", cascade="delete") sequences = relationship("OemofSequence", cascade="delete") class OemofScalar(Base): - __tablename__ = 'stemp_oemof_scalar' + __tablename__ = "stemp_oemof_scalar" - scalar_id = Column( - Integer, - primary_key=True - ) - data_id = Column( - Integer, ForeignKey('stemp_oemof_data.data_id')) - from_node = Column( - String - ) - to_node = Column( - String - ) - attribute = Column( - String - ) - value = Column( - String - ) - type = Column( - String - ) + scalar_id = Column(Integer, primary_key=True) + data_id = Column(Integer, ForeignKey("stemp_oemof_data.data_id")) + from_node = Column(String) + to_node = Column(String) + attribute = Column(String) + value = Column(String) + type = Column(String) class OemofSequence(Base): - __tablename__ = 'stemp_oemof_sequence' + __tablename__ = "stemp_oemof_sequence" - sequence_id = Column( - Integer, - primary_key=True - ) - data_id = Column( - Integer, ForeignKey('stemp_oemof_data.data_id')) - from_node = Column( - String - ) - to_node = Column( - String, - nullable=True - ) - attribute = Column( - String - ) - value = Column( - ARRAY(DOUBLE_PRECISION) - ) - type = Column( - String - ) + sequence_id = Column(Integer, primary_key=True) + data_id = Column(Integer, ForeignKey("stemp_oemof_data.data_id")) + from_node = Column(String) + to_node = Column(String, nullable=True) + attribute = Column(String) + value = Column(ARRAY(DOUBLE_PRECISION)) + type = Column(String) def store_results(session, input_data, result_data): @@ -166,34 +123,33 @@ def store_results(session, input_data, result_data): result_data = convert_keys_to_strings(result_data) input_result = OemofInputResult() - for input_result_attr, data in ( - ('input', input_data), ('result', result_data)): + for input_result_attr, data in (("input", input_data), ("result", result_data)): scalars = [] sequences = [] for (from_node, to_node), sc_sq_dict in data.items(): - for key, value in sc_sq_dict['scalars'].items(): + for key, value in sc_sq_dict["scalars"].items(): scalars.append( OemofScalar( from_node=from_node, to_node=to_node, attribute=key, value=value, - type=type(value).__name__ + type=type(value).__name__, ) ) session.add_all(scalars) - for key, series in sc_sq_dict['sequences'].items(): - list_type = 'list' + for key, series in sc_sq_dict["sequences"].items(): + list_type = "list" if isinstance(series, pandas.Series): series = series.values.tolist() - list_type = 'series' + list_type = "series" sequences.append( OemofSequence( from_node=from_node, to_node=to_node, attribute=key, value=series, - type=list_type + type=list_type, ) ) session.add_all(sequences) @@ -208,8 +164,9 @@ def store_results(session, input_data, result_data): return result_id -def restore_results(session, input_result_id, restore_none_type=False, - advanced_label=None): +def restore_results( + session, input_result_id, restore_none_type=False, advanced_label=None +): """ Restores input and result data from OemofInputResult from DB @@ -229,49 +186,47 @@ def restore_results(session, input_result_id, restore_none_type=False, (dict, dict): Restored input- and result-data """ + def type_conversion(value_str, value_type): - if value_type == 'str': + if value_type == "str": return value_str - elif value_type == 'float': + elif value_type == "float": return float(value_str) - elif value_type == 'int': + elif value_type == "int": return int(value_str) - elif value_type == 'bool': + elif value_type == "bool": return bool(value_str) else: raise TypeError('Unknown conversion type "' + value_type + '"') def convert_label_to_namedtuple(label): def unpack_tuples(value): - if value.startswith('(') and value.endswith(')'): - value_list = value[1:-1].split(', ') + if value.startswith("(") and value.endswith(")"): + value_list = value[1:-1].split(", ") if len(value_list) == 1: single = value_list[0][:-1] - return (None, ) if single == 'None' else (single, ) + return (None,) if single == "None" else (single,) else: - return (None if v == 'None' else v for v in value_list) + return (None if v == "None" else v for v in value_list) else: - return None if value == 'None' else value + return None if value == "None" else value pattern = ( - f"{advanced_label.__name__}\(" + - ', '.join( + f"{advanced_label.__name__}\(" + + ", ".join( [ f"{field}=(?P<{field}>[\(\)A-Za-z0-9#._\-,\ ']*)" for field in advanced_label._fields ] - ) + - "\)" + ) + + "\)" ) try: - match = re.match(pattern, label.replace('\'', '')) + match = re.match(pattern, label.replace("'", "")) except AttributeError: return label if match is not None: - fields = { - k: unpack_tuples(v) - for k, v in match.groupdict().items() - } + fields = {k: unpack_tuples(v) for k, v in match.groupdict().items()} return advanced_label(**fields) else: return label @@ -281,35 +236,39 @@ def get_nodes(scalar_or_sequence): if advanced_label is not None: raw_nodes = tuple(map(convert_label_to_namedtuple, raw_nodes)) if restore_none_type: - return tuple(map(lambda x: None if x == 'None' else x, raw_nodes)) + return tuple(map(lambda x: None if x == "None" else x, raw_nodes)) else: return raw_nodes # Find results: - input_result = session.query(OemofInputResult).filter( - OemofInputResult.input_result_id == input_result_id).first() + input_result = ( + session.query(OemofInputResult) + .filter(OemofInputResult.input_result_id == input_result_id) + .first() + ) if input_result is None: raise IndexError( - 'Could not find OemofInputResult with ID #' + str(input_result_id)) + "Could not find OemofInputResult with ID #" + str(input_result_id) + ) input_data = {} result_data = {} - for input_result_attr, data in ( - ('input', input_data), ('result', result_data)): + for input_result_attr, data in (("input", input_data), ("result", result_data)): ir_attr = getattr(input_result, input_result_attr) for scalar in ir_attr.scalars: nodes = get_nodes(scalar) if nodes not in data: - data[nodes] = {'scalars': {}, 'sequences': {}} - data[nodes]['scalars'][scalar.attribute] = type_conversion( - scalar.value, scalar.type) + data[nodes] = {"scalars": {}, "sequences": {}} + data[nodes]["scalars"][scalar.attribute] = type_conversion( + scalar.value, scalar.type + ) for sequence in ir_attr.sequences: nodes = get_nodes(sequence) if nodes not in data: - data[nodes] = {'scalars': {}, 'sequences': {}} - if sequence.type == 'series': + data[nodes] = {"scalars": {}, "sequences": {}} + if sequence.type == "series": series = pandas.Series(sequence.value) else: series = sequence.value - data[nodes]['sequences'][sequence.attribute] = series + data[nodes]["sequences"][sequence.attribute] = series return input_data, result_data diff --git a/doc/Makefile b/doc/Makefile new file mode 100755 index 0000000..298ea9e --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,19 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/doc/_static/run_tasks.py b/doc/_static/run_tasks.py index 3b590f0..1bf1165 100644 --- a/doc/_static/run_tasks.py +++ b/doc/_static/run_tasks.py @@ -1,4 +1,3 @@ - from app_name import tasks diff --git a/doc/_static/tasks.py b/doc/_static/tasks.py index 8092883..8b6d4dc 100644 --- a/doc/_static/tasks.py +++ b/doc/_static/tasks.py @@ -1,4 +1,3 @@ - from wam.celery import app diff --git a/doc/conf.py b/doc/conf.py index b9ea50f..54175ac 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -19,14 +19,14 @@ # -- Project information ----------------------------------------------------- -project = 'WAM-Server' -copyright = '2018, Hendrik Huyskens' -author = 'Hendrik Huyskens' +project = "WAM-Server" +copyright = "2018, Hendrik Huyskens" +author = "Hendrik Huyskens" # The short X.Y version -version = '' +version = "" # The full version, including alpha/beta/rc tags -release = '' +release = "" # -- General configuration --------------------------------------------------- @@ -39,25 +39,25 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.doctest', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.viewcode', + "sphinx.ext.autodoc", + "sphinx.ext.doctest", + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx.ext.coverage", + "sphinx.ext.viewcode", ] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -80,7 +80,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'alabaster' +html_theme = "alabaster" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -91,7 +91,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. @@ -107,7 +107,7 @@ # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. -htmlhelp_basename = 'WAM-Serverdoc' +htmlhelp_basename = "WAM-Serverdoc" # -- Options for LaTeX output ------------------------------------------------ @@ -116,15 +116,12 @@ # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. # # 'preamble': '', - # Latex figure (float) alignment # # 'figure_align': 'htbp', @@ -134,8 +131,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'WAM-Server.tex', 'WAM-Server Documentation', - 'Hendrik Huyskens', 'manual'), + ( + master_doc, + "WAM-Server.tex", + "WAM-Server Documentation", + "Hendrik Huyskens", + "manual", + ), ] @@ -143,10 +145,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'wam-server', 'WAM-Server Documentation', - [author], 1) -] +man_pages = [(master_doc, "wam-server", "WAM-Server Documentation", [author], 1)] # -- Options for Texinfo output ---------------------------------------------- @@ -155,9 +154,15 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'WAM-Server', 'WAM-Server Documentation', - author, 'WAM-Server', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "WAM-Server", + "WAM-Server Documentation", + author, + "WAM-Server", + "One line description of project.", + "Miscellaneous", + ), ] @@ -176,7 +181,7 @@ # epub_uid = '' # A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] +epub_exclude_files = ["search.html"] # -- Extension configuration ------------------------------------------------- @@ -184,9 +189,9 @@ # -- Options for intersphinx extension --------------------------------------- # Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'https://docs.python.org/': None} +intersphinx_mapping = {"https://docs.python.org/": None} # -- Options for todo extension ---------------------------------------------- # If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True \ No newline at end of file +todo_include_todos = True diff --git a/install_requirements.py b/install_requirements.py index 2854758..f2d00b4 100644 --- a/install_requirements.py +++ b/install_requirements.py @@ -2,11 +2,9 @@ import subprocess base_dir = os.path.abspath(os.path.curdir) -pip_path = subprocess.check_output(['which', 'pip']).decode().strip('\n') -apps = os.environ['WAM_APPS'].split(',') +pip_path = subprocess.check_output(["which", "pip"]).decode().strip("\n") +apps = os.environ["WAM_APPS"].split(",") for app in apps: - req_file = os.path.join(base_dir, app, 'requirements.txt') + req_file = os.path.join(base_dir, app, "requirements.txt") if os.path.isfile(req_file): - subprocess.call( - [pip_path, 'install', '-r', req_file] - ) + subprocess.call([pip_path, "install", "-r", req_file]) diff --git a/meta/admin.py b/meta/admin.py index 457fab9..6527fa7 100644 --- a/meta/admin.py +++ b/meta/admin.py @@ -1,4 +1,3 @@ - from wam.admin import wam_admin_site from meta import models diff --git a/meta/apps.py b/meta/apps.py index 13f6832..1767574 100644 --- a/meta/apps.py +++ b/meta/apps.py @@ -2,4 +2,4 @@ class MetaConfig(AppConfig): - name = 'meta' + name = "meta" diff --git a/meta/migrations/0001_initial.py b/meta/migrations/0001_initial.py index 1849d75..c53b444 100644 --- a/meta/migrations/0001_initial.py +++ b/meta/migrations/0001_initial.py @@ -8,49 +8,76 @@ class Migration(migrations.Migration): initial = True - dependencies = [ - ] + dependencies = [] operations = [ migrations.CreateModel( - name='Assumption', + name="Assumption", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('description', models.TextField()), - ('value', models.CharField(max_length=64)), - ('value_type', models.CharField(max_length=32)), - ('app_name', models.CharField(max_length=255)), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=255)), + ("description", models.TextField()), + ("value", models.CharField(max_length=64)), + ("value_type", models.CharField(max_length=32)), + ("app_name", models.CharField(max_length=255)), ], ), migrations.CreateModel( - name='Source', + name="Source", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('author', models.CharField(max_length=255)), - ('url', models.URLField()), - ('description', models.TextField()), - ('year', models.IntegerField()), - ('license', models.CharField(max_length=255)), - ('app_name', models.CharField(max_length=255)), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("author", models.CharField(max_length=255)), + ("url", models.URLField()), + ("description", models.TextField()), + ("year", models.IntegerField()), + ("license", models.CharField(max_length=255)), + ("app_name", models.CharField(max_length=255)), ], ), migrations.CreateModel( - name='SourceCategory', + name="SourceCategory", fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('description', models.TextField()), + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=255)), + ("description", models.TextField()), ], ), migrations.AddField( - model_name='source', - name='category', - field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='meta.SourceCategory'), + model_name="source", + name="category", + field=models.ForeignKey( + on_delete=django.db.models.deletion.DO_NOTHING, to="meta.SourceCategory" + ), ), migrations.AddField( - model_name='assumption', - name='source', - field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='meta.Source'), + model_name="assumption", + name="source", + field=models.ForeignKey( + on_delete=django.db.models.deletion.DO_NOTHING, to="meta.Source" + ), ), ] diff --git a/meta/migrations/0002_auto_20181130_1141.py b/meta/migrations/0002_auto_20181130_1141.py index 67e61bd..251c35b 100644 --- a/meta/migrations/0002_auto_20181130_1141.py +++ b/meta/migrations/0002_auto_20181130_1141.py @@ -6,13 +6,11 @@ class Migration(migrations.Migration): dependencies = [ - ('meta', '0001_initial'), + ("meta", "0001_initial"), ] operations = [ migrations.RenameField( - model_name='assumption', - old_name='value_type', - new_name='unit', + model_name="assumption", old_name="value_type", new_name="unit", ), ] diff --git a/meta/migrations/0003_source_meta_data.py b/meta/migrations/0003_source_meta_data.py index 1c9c5b2..d392e9b 100644 --- a/meta/migrations/0003_source_meta_data.py +++ b/meta/migrations/0003_source_meta_data.py @@ -7,13 +7,13 @@ class Migration(migrations.Migration): dependencies = [ - ('meta', '0002_auto_20181130_1141'), + ("meta", "0002_auto_20181130_1141"), ] operations = [ migrations.AddField( - model_name='source', - name='meta_data', + model_name="source", + name="meta_data", field=django.contrib.postgres.fields.jsonb.JSONField(null=True), ), ] diff --git a/meta/migrations/0004_auto_20190207_1139.py b/meta/migrations/0004_auto_20190207_1139.py index 354a78a..7d048bc 100644 --- a/meta/migrations/0004_auto_20190207_1139.py +++ b/meta/migrations/0004_auto_20190207_1139.py @@ -7,18 +7,19 @@ class Migration(migrations.Migration): dependencies = [ - ('meta', '0003_source_meta_data'), + ("meta", "0003_source_meta_data"), ] operations = [ - migrations.RenameModel( - old_name='SourceCategory', - new_name='Category', - ), + migrations.RenameModel(old_name="SourceCategory", new_name="Category",), migrations.AddField( - model_name='assumption', - name='category', - field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.DO_NOTHING, to='meta.Category'), + model_name="assumption", + name="category", + field=models.ForeignKey( + default=None, + on_delete=django.db.models.deletion.DO_NOTHING, + to="meta.Category", + ), preserve_default=False, ), ] diff --git a/meta/migrations/0005_auto_20190211_1125.py b/meta/migrations/0005_auto_20190211_1125.py index 88ba2e8..128a367 100644 --- a/meta/migrations/0005_auto_20190211_1125.py +++ b/meta/migrations/0005_auto_20190211_1125.py @@ -6,28 +6,13 @@ class Migration(migrations.Migration): dependencies = [ - ('meta', '0004_auto_20190207_1139'), + ("meta", "0004_auto_20190207_1139"), ] operations = [ - migrations.RemoveField( - model_name='source', - name='author', - ), - migrations.RemoveField( - model_name='source', - name='description', - ), - migrations.RemoveField( - model_name='source', - name='license', - ), - migrations.RemoveField( - model_name='source', - name='url', - ), - migrations.RemoveField( - model_name='source', - name='year', - ), + migrations.RemoveField(model_name="source", name="author",), + migrations.RemoveField(model_name="source", name="description",), + migrations.RemoveField(model_name="source", name="license",), + migrations.RemoveField(model_name="source", name="url",), + migrations.RemoveField(model_name="source", name="year",), ] diff --git a/meta/migrations/0006_auto_20191212_1617.py b/meta/migrations/0006_auto_20191212_1617.py new file mode 100644 index 0000000..9a79ab7 --- /dev/null +++ b/meta/migrations/0006_auto_20191212_1617.py @@ -0,0 +1,35 @@ +# Generated by Django 2.2.5 on 2019-12-12 15:17 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("meta", "0005_auto_20190211_1125"), + ] + + operations = [ + migrations.AlterField( + model_name="assumption", + name="category", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="meta.Category" + ), + ), + migrations.AlterField( + model_name="assumption", + name="source", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="meta.Source" + ), + ), + migrations.AlterField( + model_name="source", + name="category", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="meta.Category" + ), + ), + ] diff --git a/meta/models.py b/meta/models.py index 6ccab42..283b865 100644 --- a/meta/models.py +++ b/meta/models.py @@ -1,4 +1,3 @@ - import jmespath from django.db import models @@ -13,6 +12,7 @@ class Assumption(models.Model): A source must be assigned to exactly one :class:`Source` defined in `source`. """ + name = models.CharField(max_length=255) description = models.TextField() value = models.CharField(max_length=64) @@ -20,8 +20,8 @@ class Assumption(models.Model): app_name = models.CharField(max_length=255) - source = models.ForeignKey('Source', on_delete=models.DO_NOTHING) - category = models.ForeignKey('Category', on_delete=models.DO_NOTHING) + source = models.ForeignKey("Source", on_delete=models.CASCADE) + category = models.ForeignKey("Category", on_delete=models.CASCADE) def __str__(self): return self.name @@ -33,30 +33,31 @@ class Source(models.Model): A source must be assigned to exactly one :class:`Category` defined in `category`. """ + meta_data = JSONField(null=True) app_name = models.CharField(max_length=255) - category = models.ForeignKey('Category', on_delete=models.DO_NOTHING) + category = models.ForeignKey("Category", on_delete=models.CASCADE) def json(self): return JsonWidget(self.meta_data).render() def infos(self): infos = jmespath.search( - '{' - 'url: identifier, ' - 'title: title, ' - 'description: description, ' - 'licenses: licenses[*].name' - '}', - self.meta_data + "{" + "url: identifier, " + "title: title, " + "description: description, " + "licenses: licenses[*].name" + "}", + self.meta_data, ) - if infos.get('url') is not None: - if infos.get('url') == '': - infos.pop('url') + if infos.get("url") is not None: + if infos.get("url") == "": + infos.pop("url") else: - infos.pop('url') + infos.pop("url") return infos @@ -65,6 +66,7 @@ class Category(models.Model): A category subsumes one or multiple sources, see :class:`Source`. """ + name = models.CharField(max_length=255) description = models.TextField() diff --git a/meta/templates/meta/app_list.html b/meta/templates/meta/app_list.html index 237e70b..d458d06 100644 --- a/meta/templates/meta/app_list.html +++ b/meta/templates/meta/app_list.html @@ -7,7 +7,7 @@
{self.json["title"]}
' if self.json["description"] != "": diff --git a/requirements.txt b/requirements.txt index d10334b..041afd7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -django==2.2.9 +django==2.2.10 jmespath gunicorn pandas diff --git a/setup.py b/setup.py index 90d7c39..89b81b8 100644 --- a/setup.py +++ b/setup.py @@ -2,22 +2,23 @@ from setuptools import setup, find_packages -with open('requirements.txt') as f: +with open("requirements.txt") as f: requirements = f.read().splitlines() git_requirements = [ f"{req.split('#egg=')[1]} @ {req}" - for req in requirements if req.startswith('git') + for req in requirements + if req.startswith("git") ] - normal_requirements = [req for req in requirements if not req.startswith('git')] + normal_requirements = [req for req in requirements if not req.startswith("git")] setup( - name='wam', - version='0.1.3', + name="wam", + version="0.1.3", packages=find_packages(), - license='GNU Affero General Public License v3.0', - author='henhuy, nesnoj, Bachibouzouk, christian-rli, 4lm', - description='WAM - Web Applications & Maps', - url='https://github.com/rl-institut/WAM', + license="GNU Affero General Public License v3.0", + author="henhuy, nesnoj, Bachibouzouk, christian-rli, 4lm", + description="WAM - Web Applications & Maps", + url="https://github.com/rl-institut/WAM", install_requires=normal_requirements + git_requirements, - scripts=['manage.py'] + scripts=["manage.py"], ) diff --git a/static/ionicons-2.0.1/builder/build_data.json b/static/ionicons-2.0.1/builder/build_data.json deleted file mode 100644 index e7eecca..0000000 --- a/static/ionicons-2.0.1/builder/build_data.json +++ /dev/null @@ -1,2940 +0,0 @@ -{ - "build_hash": "c9df150ee06f9db1642a5350c56829ae", - "prefix": "ion-", - "version": "2.0.0", - "name": "Ionicons", - "icons": [ - { - "code": "0xf101", - "name": "alert" - }, - { - "code": "0xf100", - "name": "alert-circled" - }, - { - "code": "0xf2c7", - "name": "android-add" - }, - { - "code": "0xf359", - "name": "android-add-circle" - }, - { - "code": "0xf35a", - "name": "android-alarm-clock" - }, - { - "code": "0xf35b", - "name": "android-alert" - }, - { - "code": "0xf35c", - "name": "android-apps" - }, - { - "code": "0xf2c9", - "name": "android-archive" - }, - { - "code": "0xf2ca", - "name": "android-arrow-back" - }, - { - "code": "0xf35d", - "name": "android-arrow-down" - }, - { - "code": "0xf35f", - "name": "android-arrow-dropdown" - }, - { - "code": "0xf35e", - "name": "android-arrow-dropdown-circle" - }, - { - "code": "0xf361", - "name": "android-arrow-dropleft" - }, - { - "code": "0xf360", - "name": "android-arrow-dropleft-circle" - }, - { - "code": "0xf363", - "name": "android-arrow-dropright" - }, - { - "code": "0xf362", - "name": "android-arrow-dropright-circle" - }, - { - "code": "0xf365", - "name": "android-arrow-dropup" - }, - { - "code": "0xf364", - "name": "android-arrow-dropup-circle" - }, - { - "code": "0xf30f", - "name": "android-arrow-forward" - }, - { - "code": "0xf366", - "name": "android-arrow-up" - }, - { - "code": "0xf367", - "name": "android-attach" - }, - { - "code": "0xf368", - "name": "android-bar" - }, - { - "code": "0xf369", - "name": "android-bicycle" - }, - { - "code": "0xf36a", - "name": "android-boat" - }, - { - "code": "0xf36b", - "name": "android-bookmark" - }, - { - "code": "0xf36c", - "name": "android-bulb" - }, - { - "code": "0xf36d", - "name": "android-bus" - }, - { - "code": "0xf2d1", - "name": "android-calendar" - }, - { - "code": "0xf2d2", - "name": "android-call" - }, - { - "code": "0xf2d3", - "name": "android-camera" - }, - { - "code": "0xf36e", - "name": "android-cancel" - }, - { - "code": "0xf36f", - "name": "android-car" - }, - { - "code": "0xf370", - "name": "android-cart" - }, - { - "code": "0xf2d4", - "name": "android-chat" - }, - { - "code": "0xf374", - "name": "android-checkbox" - }, - { - "code": "0xf371", - "name": "android-checkbox-blank" - }, - { - "code": "0xf373", - "name": "android-checkbox-outline" - }, - { - "code": "0xf372", - "name": "android-checkbox-outline-blank" - }, - { - "code": "0xf375", - "name": "android-checkmark-circle" - }, - { - "code": "0xf376", - "name": "android-clipboard" - }, - { - "code": "0xf2d7", - "name": "android-close" - }, - { - "code": "0xf37a", - "name": "android-cloud" - }, - { - "code": "0xf377", - "name": "android-cloud-circle" - }, - { - "code": "0xf378", - "name": "android-cloud-done" - }, - { - "code": "0xf379", - "name": "android-cloud-outline" - }, - { - "code": "0xf37b", - "name": "android-color-palette" - }, - { - "code": "0xf37c", - "name": "android-compass" - }, - { - "code": "0xf2d8", - "name": "android-contact" - }, - { - "code": "0xf2d9", - "name": "android-contacts" - }, - { - "code": "0xf37d", - "name": "android-contract" - }, - { - "code": "0xf37e", - "name": "android-create" - }, - { - "code": "0xf37f", - "name": "android-delete" - }, - { - "code": "0xf380", - "name": "android-desktop" - }, - { - "code": "0xf381", - "name": "android-document" - }, - { - "code": "0xf383", - "name": "android-done" - }, - { - "code": "0xf382", - "name": "android-done-all" - }, - { - "code": "0xf2dd", - "name": "android-download" - }, - { - "code": "0xf384", - "name": "android-drafts" - }, - { - "code": "0xf385", - "name": "android-exit" - }, - { - "code": "0xf386", - "name": "android-expand" - }, - { - "code": "0xf388", - "name": "android-favorite" - }, - { - "code": "0xf387", - "name": "android-favorite-outline" - }, - { - "code": "0xf389", - "name": "android-film" - }, - { - "code": "0xf2e0", - "name": "android-folder" - }, - { - "code": "0xf38a", - "name": "android-folder-open" - }, - { - "code": "0xf38b", - "name": "android-funnel" - }, - { - "code": "0xf38c", - "name": "android-globe" - }, - { - "code": "0xf2e3", - "name": "android-hand" - }, - { - "code": "0xf38d", - "name": "android-hangout" - }, - { - "code": "0xf38e", - "name": "android-happy" - }, - { - "code": "0xf38f", - "name": "android-home" - }, - { - "code": "0xf2e4", - "name": "android-image" - }, - { - "code": "0xf390", - "name": "android-laptop" - }, - { - "code": "0xf391", - "name": "android-list" - }, - { - "code": "0xf2e9", - "name": "android-locate" - }, - { - "code": "0xf392", - "name": "android-lock" - }, - { - "code": "0xf2eb", - "name": "android-mail" - }, - { - "code": "0xf393", - "name": "android-map" - }, - { - "code": "0xf394", - "name": "android-menu" - }, - { - "code": "0xf2ec", - "name": "android-microphone" - }, - { - "code": "0xf395", - "name": "android-microphone-off" - }, - { - "code": "0xf396", - "name": "android-more-horizontal" - }, - { - "code": "0xf397", - "name": "android-more-vertical" - }, - { - "code": "0xf398", - "name": "android-navigate" - }, - { - "code": "0xf39b", - "name": "android-notifications" - }, - { - "code": "0xf399", - "name": "android-notifications-none" - }, - { - "code": "0xf39a", - "name": "android-notifications-off" - }, - { - "code": "0xf39c", - "name": "android-open" - }, - { - "code": "0xf39d", - "name": "android-options" - }, - { - "code": "0xf39e", - "name": "android-people" - }, - { - "code": "0xf3a0", - "name": "android-person" - }, - { - "code": "0xf39f", - "name": "android-person-add" - }, - { - "code": "0xf3a1", - "name": "android-phone-landscape" - }, - { - "code": "0xf3a2", - "name": "android-phone-portrait" - }, - { - "code": "0xf3a3", - "name": "android-pin" - }, - { - "code": "0xf3a4", - "name": "android-plane" - }, - { - "code": "0xf2f0", - "name": "android-playstore" - }, - { - "code": "0xf3a5", - "name": "android-print" - }, - { - "code": "0xf3a6", - "name": "android-radio-button-off" - }, - { - "code": "0xf3a7", - "name": "android-radio-button-on" - }, - { - "code": "0xf3a8", - "name": "android-refresh" - }, - { - "code": "0xf2f4", - "name": "android-remove" - }, - { - "code": "0xf3a9", - "name": "android-remove-circle" - }, - { - "code": "0xf3aa", - "name": "android-restaurant" - }, - { - "code": "0xf3ab", - "name": "android-sad" - }, - { - "code": "0xf2f5", - "name": "android-search" - }, - { - "code": "0xf2f6", - "name": "android-send" - }, - { - "code": "0xf2f7", - "name": "android-settings" - }, - { - "code": "0xf2f8", - "name": "android-share" - }, - { - "code": "0xf3ac", - "name": "android-share-alt" - }, - { - "code": "0xf2fc", - "name": "android-star" - }, - { - "code": "0xf3ad", - "name": "android-star-half" - }, - { - "code": "0xf3ae", - "name": "android-star-outline" - }, - { - "code": "0xf2fd", - "name": "android-stopwatch" - }, - { - "code": "0xf3af", - "name": "android-subway" - }, - { - "code": "0xf3b0", - "name": "android-sunny" - }, - { - "code": "0xf3b1", - "name": "android-sync" - }, - { - "code": "0xf3b2", - "name": "android-textsms" - }, - { - "code": "0xf3b3", - "name": "android-time" - }, - { - "code": "0xf3b4", - "name": "android-train" - }, - { - "code": "0xf3b5", - "name": "android-unlock" - }, - { - "code": "0xf3b6", - "name": "android-upload" - }, - { - "code": "0xf3b7", - "name": "android-volume-down" - }, - { - "code": "0xf3b8", - "name": "android-volume-mute" - }, - { - "code": "0xf3b9", - "name": "android-volume-off" - }, - { - "code": "0xf3ba", - "name": "android-volume-up" - }, - { - "code": "0xf3bb", - "name": "android-walk" - }, - { - "code": "0xf3bc", - "name": "android-warning" - }, - { - "code": "0xf3bd", - "name": "android-watch" - }, - { - "code": "0xf305", - "name": "android-wifi" - }, - { - "code": "0xf313", - "name": "aperture" - }, - { - "code": "0xf102", - "name": "archive" - }, - { - "code": "0xf103", - "name": "arrow-down-a" - }, - { - "code": "0xf104", - "name": "arrow-down-b" - }, - { - "code": "0xf105", - "name": "arrow-down-c" - }, - { - "code": "0xf25e", - "name": "arrow-expand" - }, - { - "code": "0xf25f", - "name": "arrow-graph-down-left" - }, - { - "code": "0xf260", - "name": "arrow-graph-down-right" - }, - { - "code": "0xf261", - "name": "arrow-graph-up-left" - }, - { - "code": "0xf262", - "name": "arrow-graph-up-right" - }, - { - "code": "0xf106", - "name": "arrow-left-a" - }, - { - "code": "0xf107", - "name": "arrow-left-b" - }, - { - "code": "0xf108", - "name": "arrow-left-c" - }, - { - "code": "0xf263", - "name": "arrow-move" - }, - { - "code": "0xf264", - "name": "arrow-resize" - }, - { - "code": "0xf265", - "name": "arrow-return-left" - }, - { - "code": "0xf266", - "name": "arrow-return-right" - }, - { - "code": "0xf109", - "name": "arrow-right-a" - }, - { - "code": "0xf10a", - "name": "arrow-right-b" - }, - { - "code": "0xf10b", - "name": "arrow-right-c" - }, - { - "code": "0xf267", - "name": "arrow-shrink" - }, - { - "code": "0xf268", - "name": "arrow-swap" - }, - { - "code": "0xf10c", - "name": "arrow-up-a" - }, - { - "code": "0xf10d", - "name": "arrow-up-b" - }, - { - "code": "0xf10e", - "name": "arrow-up-c" - }, - { - "code": "0xf314", - "name": "asterisk" - }, - { - "code": "0xf10f", - "name": "at" - }, - { - "code": "0xf3bf", - "name": "backspace" - }, - { - "code": "0xf3be", - "name": "backspace-outline" - }, - { - "code": "0xf110", - "name": "bag" - }, - { - "code": "0xf111", - "name": "battery-charging" - }, - { - "code": "0xf112", - "name": "battery-empty" - }, - { - "code": "0xf113", - "name": "battery-full" - }, - { - "code": "0xf114", - "name": "battery-half" - }, - { - "code": "0xf115", - "name": "battery-low" - }, - { - "code": "0xf269", - "name": "beaker" - }, - { - "code": "0xf26a", - "name": "beer" - }, - { - "code": "0xf116", - "name": "bluetooth" - }, - { - "code": "0xf315", - "name": "bonfire" - }, - { - "code": "0xf26b", - "name": "bookmark" - }, - { - "code": "0xf3c0", - "name": "bowtie" - }, - { - "code": "0xf26c", - "name": "briefcase" - }, - { - "code": "0xf2be", - "name": "bug" - }, - { - "code": "0xf26d", - "name": "calculator" - }, - { - "code": "0xf117", - "name": "calendar" - }, - { - "code": "0xf118", - "name": "camera" - }, - { - "code": "0xf119", - "name": "card" - }, - { - "code": "0xf316", - "name": "cash" - }, - { - "code": "0xf11b", - "name": "chatbox" - }, - { - "code": "0xf11a", - "name": "chatbox-working" - }, - { - "code": "0xf11c", - "name": "chatboxes" - }, - { - "code": "0xf11e", - "name": "chatbubble" - }, - { - "code": "0xf11d", - "name": "chatbubble-working" - }, - { - "code": "0xf11f", - "name": "chatbubbles" - }, - { - "code": "0xf122", - "name": "checkmark" - }, - { - "code": "0xf120", - "name": "checkmark-circled" - }, - { - "code": "0xf121", - "name": "checkmark-round" - }, - { - "code": "0xf123", - "name": "chevron-down" - }, - { - "code": "0xf124", - "name": "chevron-left" - }, - { - "code": "0xf125", - "name": "chevron-right" - }, - { - "code": "0xf126", - "name": "chevron-up" - }, - { - "code": "0xf127", - "name": "clipboard" - }, - { - "code": "0xf26e", - "name": "clock" - }, - { - "code": "0xf12a", - "name": "close" - }, - { - "code": "0xf128", - "name": "close-circled" - }, - { - "code": "0xf129", - "name": "close-round" - }, - { - "code": "0xf317", - "name": "closed-captioning" - }, - { - "code": "0xf12b", - "name": "cloud" - }, - { - "code": "0xf271", - "name": "code" - }, - { - "code": "0xf26f", - "name": "code-download" - }, - { - "code": "0xf270", - "name": "code-working" - }, - { - "code": "0xf272", - "name": "coffee" - }, - { - "code": "0xf273", - "name": "compass" - }, - { - "code": "0xf12c", - "name": "compose" - }, - { - "code": "0xf274", - "name": "connection-bars" - }, - { - "code": "0xf275", - "name": "contrast" - }, - { - "code": "0xf3c1", - "name": "crop" - }, - { - "code": "0xf318", - "name": "cube" - }, - { - "code": "0xf12d", - "name": "disc" - }, - { - "code": "0xf12f", - "name": "document" - }, - { - "code": "0xf12e", - "name": "document-text" - }, - { - "code": "0xf130", - "name": "drag" - }, - { - "code": "0xf276", - "name": "earth" - }, - { - "code": "0xf3c2", - "name": "easel" - }, - { - "code": "0xf2bf", - "name": "edit" - }, - { - "code": "0xf277", - "name": "egg" - }, - { - "code": "0xf131", - "name": "eject" - }, - { - "code": "0xf132", - "name": "email" - }, - { - "code": "0xf3c3", - "name": "email-unread" - }, - { - "code": "0xf3c5", - "name": "erlenmeyer-flask" - }, - { - "code": "0xf3c4", - "name": "erlenmeyer-flask-bubbles" - }, - { - "code": "0xf133", - "name": "eye" - }, - { - "code": "0xf306", - "name": "eye-disabled" - }, - { - "code": "0xf278", - "name": "female" - }, - { - "code": "0xf134", - "name": "filing" - }, - { - "code": "0xf135", - "name": "film-marker" - }, - { - "code": "0xf319", - "name": "fireball" - }, - { - "code": "0xf279", - "name": "flag" - }, - { - "code": "0xf31a", - "name": "flame" - }, - { - "code": "0xf137", - "name": "flash" - }, - { - "code": "0xf136", - "name": "flash-off" - }, - { - "code": "0xf139", - "name": "folder" - }, - { - "code": "0xf27a", - "name": "fork" - }, - { - "code": "0xf2c0", - "name": "fork-repo" - }, - { - "code": "0xf13a", - "name": "forward" - }, - { - "code": "0xf31b", - "name": "funnel" - }, - { - "code": "0xf13d", - "name": "gear-a" - }, - { - "code": "0xf13e", - "name": "gear-b" - }, - { - "code": "0xf13f", - "name": "grid" - }, - { - "code": "0xf27b", - "name": "hammer" - }, - { - "code": "0xf31c", - "name": "happy" - }, - { - "code": "0xf3c6", - "name": "happy-outline" - }, - { - "code": "0xf140", - "name": "headphone" - }, - { - "code": "0xf141", - "name": "heart" - }, - { - "code": "0xf31d", - "name": "heart-broken" - }, - { - "code": "0xf143", - "name": "help" - }, - { - "code": "0xf27c", - "name": "help-buoy" - }, - { - "code": "0xf142", - "name": "help-circled" - }, - { - "code": "0xf144", - "name": "home" - }, - { - "code": "0xf27d", - "name": "icecream" - }, - { - "code": "0xf147", - "name": "image" - }, - { - "code": "0xf148", - "name": "images" - }, - { - "code": "0xf14a", - "name": "information" - }, - { - "code": "0xf149", - "name": "information-circled" - }, - { - "code": "0xf14b", - "name": "ionic" - }, - { - "code": "0xf3c8", - "name": "ios-alarm" - }, - { - "code": "0xf3c7", - "name": "ios-alarm-outline" - }, - { - "code": "0xf3ca", - "name": "ios-albums" - }, - { - "code": "0xf3c9", - "name": "ios-albums-outline" - }, - { - "code": "0xf3cc", - "name": "ios-americanfootball" - }, - { - "code": "0xf3cb", - "name": "ios-americanfootball-outline" - }, - { - "code": "0xf3ce", - "name": "ios-analytics" - }, - { - "code": "0xf3cd", - "name": "ios-analytics-outline" - }, - { - "code": "0xf3cf", - "name": "ios-arrow-back" - }, - { - "code": "0xf3d0", - "name": "ios-arrow-down" - }, - { - "code": "0xf3d1", - "name": "ios-arrow-forward" - }, - { - "code": "0xf3d2", - "name": "ios-arrow-left" - }, - { - "code": "0xf3d3", - "name": "ios-arrow-right" - }, - { - "code": "0xf3d4", - "name": "ios-arrow-thin-down" - }, - { - "code": "0xf3d5", - "name": "ios-arrow-thin-left" - }, - { - "code": "0xf3d6", - "name": "ios-arrow-thin-right" - }, - { - "code": "0xf3d7", - "name": "ios-arrow-thin-up" - }, - { - "code": "0xf3d8", - "name": "ios-arrow-up" - }, - { - "code": "0xf3da", - "name": "ios-at" - }, - { - "code": "0xf3d9", - "name": "ios-at-outline" - }, - { - "code": "0xf3dc", - "name": "ios-barcode" - }, - { - "code": "0xf3db", - "name": "ios-barcode-outline" - }, - { - "code": "0xf3de", - "name": "ios-baseball" - }, - { - "code": "0xf3dd", - "name": "ios-baseball-outline" - }, - { - "code": "0xf3e0", - "name": "ios-basketball" - }, - { - "code": "0xf3df", - "name": "ios-basketball-outline" - }, - { - "code": "0xf3e2", - "name": "ios-bell" - }, - { - "code": "0xf3e1", - "name": "ios-bell-outline" - }, - { - "code": "0xf3e4", - "name": "ios-body" - }, - { - "code": "0xf3e3", - "name": "ios-body-outline" - }, - { - "code": "0xf3e6", - "name": "ios-bolt" - }, - { - "code": "0xf3e5", - "name": "ios-bolt-outline" - }, - { - "code": "0xf3e8", - "name": "ios-book" - }, - { - "code": "0xf3e7", - "name": "ios-book-outline" - }, - { - "code": "0xf3ea", - "name": "ios-bookmarks" - }, - { - "code": "0xf3e9", - "name": "ios-bookmarks-outline" - }, - { - "code": "0xf3ec", - "name": "ios-box" - }, - { - "code": "0xf3eb", - "name": "ios-box-outline" - }, - { - "code": "0xf3ee", - "name": "ios-briefcase" - }, - { - "code": "0xf3ed", - "name": "ios-briefcase-outline" - }, - { - "code": "0xf3f0", - "name": "ios-browsers" - }, - { - "code": "0xf3ef", - "name": "ios-browsers-outline" - }, - { - "code": "0xf3f2", - "name": "ios-calculator" - }, - { - "code": "0xf3f1", - "name": "ios-calculator-outline" - }, - { - "code": "0xf3f4", - "name": "ios-calendar" - }, - { - "code": "0xf3f3", - "name": "ios-calendar-outline" - }, - { - "code": "0xf3f6", - "name": "ios-camera" - }, - { - "code": "0xf3f5", - "name": "ios-camera-outline" - }, - { - "code": "0xf3f8", - "name": "ios-cart" - }, - { - "code": "0xf3f7", - "name": "ios-cart-outline" - }, - { - "code": "0xf3fa", - "name": "ios-chatboxes" - }, - { - "code": "0xf3f9", - "name": "ios-chatboxes-outline" - }, - { - "code": "0xf3fc", - "name": "ios-chatbubble" - }, - { - "code": "0xf3fb", - "name": "ios-chatbubble-outline" - }, - { - "code": "0xf3ff", - "name": "ios-checkmark" - }, - { - "code": "0xf3fd", - "name": "ios-checkmark-empty" - }, - { - "code": "0xf3fe", - "name": "ios-checkmark-outline" - }, - { - "code": "0xf400", - "name": "ios-circle-filled" - }, - { - "code": "0xf401", - "name": "ios-circle-outline" - }, - { - "code": "0xf403", - "name": "ios-clock" - }, - { - "code": "0xf402", - "name": "ios-clock-outline" - }, - { - "code": "0xf406", - "name": "ios-close" - }, - { - "code": "0xf404", - "name": "ios-close-empty" - }, - { - "code": "0xf405", - "name": "ios-close-outline" - }, - { - "code": "0xf40c", - "name": "ios-cloud" - }, - { - "code": "0xf408", - "name": "ios-cloud-download" - }, - { - "code": "0xf407", - "name": "ios-cloud-download-outline" - }, - { - "code": "0xf409", - "name": "ios-cloud-outline" - }, - { - "code": "0xf40b", - "name": "ios-cloud-upload" - }, - { - "code": "0xf40a", - "name": "ios-cloud-upload-outline" - }, - { - "code": "0xf410", - "name": "ios-cloudy" - }, - { - "code": "0xf40e", - "name": "ios-cloudy-night" - }, - { - "code": "0xf40d", - "name": "ios-cloudy-night-outline" - }, - { - "code": "0xf40f", - "name": "ios-cloudy-outline" - }, - { - "code": "0xf412", - "name": "ios-cog" - }, - { - "code": "0xf411", - "name": "ios-cog-outline" - }, - { - "code": "0xf414", - "name": "ios-color-filter" - }, - { - "code": "0xf413", - "name": "ios-color-filter-outline" - }, - { - "code": "0xf416", - "name": "ios-color-wand" - }, - { - "code": "0xf415", - "name": "ios-color-wand-outline" - }, - { - "code": "0xf418", - "name": "ios-compose" - }, - { - "code": "0xf417", - "name": "ios-compose-outline" - }, - { - "code": "0xf41a", - "name": "ios-contact" - }, - { - "code": "0xf419", - "name": "ios-contact-outline" - }, - { - "code": "0xf41c", - "name": "ios-copy" - }, - { - "code": "0xf41b", - "name": "ios-copy-outline" - }, - { - "code": "0xf41e", - "name": "ios-crop" - }, - { - "code": "0xf41d", - "name": "ios-crop-strong" - }, - { - "code": "0xf420", - "name": "ios-download" - }, - { - "code": "0xf41f", - "name": "ios-download-outline" - }, - { - "code": "0xf421", - "name": "ios-drag" - }, - { - "code": "0xf423", - "name": "ios-email" - }, - { - "code": "0xf422", - "name": "ios-email-outline" - }, - { - "code": "0xf425", - "name": "ios-eye" - }, - { - "code": "0xf424", - "name": "ios-eye-outline" - }, - { - "code": "0xf427", - "name": "ios-fastforward" - }, - { - "code": "0xf426", - "name": "ios-fastforward-outline" - }, - { - "code": "0xf429", - "name": "ios-filing" - }, - { - "code": "0xf428", - "name": "ios-filing-outline" - }, - { - "code": "0xf42b", - "name": "ios-film" - }, - { - "code": "0xf42a", - "name": "ios-film-outline" - }, - { - "code": "0xf42d", - "name": "ios-flag" - }, - { - "code": "0xf42c", - "name": "ios-flag-outline" - }, - { - "code": "0xf42f", - "name": "ios-flame" - }, - { - "code": "0xf42e", - "name": "ios-flame-outline" - }, - { - "code": "0xf431", - "name": "ios-flask" - }, - { - "code": "0xf430", - "name": "ios-flask-outline" - }, - { - "code": "0xf433", - "name": "ios-flower" - }, - { - "code": "0xf432", - "name": "ios-flower-outline" - }, - { - "code": "0xf435", - "name": "ios-folder" - }, - { - "code": "0xf434", - "name": "ios-folder-outline" - }, - { - "code": "0xf437", - "name": "ios-football" - }, - { - "code": "0xf436", - "name": "ios-football-outline" - }, - { - "code": "0xf439", - "name": "ios-game-controller-a" - }, - { - "code": "0xf438", - "name": "ios-game-controller-a-outline" - }, - { - "code": "0xf43b", - "name": "ios-game-controller-b" - }, - { - "code": "0xf43a", - "name": "ios-game-controller-b-outline" - }, - { - "code": "0xf43d", - "name": "ios-gear" - }, - { - "code": "0xf43c", - "name": "ios-gear-outline" - }, - { - "code": "0xf43f", - "name": "ios-glasses" - }, - { - "code": "0xf43e", - "name": "ios-glasses-outline" - }, - { - "code": "0xf441", - "name": "ios-grid-view" - }, - { - "code": "0xf440", - "name": "ios-grid-view-outline" - }, - { - "code": "0xf443", - "name": "ios-heart" - }, - { - "code": "0xf442", - "name": "ios-heart-outline" - }, - { - "code": "0xf446", - "name": "ios-help" - }, - { - "code": "0xf444", - "name": "ios-help-empty" - }, - { - "code": "0xf445", - "name": "ios-help-outline" - }, - { - "code": "0xf448", - "name": "ios-home" - }, - { - "code": "0xf447", - "name": "ios-home-outline" - }, - { - "code": "0xf44a", - "name": "ios-infinite" - }, - { - "code": "0xf449", - "name": "ios-infinite-outline" - }, - { - "code": "0xf44d", - "name": "ios-information" - }, - { - "code": "0xf44b", - "name": "ios-information-empty" - }, - { - "code": "0xf44c", - "name": "ios-information-outline" - }, - { - "code": "0xf44e", - "name": "ios-ionic-outline" - }, - { - "code": "0xf450", - "name": "ios-keypad" - }, - { - "code": "0xf44f", - "name": "ios-keypad-outline" - }, - { - "code": "0xf452", - "name": "ios-lightbulb" - }, - { - "code": "0xf451", - "name": "ios-lightbulb-outline" - }, - { - "code": "0xf454", - "name": "ios-list" - }, - { - "code": "0xf453", - "name": "ios-list-outline" - }, - { - "code": "0xf456", - "name": "ios-location" - }, - { - "code": "0xf455", - "name": "ios-location-outline" - }, - { - "code": "0xf458", - "name": "ios-locked" - }, - { - "code": "0xf457", - "name": "ios-locked-outline" - }, - { - "code": "0xf45a", - "name": "ios-loop" - }, - { - "code": "0xf459", - "name": "ios-loop-strong" - }, - { - "code": "0xf45c", - "name": "ios-medical" - }, - { - "code": "0xf45b", - "name": "ios-medical-outline" - }, - { - "code": "0xf45e", - "name": "ios-medkit" - }, - { - "code": "0xf45d", - "name": "ios-medkit-outline" - }, - { - "code": "0xf461", - "name": "ios-mic" - }, - { - "code": "0xf45f", - "name": "ios-mic-off" - }, - { - "code": "0xf460", - "name": "ios-mic-outline" - }, - { - "code": "0xf464", - "name": "ios-minus" - }, - { - "code": "0xf462", - "name": "ios-minus-empty" - }, - { - "code": "0xf463", - "name": "ios-minus-outline" - }, - { - "code": "0xf466", - "name": "ios-monitor" - }, - { - "code": "0xf465", - "name": "ios-monitor-outline" - }, - { - "code": "0xf468", - "name": "ios-moon" - }, - { - "code": "0xf467", - "name": "ios-moon-outline" - }, - { - "code": "0xf46a", - "name": "ios-more" - }, - { - "code": "0xf469", - "name": "ios-more-outline" - }, - { - "code": "0xf46b", - "name": "ios-musical-note" - }, - { - "code": "0xf46c", - "name": "ios-musical-notes" - }, - { - "code": "0xf46e", - "name": "ios-navigate" - }, - { - "code": "0xf46d", - "name": "ios-navigate-outline" - }, - { - "code": "0xf470", - "name": "ios-nutrition" - }, - { - "code": "0xf46f", - "name": "ios-nutrition-outline" - }, - { - "code": "0xf472", - "name": "ios-paper" - }, - { - "code": "0xf471", - "name": "ios-paper-outline" - }, - { - "code": "0xf474", - "name": "ios-paperplane" - }, - { - "code": "0xf473", - "name": "ios-paperplane-outline" - }, - { - "code": "0xf476", - "name": "ios-partlysunny" - }, - { - "code": "0xf475", - "name": "ios-partlysunny-outline" - }, - { - "code": "0xf478", - "name": "ios-pause" - }, - { - "code": "0xf477", - "name": "ios-pause-outline" - }, - { - "code": "0xf47a", - "name": "ios-paw" - }, - { - "code": "0xf479", - "name": "ios-paw-outline" - }, - { - "code": "0xf47c", - "name": "ios-people" - }, - { - "code": "0xf47b", - "name": "ios-people-outline" - }, - { - "code": "0xf47e", - "name": "ios-person" - }, - { - "code": "0xf47d", - "name": "ios-person-outline" - }, - { - "code": "0xf480", - "name": "ios-personadd" - }, - { - "code": "0xf47f", - "name": "ios-personadd-outline" - }, - { - "code": "0xf482", - "name": "ios-photos" - }, - { - "code": "0xf481", - "name": "ios-photos-outline" - }, - { - "code": "0xf484", - "name": "ios-pie" - }, - { - "code": "0xf483", - "name": "ios-pie-outline" - }, - { - "code": "0xf486", - "name": "ios-pint" - }, - { - "code": "0xf485", - "name": "ios-pint-outline" - }, - { - "code": "0xf488", - "name": "ios-play" - }, - { - "code": "0xf487", - "name": "ios-play-outline" - }, - { - "code": "0xf48b", - "name": "ios-plus" - }, - { - "code": "0xf489", - "name": "ios-plus-empty" - }, - { - "code": "0xf48a", - "name": "ios-plus-outline" - }, - { - "code": "0xf48d", - "name": "ios-pricetag" - }, - { - "code": "0xf48c", - "name": "ios-pricetag-outline" - }, - { - "code": "0xf48f", - "name": "ios-pricetags" - }, - { - "code": "0xf48e", - "name": "ios-pricetags-outline" - }, - { - "code": "0xf491", - "name": "ios-printer" - }, - { - "code": "0xf490", - "name": "ios-printer-outline" - }, - { - "code": "0xf493", - "name": "ios-pulse" - }, - { - "code": "0xf492", - "name": "ios-pulse-strong" - }, - { - "code": "0xf495", - "name": "ios-rainy" - }, - { - "code": "0xf494", - "name": "ios-rainy-outline" - }, - { - "code": "0xf497", - "name": "ios-recording" - }, - { - "code": "0xf496", - "name": "ios-recording-outline" - }, - { - "code": "0xf499", - "name": "ios-redo" - }, - { - "code": "0xf498", - "name": "ios-redo-outline" - }, - { - "code": "0xf49c", - "name": "ios-refresh" - }, - { - "code": "0xf49a", - "name": "ios-refresh-empty" - }, - { - "code": "0xf49b", - "name": "ios-refresh-outline" - }, - { - "code": "0xf49d", - "name": "ios-reload" - }, - { - "code": "0xf49f", - "name": "ios-reverse-camera" - }, - { - "code": "0xf49e", - "name": "ios-reverse-camera-outline" - }, - { - "code": "0xf4a1", - "name": "ios-rewind" - }, - { - "code": "0xf4a0", - "name": "ios-rewind-outline" - }, - { - "code": "0xf4a3", - "name": "ios-rose" - }, - { - "code": "0xf4a2", - "name": "ios-rose-outline" - }, - { - "code": "0xf4a5", - "name": "ios-search" - }, - { - "code": "0xf4a4", - "name": "ios-search-strong" - }, - { - "code": "0xf4a7", - "name": "ios-settings" - }, - { - "code": "0xf4a6", - "name": "ios-settings-strong" - }, - { - "code": "0xf4a9", - "name": "ios-shuffle" - }, - { - "code": "0xf4a8", - "name": "ios-shuffle-strong" - }, - { - "code": "0xf4ab", - "name": "ios-skipbackward" - }, - { - "code": "0xf4aa", - "name": "ios-skipbackward-outline" - }, - { - "code": "0xf4ad", - "name": "ios-skipforward" - }, - { - "code": "0xf4ac", - "name": "ios-skipforward-outline" - }, - { - "code": "0xf4ae", - "name": "ios-snowy" - }, - { - "code": "0xf4b0", - "name": "ios-speedometer" - }, - { - "code": "0xf4af", - "name": "ios-speedometer-outline" - }, - { - "code": "0xf4b3", - "name": "ios-star" - }, - { - "code": "0xf4b1", - "name": "ios-star-half" - }, - { - "code": "0xf4b2", - "name": "ios-star-outline" - }, - { - "code": "0xf4b5", - "name": "ios-stopwatch" - }, - { - "code": "0xf4b4", - "name": "ios-stopwatch-outline" - }, - { - "code": "0xf4b7", - "name": "ios-sunny" - }, - { - "code": "0xf4b6", - "name": "ios-sunny-outline" - }, - { - "code": "0xf4b9", - "name": "ios-telephone" - }, - { - "code": "0xf4b8", - "name": "ios-telephone-outline" - }, - { - "code": "0xf4bb", - "name": "ios-tennisball" - }, - { - "code": "0xf4ba", - "name": "ios-tennisball-outline" - }, - { - "code": "0xf4bd", - "name": "ios-thunderstorm" - }, - { - "code": "0xf4bc", - "name": "ios-thunderstorm-outline" - }, - { - "code": "0xf4bf", - "name": "ios-time" - }, - { - "code": "0xf4be", - "name": "ios-time-outline" - }, - { - "code": "0xf4c1", - "name": "ios-timer" - }, - { - "code": "0xf4c0", - "name": "ios-timer-outline" - }, - { - "code": "0xf4c3", - "name": "ios-toggle" - }, - { - "code": "0xf4c2", - "name": "ios-toggle-outline" - }, - { - "code": "0xf4c5", - "name": "ios-trash" - }, - { - "code": "0xf4c4", - "name": "ios-trash-outline" - }, - { - "code": "0xf4c7", - "name": "ios-undo" - }, - { - "code": "0xf4c6", - "name": "ios-undo-outline" - }, - { - "code": "0xf4c9", - "name": "ios-unlocked" - }, - { - "code": "0xf4c8", - "name": "ios-unlocked-outline" - }, - { - "code": "0xf4cb", - "name": "ios-upload" - }, - { - "code": "0xf4ca", - "name": "ios-upload-outline" - }, - { - "code": "0xf4cd", - "name": "ios-videocam" - }, - { - "code": "0xf4cc", - "name": "ios-videocam-outline" - }, - { - "code": "0xf4ce", - "name": "ios-volume-high" - }, - { - "code": "0xf4cf", - "name": "ios-volume-low" - }, - { - "code": "0xf4d1", - "name": "ios-wineglass" - }, - { - "code": "0xf4d0", - "name": "ios-wineglass-outline" - }, - { - "code": "0xf4d3", - "name": "ios-world" - }, - { - "code": "0xf4d2", - "name": "ios-world-outline" - }, - { - "code": "0xf1f9", - "name": "ipad" - }, - { - "code": "0xf1fa", - "name": "iphone" - }, - { - "code": "0xf1fb", - "name": "ipod" - }, - { - "code": "0xf295", - "name": "jet" - }, - { - "code": "0xf296", - "name": "key" - }, - { - "code": "0xf297", - "name": "knife" - }, - { - "code": "0xf1fc", - "name": "laptop" - }, - { - "code": "0xf1fd", - "name": "leaf" - }, - { - "code": "0xf298", - "name": "levels" - }, - { - "code": "0xf299", - "name": "lightbulb" - }, - { - "code": "0xf1fe", - "name": "link" - }, - { - "code": "0xf29a", - "name": "load-a" - }, - { - "code": "0xf29b", - "name": "load-b" - }, - { - "code": "0xf29c", - "name": "load-c" - }, - { - "code": "0xf29d", - "name": "load-d" - }, - { - "code": "0xf1ff", - "name": "location" - }, - { - "code": "0xf4d4", - "name": "lock-combination" - }, - { - "code": "0xf200", - "name": "locked" - }, - { - "code": "0xf29e", - "name": "log-in" - }, - { - "code": "0xf29f", - "name": "log-out" - }, - { - "code": "0xf201", - "name": "loop" - }, - { - "code": "0xf2a0", - "name": "magnet" - }, - { - "code": "0xf2a1", - "name": "male" - }, - { - "code": "0xf202", - "name": "man" - }, - { - "code": "0xf203", - "name": "map" - }, - { - "code": "0xf2a2", - "name": "medkit" - }, - { - "code": "0xf33f", - "name": "merge" - }, - { - "code": "0xf204", - "name": "mic-a" - }, - { - "code": "0xf205", - "name": "mic-b" - }, - { - "code": "0xf206", - "name": "mic-c" - }, - { - "code": "0xf209", - "name": "minus" - }, - { - "code": "0xf207", - "name": "minus-circled" - }, - { - "code": "0xf208", - "name": "minus-round" - }, - { - "code": "0xf2c1", - "name": "model-s" - }, - { - "code": "0xf20a", - "name": "monitor" - }, - { - "code": "0xf20b", - "name": "more" - }, - { - "code": "0xf340", - "name": "mouse" - }, - { - "code": "0xf20c", - "name": "music-note" - }, - { - "code": "0xf20e", - "name": "navicon" - }, - { - "code": "0xf20d", - "name": "navicon-round" - }, - { - "code": "0xf2a3", - "name": "navigate" - }, - { - "code": "0xf341", - "name": "network" - }, - { - "code": "0xf2c2", - "name": "no-smoking" - }, - { - "code": "0xf2a4", - "name": "nuclear" - }, - { - "code": "0xf342", - "name": "outlet" - }, - { - "code": "0xf4d5", - "name": "paintbrush" - }, - { - "code": "0xf4d6", - "name": "paintbucket" - }, - { - "code": "0xf2c3", - "name": "paper-airplane" - }, - { - "code": "0xf20f", - "name": "paperclip" - }, - { - "code": "0xf210", - "name": "pause" - }, - { - "code": "0xf213", - "name": "person" - }, - { - "code": "0xf211", - "name": "person-add" - }, - { - "code": "0xf212", - "name": "person-stalker" - }, - { - "code": "0xf2a5", - "name": "pie-graph" - }, - { - "code": "0xf2a6", - "name": "pin" - }, - { - "code": "0xf2a7", - "name": "pinpoint" - }, - { - "code": "0xf2a8", - "name": "pizza" - }, - { - "code": "0xf214", - "name": "plane" - }, - { - "code": "0xf343", - "name": "planet" - }, - { - "code": "0xf215", - "name": "play" - }, - { - "code": "0xf30a", - "name": "playstation" - }, - { - "code": "0xf218", - "name": "plus" - }, - { - "code": "0xf216", - "name": "plus-circled" - }, - { - "code": "0xf217", - "name": "plus-round" - }, - { - "code": "0xf344", - "name": "podium" - }, - { - "code": "0xf219", - "name": "pound" - }, - { - "code": "0xf2a9", - "name": "power" - }, - { - "code": "0xf2aa", - "name": "pricetag" - }, - { - "code": "0xf2ab", - "name": "pricetags" - }, - { - "code": "0xf21a", - "name": "printer" - }, - { - "code": "0xf345", - "name": "pull-request" - }, - { - "code": "0xf346", - "name": "qr-scanner" - }, - { - "code": "0xf347", - "name": "quote" - }, - { - "code": "0xf2ac", - "name": "radio-waves" - }, - { - "code": "0xf21b", - "name": "record" - }, - { - "code": "0xf21c", - "name": "refresh" - }, - { - "code": "0xf21e", - "name": "reply" - }, - { - "code": "0xf21d", - "name": "reply-all" - }, - { - "code": "0xf348", - "name": "ribbon-a" - }, - { - "code": "0xf349", - "name": "ribbon-b" - }, - { - "code": "0xf34a", - "name": "sad" - }, - { - "code": "0xf4d7", - "name": "sad-outline" - }, - { - "code": "0xf34b", - "name": "scissors" - }, - { - "code": "0xf21f", - "name": "search" - }, - { - "code": "0xf2ad", - "name": "settings" - }, - { - "code": "0xf220", - "name": "share" - }, - { - "code": "0xf221", - "name": "shuffle" - }, - { - "code": "0xf222", - "name": "skip-backward" - }, - { - "code": "0xf223", - "name": "skip-forward" - }, - { - "code": "0xf225", - "name": "social-android" - }, - { - "code": "0xf224", - "name": "social-android-outline" - }, - { - "code": "0xf4d9", - "name": "social-angular" - }, - { - "code": "0xf4d8", - "name": "social-angular-outline" - }, - { - "code": "0xf227", - "name": "social-apple" - }, - { - "code": "0xf226", - "name": "social-apple-outline" - }, - { - "code": "0xf2af", - "name": "social-bitcoin" - }, - { - "code": "0xf2ae", - "name": "social-bitcoin-outline" - }, - { - "code": "0xf229", - "name": "social-buffer" - }, - { - "code": "0xf228", - "name": "social-buffer-outline" - }, - { - "code": "0xf4db", - "name": "social-chrome" - }, - { - "code": "0xf4da", - "name": "social-chrome-outline" - }, - { - "code": "0xf4dd", - "name": "social-codepen" - }, - { - "code": "0xf4dc", - "name": "social-codepen-outline" - }, - { - "code": "0xf4df", - "name": "social-css3" - }, - { - "code": "0xf4de", - "name": "social-css3-outline" - }, - { - "code": "0xf22b", - "name": "social-designernews" - }, - { - "code": "0xf22a", - "name": "social-designernews-outline" - }, - { - "code": "0xf22d", - "name": "social-dribbble" - }, - { - "code": "0xf22c", - "name": "social-dribbble-outline" - }, - { - "code": "0xf22f", - "name": "social-dropbox" - }, - { - "code": "0xf22e", - "name": "social-dropbox-outline" - }, - { - "code": "0xf4e1", - "name": "social-euro" - }, - { - "code": "0xf4e0", - "name": "social-euro-outline" - }, - { - "code": "0xf231", - "name": "social-facebook" - }, - { - "code": "0xf230", - "name": "social-facebook-outline" - }, - { - "code": "0xf34d", - "name": "social-foursquare" - }, - { - "code": "0xf34c", - "name": "social-foursquare-outline" - }, - { - "code": "0xf2c4", - "name": "social-freebsd-devil" - }, - { - "code": "0xf233", - "name": "social-github" - }, - { - "code": "0xf232", - "name": "social-github-outline" - }, - { - "code": "0xf34f", - "name": "social-google" - }, - { - "code": "0xf34e", - "name": "social-google-outline" - }, - { - "code": "0xf235", - "name": "social-googleplus" - }, - { - "code": "0xf234", - "name": "social-googleplus-outline" - }, - { - "code": "0xf237", - "name": "social-hackernews" - }, - { - "code": "0xf236", - "name": "social-hackernews-outline" - }, - { - "code": "0xf4e3", - "name": "social-html5" - }, - { - "code": "0xf4e2", - "name": "social-html5-outline" - }, - { - "code": "0xf351", - "name": "social-instagram" - }, - { - "code": "0xf350", - "name": "social-instagram-outline" - }, - { - "code": "0xf4e5", - "name": "social-javascript" - }, - { - "code": "0xf4e4", - "name": "social-javascript-outline" - }, - { - "code": "0xf239", - "name": "social-linkedin" - }, - { - "code": "0xf238", - "name": "social-linkedin-outline" - }, - { - "code": "0xf4e6", - "name": "social-markdown" - }, - { - "code": "0xf4e7", - "name": "social-nodejs" - }, - { - "code": "0xf4e8", - "name": "social-octocat" - }, - { - "code": "0xf2b1", - "name": "social-pinterest" - }, - { - "code": "0xf2b0", - "name": "social-pinterest-outline" - }, - { - "code": "0xf4e9", - "name": "social-python" - }, - { - "code": "0xf23b", - "name": "social-reddit" - }, - { - "code": "0xf23a", - "name": "social-reddit-outline" - }, - { - "code": "0xf23d", - "name": "social-rss" - }, - { - "code": "0xf23c", - "name": "social-rss-outline" - }, - { - "code": "0xf4ea", - "name": "social-sass" - }, - { - "code": "0xf23f", - "name": "social-skype" - }, - { - "code": "0xf23e", - "name": "social-skype-outline" - }, - { - "code": "0xf4ec", - "name": "social-snapchat" - }, - { - "code": "0xf4eb", - "name": "social-snapchat-outline" - }, - { - "code": "0xf241", - "name": "social-tumblr" - }, - { - "code": "0xf240", - "name": "social-tumblr-outline" - }, - { - "code": "0xf2c5", - "name": "social-tux" - }, - { - "code": "0xf4ee", - "name": "social-twitch" - }, - { - "code": "0xf4ed", - "name": "social-twitch-outline" - }, - { - "code": "0xf243", - "name": "social-twitter" - }, - { - "code": "0xf242", - "name": "social-twitter-outline" - }, - { - "code": "0xf353", - "name": "social-usd" - }, - { - "code": "0xf352", - "name": "social-usd-outline" - }, - { - "code": "0xf245", - "name": "social-vimeo" - }, - { - "code": "0xf244", - "name": "social-vimeo-outline" - }, - { - "code": "0xf4f0", - "name": "social-whatsapp" - }, - { - "code": "0xf4ef", - "name": "social-whatsapp-outline" - }, - { - "code": "0xf247", - "name": "social-windows" - }, - { - "code": "0xf246", - "name": "social-windows-outline" - }, - { - "code": "0xf249", - "name": "social-wordpress" - }, - { - "code": "0xf248", - "name": "social-wordpress-outline" - }, - { - "code": "0xf24b", - "name": "social-yahoo" - }, - { - "code": "0xf24a", - "name": "social-yahoo-outline" - }, - { - "code": "0xf4f2", - "name": "social-yen" - }, - { - "code": "0xf4f1", - "name": "social-yen-outline" - }, - { - "code": "0xf24d", - "name": "social-youtube" - }, - { - "code": "0xf24c", - "name": "social-youtube-outline" - }, - { - "code": "0xf4f4", - "name": "soup-can" - }, - { - "code": "0xf4f3", - "name": "soup-can-outline" - }, - { - "code": "0xf2b2", - "name": "speakerphone" - }, - { - "code": "0xf2b3", - "name": "speedometer" - }, - { - "code": "0xf2b4", - "name": "spoon" - }, - { - "code": "0xf24e", - "name": "star" - }, - { - "code": "0xf2b5", - "name": "stats-bars" - }, - { - "code": "0xf30b", - "name": "steam" - }, - { - "code": "0xf24f", - "name": "stop" - }, - { - "code": "0xf2b6", - "name": "thermometer" - }, - { - "code": "0xf250", - "name": "thumbsdown" - }, - { - "code": "0xf251", - "name": "thumbsup" - }, - { - "code": "0xf355", - "name": "toggle" - }, - { - "code": "0xf354", - "name": "toggle-filled" - }, - { - "code": "0xf4f5", - "name": "transgender" - }, - { - "code": "0xf252", - "name": "trash-a" - }, - { - "code": "0xf253", - "name": "trash-b" - }, - { - "code": "0xf356", - "name": "trophy" - }, - { - "code": "0xf4f7", - "name": "tshirt" - }, - { - "code": "0xf4f6", - "name": "tshirt-outline" - }, - { - "code": "0xf2b7", - "name": "umbrella" - }, - { - "code": "0xf357", - "name": "university" - }, - { - "code": "0xf254", - "name": "unlocked" - }, - { - "code": "0xf255", - "name": "upload" - }, - { - "code": "0xf2b8", - "name": "usb" - }, - { - "code": "0xf256", - "name": "videocamera" - }, - { - "code": "0xf257", - "name": "volume-high" - }, - { - "code": "0xf258", - "name": "volume-low" - }, - { - "code": "0xf259", - "name": "volume-medium" - }, - { - "code": "0xf25a", - "name": "volume-mute" - }, - { - "code": "0xf358", - "name": "wand" - }, - { - "code": "0xf25b", - "name": "waterdrop" - }, - { - "code": "0xf25c", - "name": "wifi" - }, - { - "code": "0xf2b9", - "name": "wineglass" - }, - { - "code": "0xf25d", - "name": "woman" - }, - { - "code": "0xf2ba", - "name": "wrench" - }, - { - "code": "0xf30c", - "name": "xbox" - } - ] -} \ No newline at end of file diff --git a/static/ionicons-2.0.1/builder/cheatsheet/icon-row.html b/static/ionicons-2.0.1/builder/cheatsheet/icon-row.html deleted file mode 100644 index a542767..0000000 --- a/static/ionicons-2.0.1/builder/cheatsheet/icon-row.html +++ /dev/null @@ -1,38 +0,0 @@ -