Revision 39920
Added by Sandro La Bruzzo over 8 years ago
modules/dli-service-portal/branches/newPortal/DLI.py | ||
---|---|---|
1 |
#!/usr/bin/python |
|
2 |
# |
|
3 |
# Flask server, woo! |
|
4 |
# |
|
5 |
import json |
|
6 |
|
|
7 |
from flask import Flask, jsonify, request |
|
8 |
from flask.json import JSONEncoder |
|
9 |
|
|
10 |
from DLIObject import DLIObject, DLIRelation |
|
11 |
from DLIQueryResolver import QueryResolver |
|
12 |
from logger import dlilogger |
|
13 |
|
|
14 |
|
|
15 |
class MyJSONEncoder(JSONEncoder): |
|
16 |
def default(self, obj): |
|
17 |
if isinstance(obj, DLIObject): |
|
18 |
return obj.__dict__ |
|
19 |
if isinstance(obj, DLIRelation): |
|
20 |
return obj.__dict__ |
|
21 |
return super(MyJSONEncoder, self).default(obj) |
|
22 |
|
|
23 |
|
|
24 |
app = Flask(__name__) |
|
25 |
app.debug = False |
|
26 |
app.json_encoder = MyJSONEncoder |
|
27 |
|
|
28 |
host = "http://node0-p-dli.d4science.org:8983/solr/DLIF-index-cleaned_shard1_replica1" |
|
29 |
base_dnet_url = "http://localhost:8280/app" |
|
30 |
|
|
31 |
|
|
32 |
# q = QueryResolver("http://localhost:8983/solr/DLIF-index-cleaned_shard1_replica1") |
|
33 |
|
|
34 |
class InvalidUsage(Exception): |
|
35 |
status_code = 400 |
|
36 |
|
|
37 |
def __init__(self, message, status_code=None, payload=None): |
|
38 |
Exception.__init__(self) |
|
39 |
self.message = message |
|
40 |
if status_code is not None: |
|
41 |
self.status_code = status_code |
|
42 |
self.payload = payload |
|
43 |
|
|
44 |
def to_dict(self): |
|
45 |
rv = dict(self.payload or ()) |
|
46 |
rv['message'] = self.message |
|
47 |
return rv |
|
48 |
|
|
49 |
|
|
50 |
# Routes |
|
51 |
@app.route('/') |
|
52 |
def root(): |
|
53 |
return app.send_static_file('index.html') |
|
54 |
|
|
55 |
|
|
56 |
@app.route('/<path:path>') |
|
57 |
def static_proxy(path): |
|
58 |
# send_static_file will guess the correct MIME type |
|
59 |
return app.send_static_file(path) |
|
60 |
|
|
61 |
|
|
62 |
@app.route('/api/item/<path:identifier>', methods=['post', 'get']) |
|
63 |
def getItem(identifier): |
|
64 |
if identifier: |
|
65 |
q = QueryResolver(host, base_dnet_url) |
|
66 |
return jsonify(result=q.get_item(identifier)) |
|
67 |
else: |
|
68 |
raise InvalidUsage('This view is gone', status_code=410) |
|
69 |
|
|
70 |
|
|
71 |
@app.route('/api/stats/', methods=['post', 'get']) |
|
72 |
def stats(): |
|
73 |
q = QueryResolver(host, base_dnet_url) |
|
74 |
return jsonify(stats=q.get_stats()) |
|
75 |
|
|
76 |
|
|
77 |
@app.route('/api/ds_info/', methods=['post', 'get']) |
|
78 |
def info(): |
|
79 |
q = QueryResolver(host, base_dnet_url) |
|
80 |
if 'id' in request.form: |
|
81 |
id = request.form['id'] |
|
82 |
name = request.form['name'] |
|
83 |
result = q.get_ds_info(id, name) |
|
84 |
return jsonify(info=result) |
|
85 |
result = q.get_all_ds() |
|
86 |
return jsonify(info=result) |
|
87 |
|
|
88 |
|
|
89 |
@app.route('/api/stats_detail/', methods=['post', 'get']) |
|
90 |
def stats_detail(): |
|
91 |
q = QueryResolver(host, base_dnet_url) |
|
92 |
return jsonify(stats=q.get_stats_detail()) |
|
93 |
|
|
94 |
|
|
95 |
@app.route('/api/post/', methods=['post', 'get']) |
|
96 |
def query_post(): |
|
97 |
action = None |
|
98 |
query = None |
|
99 |
only_result = False |
|
100 |
filter_query = None |
|
101 |
start = 0 |
|
102 |
if 'action' in request.form: |
|
103 |
action = request.form['action'] |
|
104 |
if 'query' in request.form: |
|
105 |
query = request.form['query'] |
|
106 |
if 'only_result' in request.form: |
|
107 |
only_result = True |
|
108 |
|
|
109 |
if 'browse_field' in request.form: |
|
110 |
try: |
|
111 |
filter_query = json.loads(request.form['browse_field']) |
|
112 |
except: |
|
113 |
app.logger.error("Unable to parse browse_field, current value %s" % request.form['browse_field']) |
|
114 |
|
|
115 |
if 'start' in request.form: |
|
116 |
start = int(request.form['start']) |
|
117 |
|
|
118 |
if action == 'query' and query is not None: |
|
119 |
q = QueryResolver(host, base_dnet_url) |
|
120 |
try: |
|
121 |
result = q.query(q=query, browse_fields=["entitytype", "provenance"], start=start, only_result=only_result, filter_query=filter_query) |
|
122 |
except Exception as e: |
|
123 |
print e |
|
124 |
return jsonify(result=result) |
|
125 |
else: |
|
126 |
return jsonify(error={'error_code': 'an error occur during query on server'}) |
|
127 |
|
|
128 |
|
|
129 |
if __name__ == '__main__': |
|
130 |
app.logger.addHandler(dlilogger) |
|
131 |
app.run(debug=False, host='0.0.0.0', processes=5) |
modules/dli-service-portal/branches/newPortal/static/font-awesome/less/mixins.less | ||
---|---|---|
1 |
// Mixins |
|
2 |
// -------------------------- |
|
3 |
|
|
4 |
.fa-icon() { |
|
5 |
display: inline-block; |
|
6 |
font: normal normal normal 14px/1 FontAwesome; // shortening font declaration |
|
7 |
font-size: inherit; // can't have font-size inherit on line above, so need to override |
|
8 |
text-rendering: auto; // optimizelegibility throws things off #1094 |
|
9 |
-webkit-font-smoothing: antialiased; |
|
10 |
-moz-osx-font-smoothing: grayscale; |
|
11 |
} |
|
12 |
|
|
13 |
.fa-icon-rotate(@degrees, @rotation) { |
|
14 |
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); |
|
15 |
-webkit-transform: rotate(@degrees); |
|
16 |
-ms-transform: rotate(@degrees); |
|
17 |
transform: rotate(@degrees); |
|
18 |
} |
|
19 |
|
|
20 |
.fa-icon-flip(@horiz, @vert, @rotation) { |
|
21 |
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); |
|
22 |
-webkit-transform: scale(@horiz, @vert); |
|
23 |
-ms-transform: scale(@horiz, @vert); |
|
24 |
transform: scale(@horiz, @vert); |
|
25 |
} |
modules/dli-service-portal/branches/newPortal/requirements.txt | ||
---|---|---|
1 |
flask > 0.10 |
|
2 |
pysolr> 3.0 |
modules/dli-service-portal/branches/newPortal/static/font-awesome/less/bordered-pulled.less | ||
---|---|---|
1 |
// Bordered & Pulled |
|
2 |
// ------------------------- |
|
3 |
|
|
4 |
.@{fa-css-prefix}-border { |
|
5 |
padding: .2em .25em .15em; |
|
6 |
border: solid .08em @fa-border-color; |
|
7 |
border-radius: .1em; |
|
8 |
} |
|
9 |
|
|
10 |
.pull-right { float: right; } |
|
11 |
.pull-left { float: left; } |
|
12 |
|
|
13 |
.@{fa-css-prefix} { |
|
14 |
&.pull-left { margin-right: .3em; } |
|
15 |
&.pull-right { margin-left: .3em; } |
|
16 |
} |
modules/dli-service-portal/branches/newPortal/testSolr.py | ||
---|---|---|
1 |
import json |
|
2 |
import pysolr |
|
3 |
|
|
4 |
|
|
5 |
solr_server = pysolr.Solr("http://node0.d.dli.research-infrastructures.eu:8983/solr/DLIF-index-cleaned_shard1_replica1") |
|
6 |
""" |
|
7 |
result =solr_server.search(q="localidentifier:'10.5517/ccp8ql7' ", rows=20, **{ |
|
8 |
'facet':'true', |
|
9 |
'start':10, |
|
10 |
'facet.field':['entitytype', 'provenance'] |
|
11 |
}); |
|
12 |
""" |
|
13 |
|
|
14 |
|
|
15 |
def getPointingTo(query, type): |
|
16 |
result = solr_server.search(q=query, rows=10, **{ |
|
17 |
'facet':'true', |
|
18 |
'facet.field':['relatedobjtype'], |
|
19 |
'fq':'entitytype:"%s"'%type, |
|
20 |
'fq':'entitytype:"publication"' |
|
21 |
|
|
22 |
}) |
|
23 |
|
|
24 |
fields =result.facets['facet_fields'] |
|
25 |
|
|
26 |
return {type: [{'key':fields['relatedobjtype'][i], 'value':fields['relatedobjtype'][i+1]} for i in range(0,len(fields['relatedobjtype']),2)]} |
|
27 |
|
|
28 |
|
|
29 |
def get_stats(self): |
|
30 |
stats = {} |
|
31 |
response = self.solr_server.search(q='*:*', rows=0, **{ |
|
32 |
'facet': 'true', |
|
33 |
'facet.field': ['provenance'] |
|
34 |
}) |
|
35 |
d = response.facets['facet_fields']['provenance'] |
|
36 |
stats['dataset'] = [[d[i], d[i+1]] for i in range(0, len(d), 2)] |
|
37 |
response = self.solr_server.search(q='*:*', rows=0, **{ |
|
38 |
'facet': 'true', |
|
39 |
'facet.field': ['provenance'], |
|
40 |
'fq': ['entitytype:"publication"'] |
|
41 |
}) |
|
42 |
d = response.facets['facet_fields']['provenance'] |
|
43 |
stats['publication'] = [[d[i], d[i+1]] for i in range(0, len(d), 2)] |
|
44 |
return stats |
|
45 |
|
|
46 |
|
|
47 |
def get_stats_detail_part2(stat_dict): |
|
48 |
response =solr_server.search(q='*:*', rows=0, **{ |
|
49 |
'facet':'true', |
|
50 |
'facet.field':['provenance'], |
|
51 |
'fq': ['entitytype:"publication"'] |
|
52 |
}) |
|
53 |
res = response.facets['facet_fields'] |
|
54 |
data= res['provenance'] |
|
55 |
total_pubs = [(data[i], data[i+1]) for i in range(len(data)) if (i % 2) == 0] |
|
56 |
for item in total_pubs: |
|
57 |
if item[0] not in stat_dict: |
|
58 |
stat_dict[item[0]] = {'totalObject': 0, 'totalPublication': 0, 'totalDatasets': 0, 'totalRelations': 0} |
|
59 |
stat_dict[item[0]]['totalPublication'] =item[1] |
|
60 |
|
|
61 |
response =solr_server.search(q='*:*', rows=0, **{ |
|
62 |
'facet':'true', |
|
63 |
'facet.field':['provenance'], |
|
64 |
'fq': ['entitytype:"dataset"'] |
|
65 |
}) |
|
66 |
res = response.facets['facet_fields'] |
|
67 |
data= res['provenance'] |
|
68 |
total_datasets = [(data[i], data[i+1]) for i in range(len(data)) if (i % 2) == 0] |
|
69 |
for item in total_datasets: |
|
70 |
if item[0] not in stat_dict: |
|
71 |
stat_dict[item[0]] ={} |
|
72 |
stat_dict[item[0]]['totalDatasets'] =item[1] |
|
73 |
|
|
74 |
|
|
75 |
|
|
76 |
|
|
77 |
def get_stats_detail(): |
|
78 |
response =solr_server.search(q='*:*', rows=0, **{ |
|
79 |
'facet':'true', |
|
80 |
'facet.field':['provenance', 'relationprovenance'] |
|
81 |
}) |
|
82 |
res = response.facets['facet_fields'] |
|
83 |
data= res['provenance'] |
|
84 |
repo_name = [data[i] for i in range(len(data)) if (i % 2) == 0] |
|
85 |
stat_dict = {} |
|
86 |
total_item = [(data[i], data[i+1]) for i in range(len(data)) if (i % 2) == 0] |
|
87 |
for repo in repo_name: |
|
88 |
stat_dict[repo] ={'totalObject': 0, 'totalPublication': 0, 'totalDatasets': 0, 'totalRelations': 0} |
|
89 |
for item in total_item: |
|
90 |
stat_dict[item[0]]['totalObject'] =item[1] |
|
91 |
data= res['relationprovenance'] |
|
92 |
total_rels = [(data[i], data[i+1]) for i in range(len(data)) if (i % 2) == 0] |
|
93 |
for item in total_rels: |
|
94 |
if item[0] not in stat_dict: |
|
95 |
stat_dict[item[0]] ={'totalObject': 0, 'totalPublication': 0, 'totalDatasets': 0, 'totalRelations': 0} |
|
96 |
stat_dict[item[0]]['totalRelations'] =item[1] |
|
97 |
return stat_dict |
|
98 |
|
|
99 |
|
|
100 |
|
|
101 |
import urllib2 |
|
102 |
|
|
103 |
|
|
104 |
import re |
|
105 |
p = re.compile("((https?):((//)|(\\\\))+([\w\d:#@%/;$()~_?\+-=\\\.&](#!)?)*)") |
|
106 |
|
|
107 |
print p.match("http://data.aims.gov.au/extpubs/do/viewpub.do?articleid=7037") |
|
108 |
|
|
109 |
|
|
110 |
|
|
111 |
|
|
112 |
data =urllib2.urlopen("http://node0.d.dli.research-infrastructures.eu:8080/dli/mvc/ui/stats/getLastStats") |
|
113 |
json.loads(data.read()) |
|
114 |
|
|
115 |
|
modules/dli-service-portal/branches/newPortal/DLIObject.py | ||
---|---|---|
1 |
import logging |
|
2 |
import re |
|
3 |
|
|
4 |
import libxml2 |
|
5 |
|
|
6 |
p = re.compile("((https?):((//)|(\\\\))+([\w\d:#@%/;$()~_?\+-=\\\.&](#!)?)*)") |
|
7 |
pattern = re.compile(r'\s+') |
|
8 |
log = logging.getLogger('dli') |
|
9 |
|
|
10 |
|
|
11 |
class DLIRelation(object): |
|
12 |
def __init__(self, node, ctx): |
|
13 |
|
|
14 |
ctx.setContextNode(node) |
|
15 |
nodes = ctx.xpathEval("./*[local-name()='dnetIdentifier']") |
|
16 |
for entity in nodes: |
|
17 |
self.relatedDnetId = re.sub(pattern, ' ', entity.content) |
|
18 |
|
|
19 |
nodes = ctx.xpathEval("./*[local-name()='entitytype']") |
|
20 |
for entity in nodes: |
|
21 |
self.relatedEntityType = re.sub(pattern, ' ', entity.content) |
|
22 |
|
|
23 |
nodes = ctx.xpathEval("./*[local-name()='typeOfRelation']") |
|
24 |
for entity in nodes: |
|
25 |
self.typeOfRelation = re.sub(pattern, ' ', entity.content) |
|
26 |
|
|
27 |
nodes = ctx.xpathEval("./*[local-name()='title']") |
|
28 |
for entity in nodes: |
|
29 |
self.related_title = re.sub(pattern, ' ', entity.content) |
|
30 |
|
|
31 |
nodes = ctx.xpathEval("./*[local-name()='pid']") |
|
32 |
for entity in nodes: |
|
33 |
self.targetPID = re.sub(pattern, ' ', entity.content) |
|
34 |
for property in entity.properties: |
|
35 |
if property.name == 'type': |
|
36 |
self.targetPIDType = property.content |
|
37 |
self.authors = [] |
|
38 |
nodes = ctx.xpathEval(".//*[local-name()='author']") |
|
39 |
for entity in nodes: |
|
40 |
self.authors.append(re.sub(pattern, ' ', entity.content).strip()) |
|
41 |
self.relation_provenance = [] |
|
42 |
|
|
43 |
nodes = ctx.xpathEval("./*[local-name()='relationProvenance']/*[local-name()='datasource']") |
|
44 |
for entity in nodes: |
|
45 |
rel_item = {} |
|
46 |
rel_item['name'] = re.sub(pattern, ' ', entity.content).strip() |
|
47 |
for property in entity.properties: |
|
48 |
if property.name == 'completionStatus': |
|
49 |
rel_item['completionStatus'] = property.content |
|
50 |
elif property.name == 'provisionMode': |
|
51 |
rel_item['provisionMode'] = property.content |
|
52 |
elif property.name == 'collectionDate': |
|
53 |
rel_item['collectionDate'] = property.content |
|
54 |
self.relation_provenance.append(rel_item) |
|
55 |
|
|
56 |
|
|
57 |
class DLIObject(object): |
|
58 |
def __init__(self, input_xml): |
|
59 |
log.debug("CREATED OBJECT") |
|
60 |
self.initialize_from_xml(input_xml) |
|
61 |
|
|
62 |
def _associate_identifier(self, ctxt): |
|
63 |
res = ctxt.xpathEval("./*[local-name()='dnetResourceIdentifier']") |
|
64 |
for node in res: |
|
65 |
self.identifier = node.content |
|
66 |
|
|
67 |
def initialize_from_xml(self, input_xml): |
|
68 |
log.debug("Parsing input %s" % input_xml) |
|
69 |
doc = libxml2.parseDoc(input_xml) |
|
70 |
ctxt = doc.xpathNewContext() |
|
71 |
res = ctxt.xpathEval("//*[local-name()='dliObject']") |
|
72 |
if len(res) == 0: |
|
73 |
log.error("Unable to create DLI object the dli_object node is null") |
|
74 |
return None |
|
75 |
dli_object_node = res[0] |
|
76 |
ctxt.setContextNode(dli_object_node) |
|
77 |
self.identifier = "" |
|
78 |
self.pid = "" |
|
79 |
self.pid_type = "" |
|
80 |
self.resolved_url = "" |
|
81 |
self.completionStatus = "" |
|
82 |
self.provenance_record = [] |
|
83 |
self.objectType = "unknown" |
|
84 |
self.title = "" |
|
85 |
self.date = "" |
|
86 |
self.authors = [] |
|
87 |
self.relations = [] |
|
88 |
self._associate_identifier(ctxt) |
|
89 |
self._associate_local_PID(ctxt) |
|
90 |
self._associate_complete_status(ctxt) |
|
91 |
self._associate_record_provenance(ctxt) |
|
92 |
ctxt.setContextNode(dli_object_node) |
|
93 |
self._associate_type(ctxt) |
|
94 |
self._associate_title(ctxt) |
|
95 |
self._associate_date(ctxt) |
|
96 |
self._associate_authors(ctxt) |
|
97 |
ctxt.setContextNode(dli_object_node) |
|
98 |
self._associate_relations(ctxt, doc.xpathNewContext()) |
|
99 |
doc.freeDoc() |
|
100 |
ctxt.xpathFreeContext() |
|
101 |
|
|
102 |
def _associate_local_PID(self, ctxt): |
|
103 |
res = ctxt.xpathEval("./*[local-name()='originalIdentifier']") |
|
104 |
for node in res: |
|
105 |
self.pid = node.content.strip() |
|
106 |
for prop in node.properties: |
|
107 |
if prop.name == "type": |
|
108 |
self.pid_type = prop.content |
|
109 |
elif prop.name == "resolvedUrl": |
|
110 |
self.resolved_url = prop.content |
|
111 |
if self.resolved_url == "#": |
|
112 |
if p.match(self.pid): |
|
113 |
self.resolved_url = self.pid |
|
114 |
|
|
115 |
def _associate_complete_status(self, ctxt): |
|
116 |
res = ctxt.xpathEval("./*[local-name()='completionStatus']") |
|
117 |
for node in res: |
|
118 |
self.completionStatus = node.content.strip() |
|
119 |
|
|
120 |
def _associate_record_provenance(self, ctxt): |
|
121 |
res = ctxt.xpathEval("./*[local-name()='provenance']") |
|
122 |
for node in res: |
|
123 |
ctxt.setContextNode(node) |
|
124 |
datasourcesInfo = ctxt.xpathEval(".//*[local-name()='datasourceInfo']") |
|
125 |
for datasourceInfo in datasourcesInfo: |
|
126 |
ctxt.setContextNode(datasourceInfo) |
|
127 |
datasources = ctxt.xpathEval("./*[local-name()='datasource']") |
|
128 |
for datasource in datasources: |
|
129 |
item = {} |
|
130 |
item['name'] = datasource.content.strip() |
|
131 |
item['name'] = re.sub(pattern, ' ', item['name']) |
|
132 |
for property in datasource.properties: |
|
133 |
if property.name == "completionStatus": |
|
134 |
item['completionStatus'] = property.content.strip() |
|
135 |
elif property.name == "provisionMode": |
|
136 |
item['provisionMode'] = property.content.strip() |
|
137 |
|
|
138 |
ctxt.setContextNode(node) |
|
139 |
collection_date_nodes = ctxt.xpathEval(".//*[local-name()='collectionDate']") |
|
140 |
for coll_node in collection_date_nodes: |
|
141 |
item['collectionDate'] = coll_node.content |
|
142 |
self.provenance_record.append(item) |
|
143 |
|
|
144 |
def _associate_type(self, ctxt): |
|
145 |
res = ctxt.xpathEval("./*[local-name()='objectType']") |
|
146 |
for node in res: |
|
147 |
self.objectType = node.content.strip() |
|
148 |
if self.objectType == "": |
|
149 |
self.objectType = "unknown" |
|
150 |
|
|
151 |
def _associate_title(self, ctxt): |
|
152 |
res = ctxt.xpathEval("./*[local-name()='title']") |
|
153 |
for node in res: |
|
154 |
self.title = node.content.strip() |
|
155 |
self.title = re.sub(pattern, ' ', self.title) |
|
156 |
|
|
157 |
def _associate_date(self, ctxt): |
|
158 |
res = ctxt.xpathEval("./*[local-name()='date']") |
|
159 |
for node in res: |
|
160 |
self.date = node.content.strip() |
|
161 |
|
|
162 |
def _associate_authors(self, ctxt): |
|
163 |
res = ctxt.xpathEval("./*[local-name()='authors']") |
|
164 |
for node in res: |
|
165 |
ctxt.setContextNode(node) |
|
166 |
authors = ctxt.xpathEval("./*[local-name()='author']") |
|
167 |
for author in authors: |
|
168 |
self.authors.append(re.sub(pattern, ' ', author.content)) |
|
169 |
|
|
170 |
def _associate_relations(self, ctxt, newCtxt): |
|
171 |
res = ctxt.xpathEval("//*[local-name()='relation']") |
|
172 |
for relation in res: |
|
173 |
self.relations.append(DLIRelation(relation, newCtxt)) |
modules/dli-service-portal/branches/newPortal/logger.py | ||
---|---|---|
1 |
import logging |
|
2 |
|
|
3 |
dlilogger = logging.getLogger('dli') |
|
4 |
hdlr = logging.FileHandler('dli.log') |
|
5 |
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') |
|
6 |
hdlr.setFormatter(formatter) |
|
7 |
dlilogger.addHandler(hdlr) |
|
8 |
dlilogger.setLevel(logging.WARNING) |
modules/dli-service-portal/branches/newPortal/static/partials/datasourceDetail.html | ||
---|---|---|
1 |
<div class="container"> |
|
2 |
<div class="row"> |
|
3 |
<div class="col-lg-12"> |
|
4 |
<h3>Datasource Info </h3> |
|
5 |
</div> |
|
6 |
</div> |
|
7 |
|
|
8 |
<div class="row"> |
|
9 |
<div class="col-lg-12"> |
|
10 |
<img src="{{ datasource.iconURI }}" style="max-height: 100px"/> |
|
11 |
</div> |
|
12 |
</div> |
|
13 |
<div class="row"> |
|
14 |
<div class="col-lg-6"> |
|
15 |
<ul> |
|
16 |
|
|
17 |
<li>Datasource Name: <b class=blue-text>{{ datasource.officialName }}</b></li> |
|
18 |
<li>Datasource webPage: <a href="{{ datasource.webSite }}">{{ datasource.webSite }}</a></li> |
|
19 |
<li>Number of Datasets: <b>{{ lastStats.numberOfDatasets }}</b></li> |
|
20 |
<li>Number of Publications: <b>{{ lastStats.numberOfPublication }}</b></li> |
|
21 |
<li>Number of Relations: <b>{{ lastStats.numberOfRelations }}</b></li> |
|
22 |
|
|
23 |
|
|
24 |
</ul> |
|
25 |
</div> |
|
26 |
</div> |
|
27 |
|
|
28 |
<div class="row"> |
|
29 |
<div class="col-lg-12"> |
|
30 |
<ul id="myTabs" class="nav nav-tabs text-center" role="tablist"> |
|
31 |
<li role="presentation" class="active"><a href="#stats" role="tab" id="profile-tab" data-toggle="tab" |
|
32 |
aria-controls="profile" aria-expanded="false"><h4> |
|
33 |
Statistics</h4></a></li> |
|
34 |
<li role="presentation"><a href="#dataset" id="home-tab" role="tab" data-toggle="tab" |
|
35 |
aria-controls="home" aria-expanded="true"><h4>Datasets</h4></a></li> |
|
36 |
<li role="presentation"><a href="#publication" role="tab" id="profile-tab" data-toggle="tab" |
|
37 |
aria-controls="profile" aria-expanded="false"><h4>Publications</h4></a></li> |
|
38 |
|
|
39 |
</ul> |
|
40 |
<div id="myTabContent" class="tab-content"> |
|
41 |
<div role="tabpanel" class="tab-pane fade active in" id="stats" aria-labelledby="home-tab"> |
|
42 |
<h1>Stats</h1> |
|
43 |
|
|
44 |
<div id="chart_history_links"></div> |
|
45 |
</div> |
|
46 |
<div role="tabpanel" class="tab-pane fade " id="dataset" aria-labelledby="dropdown1-tab"> |
|
47 |
<h1>Dataset</h1> |
|
48 |
|
|
49 |
<div class="row" ng-show="result_dataset.length"> |
|
50 |
<div class="col-lg-6 col-lg-offset-6"> |
|
51 |
<a href='#/query/q=entitytype:"dataset" AND provenance:"{{ datasource.officialName }}"' |
|
52 |
class="btn btn-primary">See other Datasets <span |
|
53 |
class="glyphicon glyphicon-circle-arrow-right"></span></a> |
|
54 |
</div> |
|
55 |
</div> |
|
56 |
|
|
57 |
<div class="row" ng-repeat="result in result_dataset"> |
|
58 |
<div class="col-lg-12"> |
|
59 |
<a href="#/detail/{{ result.identifier }}"> |
|
60 |
<i ng-hide="result.objectType!= 'unknown' " |
|
61 |
style="padding: 10px" |
|
62 |
class="fa fa-question-circle fa-2x blue-text circle responsive-img"></i> |
|
63 |
<i ng-show="result.objectType=='dataset'" style="padding: 10px" |
|
64 |
class="fa fa-database fa-2x blue-text circle responsive-img"></i> |
|
65 |
<i style="padding: 10px" ng-show="result.objectType=='publication'" |
|
66 |
class="fa fa-book fa-2x blue-text circle responsive-img"></i> |
|
67 |
<b ng-show="result.title">{{ result.title }}</b> |
|
68 |
<b ng-hide="result.title">Metadata non resolved for pid : {{ result.pid }}</b> |
|
69 |
</a> |
|
70 |
</div> |
|
71 |
|
|
72 |
<div class="col-lg-12"> |
|
73 |
<d style="font-size: small"></d> |
|
74 |
<auth style="font-size: small; color: #1565C0" |
|
75 |
ng-repeat="author in result.authors"> |
|
76 |
<f ng-hide="$index==0">,</f> |
|
77 |
{{ author }} |
|
78 |
</auth> |
|
79 |
<d ng-show="result.date">- {{ result.date }}</d> |
|
80 |
</d> |
|
81 |
</div> |
|
82 |
<p> |
|
83 |
|
|
84 |
<div class="col-lg-2"> |
|
85 |
<auth style="font-size: small" class="orange-text"><b>{{ countRelatedDatasets(result) }}</b> |
|
86 |
Related Datasets |
|
87 |
</auth> |
|
88 |
</div> |
|
89 |
<div class="col-lg-2"> |
|
90 |
<auth style="font-size: small" class="orange-text"> |
|
91 |
<b> {{ countRelatedPublication(result) }}</b> Related Publications |
|
92 |
</auth> |
|
93 |
</div> |
|
94 |
<div class="col-lg-2"> |
|
95 |
<auth style="font-size: small" class="orange-text"><b>{{ countOtherRelations(result) }}</b> |
|
96 |
Other Relations |
|
97 |
</auth> |
|
98 |
</div> |
|
99 |
<div class="col-lg-2"> |
|
100 |
<auth style="font-size: small" class="orange-text"><a |
|
101 |
href="{{ result.resolved_url }}" class="orange-text"> <i |
|
102 |
class="fa fa-link"></i> Original Object </a></auth> |
|
103 |
</div> |
|
104 |
<div class="col-lg-3"> |
|
105 |
[ |
|
106 |
<auth style="font-size: small" class="orange-text" |
|
107 |
ng-repeat="prov in result.provenance_record"> |
|
108 |
<f ng-hide="$index==0">,</f> |
|
109 |
<a href='#/datasource/name/{{ prov.name }}' style="color: orange">{{ prov.name }}</a> |
|
110 |
</auth> |
|
111 |
<d style="font-size: small">]</d> |
|
112 |
</div> |
|
113 |
|
|
114 |
</div> |
|
115 |
|
|
116 |
|
|
117 |
</div> |
|
118 |
<div role="tabpanel" class="tab-pane fade" id="publication" aria-labelledby="profile-tab"> |
|
119 |
<h1>Publication</h1> |
|
120 |
|
|
121 |
<div class="row" ng-show="result_publication"> |
|
122 |
<div class="col-lg-6 col-lg-offset-6"> |
|
123 |
<a href='#/query/q=entitytype:"publication" AND provenance:"{{ datasource.officialName }}"' |
|
124 |
class="btn btn-primary">See other Publication <span |
|
125 |
class="glyphicon glyphicon-circle-arrow-right"></span></a> |
|
126 |
</div> |
|
127 |
</div> |
|
128 |
<div class="row" ng-repeat="result in result_publication"> |
|
129 |
<div class="col-lg-12"> |
|
130 |
<a href="#/detail/{{ result.identifier }}"> |
|
131 |
<i ng-hide="result.objectType!= 'unknown' " |
|
132 |
style="padding: 10px" |
|
133 |
class="fa fa-question-circle fa-2x blue-text circle responsive-img"></i> |
|
134 |
<i ng-show="result.objectType=='dataset'" style="padding: 10px" |
|
135 |
class="fa fa-database fa-2x blue-text circle responsive-img"></i> |
|
136 |
<i style="padding: 10px" ng-show="result.objectType=='publication'" |
|
137 |
class="fa fa-book fa-2x blue-text circle responsive-img"></i> |
|
138 |
<b ng-show="result.title">{{ result.title }}</b> |
|
139 |
<b ng-hide="result.title">Metadata non resolved for pid : {{ result.pid }}</b> |
|
140 |
</a> |
|
141 |
</div> |
|
142 |
|
|
143 |
<div class="col-lg-12"> |
|
144 |
<d style="font-size: small"></d> |
|
145 |
<auth style="font-size: small; color: #1565C0" |
|
146 |
ng-repeat="author in result.authors"> |
|
147 |
<f ng-hide="$index==0">,</f> |
|
148 |
{{ author }} |
|
149 |
</auth> |
|
150 |
<d ng-show="result.date">- {{ result.date }}</d> |
|
151 |
</d> |
|
152 |
</div> |
|
153 |
<p> |
|
154 |
|
|
155 |
<div class="col-lg-2"> |
|
156 |
<auth style="font-size: small" class="orange-text"><b>{{ countRelatedDatasets(result) }}</b> |
|
157 |
Related Datasets |
|
158 |
</auth> |
|
159 |
</div> |
|
160 |
<div class="col-lg-2"> |
|
161 |
<auth style="font-size: small" class="orange-text"> |
|
162 |
<b> {{ countRelatedPublication(result) }}</b> Related Publications |
|
163 |
</auth> |
|
164 |
</div> |
|
165 |
<div class="col-lg-2"> |
|
166 |
<auth style="font-size: small" class="orange-text"><b>{{ countOtherRelations(result) }}</b> |
|
167 |
Other Relations |
|
168 |
</auth> |
|
169 |
</div> |
|
170 |
<div class="col-lg-2"> |
|
171 |
<auth style="font-size: small" class="orange-text"><a |
|
172 |
href="{{ result.resolved_url }}" class="orange-text"> <i |
|
173 |
class="fa fa-link"></i> Original Object </a></auth> |
|
174 |
</div> |
|
175 |
<div class="col-lg-3"> |
|
176 |
[ |
|
177 |
<auth style="font-size: small" class="orange-text" |
|
178 |
ng-repeat="prov in result.provenance_record"> |
|
179 |
<f ng-hide="$index==0">,</f> |
|
180 |
<a href='#/datasource/name/{{ prov.name }}' style="color: orange">{{ prov.name }}</a> |
|
181 |
</auth> |
|
182 |
<d style="font-size: small">]</d> |
|
183 |
</div> |
|
184 |
|
|
185 |
</div> |
|
186 |
|
|
187 |
</div> |
|
188 |
|
|
189 |
</div> |
|
190 |
</div> |
|
191 |
</div> |
|
192 |
|
|
193 |
|
|
194 |
</div> |
|
195 |
|
|
196 |
<script> |
|
197 |
$('#myTabs a').click(function (e) { |
|
198 |
e.preventDefault() |
|
199 |
$(this).tab('show') |
|
200 |
}); |
|
201 |
</script> |
modules/dli-service-portal/branches/newPortal/static/partials/datasources.html | ||
---|---|---|
1 |
<div class="row container-fluid"> |
|
2 |
|
|
3 |
|
|
4 |
<h1>Datasource's Map</h1> |
|
5 |
|
|
6 |
|
|
7 |
<div class="row"> |
|
8 |
<div class="col-lg-2"> |
|
9 |
<ul class="list-group"> |
|
10 |
<li class="list-group-item" ng-repeat="item in my_markers"> |
|
11 |
<a href="{{ item.weburl }}" > {{ item.name }}</a></li> |
|
12 |
|
|
13 |
</ul> |
|
14 |
|
|
15 |
</div> |
|
16 |
<div class="col-lg-8" > |
|
17 |
<div id="world-map" style="width: 100%; height: 500px; margin: 40px" ></div> |
|
18 |
|
|
19 |
|
|
20 |
</div> |
|
21 |
</div> |
|
22 |
</div> |
|
23 |
|
|
24 |
<script src="js/createMap.js"></script> |
modules/dli-service-portal/branches/newPortal/static/partials/detail.html | ||
---|---|---|
1 |
<section> |
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
<div> |
|
6 |
<div class="row"> |
|
7 |
<div class="col-lg-11 col-lg-offset-1" style="font-size: large"> |
|
8 |
<i ng-show="item.objectType=='dataset'" style="padding: 10px" class="fa fa-database fa-2x responsive-img"></i> |
|
9 |
<i ng-show="item.objectType=='publication'" style="padding: 10px" class="fa fa-book fa-2x circle responsive-img"></i> |
|
10 |
<i ng-hide="item.objectType=='publication' || item.objectType=='dataset'" class="fa fa-question-circle fa-2x blue-text circle responsive-img"></i> |
|
11 |
<b><a href="{{ item.resolved_url }}" style="margin: 10px"> |
|
12 |
<d> {{ item.title }} </d> |
|
13 |
<d ng-hide="item.title">metadata not available - Pid not resolved</d> |
|
14 |
|
|
15 |
</a></b></div> |
|
16 |
</div> |
|
17 |
</div> |
|
18 |
|
|
19 |
|
|
20 |
<div class="row"> |
|
21 |
<div class="col-lg-11 col-lg-offset-1"> |
|
22 |
<table style="width: 100%"> |
|
23 |
<tr> |
|
24 |
<td style="width: 20%"><b>Typology:</b></td> |
|
25 |
<td> {{ item.objectType }}</td> |
|
26 |
</tr> |
|
27 |
<tr> |
|
28 |
<td ><b>Identifier:</b></td> |
|
29 |
<td > {{ item.pid }}</td> |
|
30 |
</tr> |
|
31 |
<tr > |
|
32 |
<td ><b>Identifier type:</b></td> |
|
33 |
<td > {{ item.pid_type }}</td> |
|
34 |
</tr> |
|
35 |
<tr> |
|
36 |
<td class="valign-wrapper"><b>Author(s):</b></td> |
|
37 |
<td class="green-text"> |
|
38 |
<f ng-repeat="a in item.authors">{{ a }},</f> |
|
39 |
</td> |
|
40 |
</tr> |
|
41 |
<tr> |
|
42 |
<td><b>Date:</b></td> |
|
43 |
<td class="valign-wrapper green-text"> {{ item.date }}</td> |
|
44 |
</tr> |
|
45 |
</table> |
|
46 |
|
|
47 |
<br> |
|
48 |
|
|
49 |
|
|
50 |
<table style="width: 100%"> |
|
51 |
<tr> |
|
52 |
<td style="width: 20%"><b>provenance (of this object):</b></td> |
|
53 |
<td class="valign-wrapper"> |
|
54 |
<table style="width: 100%"> |
|
55 |
<thead> |
|
56 |
<tr> |
|
57 |
<th class="center-align" style="width: 20%">Date Of Collection</th> |
|
58 |
<th class="center-align" style="width: 20%">Datasource</th> |
|
59 |
<th class="center-align" style="width: 60%">Action</th> |
|
60 |
</tr> |
|
61 |
</thead> |
|
62 |
<tbody> |
|
63 |
<tr ng-repeat="d in item.provenance_record"> |
|
64 |
<td class="centered" >{{ d.collectionDate }}</td> |
|
65 |
<td class="centered" >{{ d.name }}</td> |
|
66 |
<td class="centered" > |
|
67 |
<div ng-show="d.completionStatus==='complete' && d.provisionMode==='collected'"> |
|
68 |
Object PID collected from {{ d.name }} |
|
69 |
</div> |
|
70 |
<div ng-show="d.completionStatus==='incomplete'">Object PID collected from |
|
71 |
{{ d.name }} |
|
72 |
</div> |
|
73 |
<div ng-show="d.completionStatus==='complete' && d.provisionMode==='resolved'"> |
|
74 |
Full-metadata record collected from {{ d.name }} |
|
75 |
</div> |
|
76 |
</td> |
|
77 |
|
|
78 |
|
|
79 |
</tr> |
|
80 |
</tbody> |
|
81 |
</table> |
|
82 |
</td> |
|
83 |
</tr> |
|
84 |
|
|
85 |
</table> |
|
86 |
<br> |
|
87 |
</div> |
|
88 |
</div> |
|
89 |
|
|
90 |
|
|
91 |
|
|
92 |
|
|
93 |
<div class="row"> |
|
94 |
<div class="col-lg-11 col-lg-offset-1"> |
|
95 |
<ul id="myTabs" class="nav nav-tabs text-center" role="tablist"> |
|
96 |
<li role="presentation" ng-class="active"><a href="#dataset" id="home-tab" role="tab" data-toggle="tab" aria-controls="home" aria-expanded="true"> <h4>Link To Datasets</h4></a></li> |
|
97 |
<li role="presentation" ng-class=""><a href="#publication" role="tab" id="profile-tab" data-toggle="tab" aria-controls="profile" aria-expanded="false"> <h4>Link To Publications</h4></a></li> |
|
98 |
<li role="presentation" ng-class=""><a href="#other" role="tab" id="profile-tab" data-toggle="tab" aria-controls="profile" aria-expanded="false"><h4>Other Links</h4></a></li> |
|
99 |
</ul> |
|
100 |
<div id="myTabContent" class="tab-content"> |
|
101 |
<div role="tabpanel" class="tab-pane fade active in" id="dataset" aria-labelledby="home-tab"> |
|
102 |
|
|
103 |
<div ng-repeat="rels in item.relations"> |
|
104 |
<div ng-show="rels.relatedEntityType=='dataset'"> |
|
105 |
<div class="row" > |
|
106 |
|
|
107 |
<div class="col-lg-12"><a href="#/detail/{{ rels.relatedDnetId }}" class="blue-text"> <i |
|
108 |
style="padding: 10px" |
|
109 |
class="fa fa-database fa-2x blue-text circle responsive-img"></i><b>{{ |
|
110 |
rels.related_title }}</b> </a></div> |
|
111 |
|
|
112 |
<div class="col-lg-12"> |
|
113 |
<f style="color: green" ng-repeat="a in rels.authors">{{ a }},</f> |
|
114 |
</div> |
|
115 |
<div class="col-lg-12"><b>PID</b> : {{ rels.targetPID }}</div> |
|
116 |
<div class="col-lg-12"><b>PID Type</b> : {{ rels.targetPIDType }}</div> |
|
117 |
</div> |
|
118 |
<div class="row"> |
|
119 |
<div class="col-lg-2"> |
|
120 |
<b>provenance (of this link): </b> |
|
121 |
</div> |
|
122 |
<div class="col-lg-8"> |
|
123 |
<table style="width: 100%"> |
|
124 |
<thead> |
|
125 |
<tr> |
|
126 |
<th class="center-align" style="width: 20%">Date Of Collection</th> |
|
127 |
<th class="center-align" style="width: 20%">Datasource</th> |
|
128 |
<th class="center-align" style="width: 60%">Action</th> |
|
129 |
</tr> |
|
130 |
</thead> |
|
131 |
<tbody> |
|
132 |
<tr ng-repeat="d in rels.relation_provenance"> |
|
133 |
<td class="left-align">{{ d.collectionDate }}</td> |
|
134 |
<td class="left-align">{{ d.name }}</td> |
|
135 |
<td class="left-align"> |
|
136 |
<div ng-show="d.provisionMode==='system_deducted'"> Typology of target |
|
137 |
object derived by the system |
|
138 |
</div> |
|
139 |
<div ng-hide="d.provisionMode==='system_deducted'">Relation collected |
|
140 |
from {{ d.name }} |
|
141 |
</div> |
|
142 |
|
|
143 |
</td> |
|
144 |
|
|
145 |
|
|
146 |
</tr> |
|
147 |
</tbody> |
|
148 |
</table> |
|
149 |
|
|
150 |
</div> |
|
151 |
|
|
152 |
|
|
153 |
</div> |
|
154 |
</div> |
|
155 |
</div> |
|
156 |
</div> |
|
157 |
<div role="tabpanel" class="tab-pane fade" id="publication" aria-labelledby="profile-tab"> |
|
158 |
<div ng-repeat="rels in item.relations"> |
|
159 |
<div ng-show="rels.relatedEntityType=='publication'"> |
|
160 |
<div class="row" > |
|
161 |
|
|
162 |
<div class="col-lg-12"><a href="#/detail/{{ rels.relatedDnetId }}" class="blue-text"> <i |
|
163 |
style="padding: 10px" |
|
164 |
class="fa fa-book fa-2x blue-text circle responsive-img"></i><b>{{ |
|
165 |
rels.related_title }}</b> </a></div> |
|
166 |
|
|
167 |
<div class="col-lg-12"> |
|
168 |
<f style="color: green" ng-repeat="a in rels.authors">{{ a }},</f> |
|
169 |
</div> |
|
170 |
<div class="col-lg-12"><b>PID</b> : {{ rels.targetPID }}</div> |
|
171 |
<div class="col-lg-12"><b>PID Type</b> : {{ rels.targetPIDType }}</div> |
|
172 |
</div> |
|
173 |
<div class="row"> |
|
174 |
<div class="col-lg-2"> |
|
175 |
<b>provenance (of this link): </b> |
|
176 |
</div> |
|
177 |
<div class="col-lg-8"> |
|
178 |
<table style="width: 100%"> |
|
179 |
<thead> |
|
180 |
<tr> |
|
181 |
<th class="center-align" style="width: 20%">Date Of Collection</th> |
|
182 |
<th class="center-align" style="width: 20%">Datasource</th> |
|
183 |
<th class="center-align" style="width: 60%">Action</th> |
|
184 |
</tr> |
|
185 |
</thead> |
|
186 |
<tbody> |
|
187 |
<tr ng-repeat="d in rels.relation_provenance"> |
|
188 |
<td class="left-align">{{ d.collectionDate }}</td> |
|
189 |
<td class="left-align">{{ d.name }}</td> |
|
190 |
<td class="left-align"> |
|
191 |
<div ng-show="d.provisionMode==='system_deducted'"> Typology of target |
|
192 |
object derived by the system |
|
193 |
</div> |
|
194 |
<div ng-hide="d.provisionMode==='system_deducted'">Relation collected |
|
195 |
from {{ d.name }} |
|
196 |
</div> |
|
197 |
|
|
198 |
</td> |
|
199 |
|
|
200 |
|
|
201 |
</tr> |
|
202 |
</tbody> |
|
203 |
</table> |
|
204 |
|
|
205 |
</div> |
|
206 |
|
|
207 |
|
|
208 |
</div> |
|
209 |
</div> |
|
210 |
</div> |
|
211 |
|
|
212 |
</div> |
|
213 |
<div role="tabpanel" class="tab-pane fade" id="other" aria-labelledby="dropdown1-tab"> |
|
214 |
<div ng-repeat="rels in item.relations"> |
|
215 |
<div ng-hide="rels.relatedEntityType==='publication' || rels.relatedEntityType==='dataset' "> |
|
216 |
<div class="row" > |
|
217 |
|
|
218 |
<div class="col-lg-12"><a href="#/detail/{{ rels.relatedDnetId }}" class="blue-text"> <i |
|
219 |
style="padding: 10px" |
|
220 |
class="fa fa-question-circle fa-2x blue-text circle responsive-img"></i><b>Record |
|
221 |
metadata not available - Pid not resolved</b> </a></div> |
|
222 |
|
|
223 |
<div class="col-lg-12"> |
|
224 |
<f style="color: green" ng-repeat="a in rels.authors">{{ a }},</f> |
|
225 |
</div> |
|
226 |
<div class="col-lg-12"><b>PID</b> : {{ rels.targetPID }}</div> |
|
227 |
<div class="col-lg-12"><b>PID Type</b> : {{ rels.targetPIDType }}</div> |
|
228 |
</div> |
|
229 |
<div class="row"> |
|
230 |
<div class="col-lg-2"> |
|
231 |
<b>provenance (of this link): </b> |
|
232 |
</div> |
|
233 |
<div class="col-lg-8"> |
|
234 |
<table style="width: 100%"> |
|
235 |
<thead> |
|
236 |
<tr> |
|
237 |
<th class="center-align" style="width: 20%">Date Of Collection</th> |
|
238 |
<th class="center-align" style="width: 20%">Datasource</th> |
|
239 |
<th class="center-align" style="width: 60%">Action</th> |
|
240 |
</tr> |
|
241 |
</thead> |
|
242 |
<tbody> |
|
243 |
<tr ng-repeat="d in rels.relation_provenance"> |
|
244 |
<td class="left-align">{{ d.collectionDate }}</td> |
|
245 |
<td class="left-align">{{ d.name }}</td> |
|
246 |
<td class="left-align"> |
|
247 |
<div ng-show="d.provisionMode==='system_deducted'"> Typology of target |
|
248 |
object derived by the system |
|
249 |
</div> |
|
250 |
<div ng-hide="d.provisionMode==='system_deducted'">Relation collected |
|
251 |
from {{ d.name }} |
|
252 |
</div> |
|
253 |
|
|
254 |
</td> |
|
255 |
|
|
256 |
|
|
257 |
</tr> |
|
258 |
</tbody> |
|
259 |
</table> |
|
260 |
|
|
261 |
</div> |
|
262 |
|
|
263 |
|
|
264 |
</div> |
|
265 |
</div> |
|
266 |
</div> |
|
267 |
</div> |
|
268 |
</div> |
|
269 |
</div> |
|
270 |
</div> |
|
271 |
</section> |
|
272 |
<script> |
|
273 |
|
|
274 |
</script> |
modules/dli-service-portal/branches/newPortal/static/font-awesome/scss/_variables.scss | ||
---|---|---|
1 |
// Variables |
|
2 |
// -------------------------- |
|
3 |
|
|
4 |
$fa-font-path: "../fonts" !default; |
|
5 |
//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.2.0/fonts" !default; // for referencing Bootstrap CDN font files directly |
|
6 |
$fa-css-prefix: fa !default; |
|
7 |
$fa-version: "4.2.0" !default; |
|
8 |
$fa-border-color: #eee !default; |
|
9 |
$fa-inverse: #fff !default; |
|
10 |
$fa-li-width: (30em / 14) !default; |
|
11 |
|
|
12 |
$fa-var-adjust: "\f042"; |
|
13 |
$fa-var-adn: "\f170"; |
|
14 |
$fa-var-align-center: "\f037"; |
|
15 |
$fa-var-align-justify: "\f039"; |
|
16 |
$fa-var-align-left: "\f036"; |
|
17 |
$fa-var-align-right: "\f038"; |
|
18 |
$fa-var-ambulance: "\f0f9"; |
|
19 |
$fa-var-anchor: "\f13d"; |
|
20 |
$fa-var-android: "\f17b"; |
|
21 |
$fa-var-angellist: "\f209"; |
|
22 |
$fa-var-angle-double-down: "\f103"; |
|
23 |
$fa-var-angle-double-left: "\f100"; |
|
24 |
$fa-var-angle-double-right: "\f101"; |
|
25 |
$fa-var-angle-double-up: "\f102"; |
|
26 |
$fa-var-angle-down: "\f107"; |
|
27 |
$fa-var-angle-left: "\f104"; |
|
28 |
$fa-var-angle-right: "\f105"; |
|
29 |
$fa-var-angle-up: "\f106"; |
|
30 |
$fa-var-apple: "\f179"; |
|
31 |
$fa-var-archive: "\f187"; |
|
32 |
$fa-var-area-chart: "\f1fe"; |
|
33 |
$fa-var-arrow-circle-down: "\f0ab"; |
|
34 |
$fa-var-arrow-circle-left: "\f0a8"; |
|
35 |
$fa-var-arrow-circle-o-down: "\f01a"; |
|
36 |
$fa-var-arrow-circle-o-left: "\f190"; |
|
37 |
$fa-var-arrow-circle-o-right: "\f18e"; |
|
38 |
$fa-var-arrow-circle-o-up: "\f01b"; |
|
39 |
$fa-var-arrow-circle-right: "\f0a9"; |
|
40 |
$fa-var-arrow-circle-up: "\f0aa"; |
|
41 |
$fa-var-arrow-down: "\f063"; |
|
42 |
$fa-var-arrow-left: "\f060"; |
|
43 |
$fa-var-arrow-right: "\f061"; |
|
44 |
$fa-var-arrow-up: "\f062"; |
|
45 |
$fa-var-arrows: "\f047"; |
|
46 |
$fa-var-arrows-alt: "\f0b2"; |
|
47 |
$fa-var-arrows-h: "\f07e"; |
|
48 |
$fa-var-arrows-v: "\f07d"; |
|
49 |
$fa-var-asterisk: "\f069"; |
|
50 |
$fa-var-at: "\f1fa"; |
|
51 |
$fa-var-automobile: "\f1b9"; |
|
52 |
$fa-var-backward: "\f04a"; |
|
53 |
$fa-var-ban: "\f05e"; |
|
54 |
$fa-var-bank: "\f19c"; |
|
55 |
$fa-var-bar-chart: "\f080"; |
|
56 |
$fa-var-bar-chart-o: "\f080"; |
|
57 |
$fa-var-barcode: "\f02a"; |
|
58 |
$fa-var-bars: "\f0c9"; |
|
59 |
$fa-var-beer: "\f0fc"; |
|
60 |
$fa-var-behance: "\f1b4"; |
|
61 |
$fa-var-behance-square: "\f1b5"; |
|
62 |
$fa-var-bell: "\f0f3"; |
|
63 |
$fa-var-bell-o: "\f0a2"; |
|
64 |
$fa-var-bell-slash: "\f1f6"; |
|
65 |
$fa-var-bell-slash-o: "\f1f7"; |
|
66 |
$fa-var-bicycle: "\f206"; |
|
67 |
$fa-var-binoculars: "\f1e5"; |
|
68 |
$fa-var-birthday-cake: "\f1fd"; |
|
69 |
$fa-var-bitbucket: "\f171"; |
|
70 |
$fa-var-bitbucket-square: "\f172"; |
|
71 |
$fa-var-bitcoin: "\f15a"; |
|
72 |
$fa-var-bold: "\f032"; |
|
73 |
$fa-var-bolt: "\f0e7"; |
|
74 |
$fa-var-bomb: "\f1e2"; |
|
75 |
$fa-var-book: "\f02d"; |
|
76 |
$fa-var-bookmark: "\f02e"; |
|
77 |
$fa-var-bookmark-o: "\f097"; |
|
78 |
$fa-var-briefcase: "\f0b1"; |
|
79 |
$fa-var-btc: "\f15a"; |
|
80 |
$fa-var-bug: "\f188"; |
|
81 |
$fa-var-building: "\f1ad"; |
|
82 |
$fa-var-building-o: "\f0f7"; |
|
83 |
$fa-var-bullhorn: "\f0a1"; |
|
84 |
$fa-var-bullseye: "\f140"; |
|
85 |
$fa-var-bus: "\f207"; |
|
86 |
$fa-var-cab: "\f1ba"; |
|
87 |
$fa-var-calculator: "\f1ec"; |
|
88 |
$fa-var-calendar: "\f073"; |
|
89 |
$fa-var-calendar-o: "\f133"; |
|
90 |
$fa-var-camera: "\f030"; |
|
91 |
$fa-var-camera-retro: "\f083"; |
|
92 |
$fa-var-car: "\f1b9"; |
|
93 |
$fa-var-caret-down: "\f0d7"; |
|
94 |
$fa-var-caret-left: "\f0d9"; |
|
95 |
$fa-var-caret-right: "\f0da"; |
|
96 |
$fa-var-caret-square-o-down: "\f150"; |
|
97 |
$fa-var-caret-square-o-left: "\f191"; |
|
98 |
$fa-var-caret-square-o-right: "\f152"; |
|
99 |
$fa-var-caret-square-o-up: "\f151"; |
|
100 |
$fa-var-caret-up: "\f0d8"; |
|
101 |
$fa-var-cc: "\f20a"; |
|
102 |
$fa-var-cc-amex: "\f1f3"; |
|
103 |
$fa-var-cc-discover: "\f1f2"; |
|
104 |
$fa-var-cc-mastercard: "\f1f1"; |
|
105 |
$fa-var-cc-paypal: "\f1f4"; |
|
106 |
$fa-var-cc-stripe: "\f1f5"; |
|
107 |
$fa-var-cc-visa: "\f1f0"; |
|
108 |
$fa-var-certificate: "\f0a3"; |
|
109 |
$fa-var-chain: "\f0c1"; |
|
110 |
$fa-var-chain-broken: "\f127"; |
|
111 |
$fa-var-check: "\f00c"; |
|
112 |
$fa-var-check-circle: "\f058"; |
|
113 |
$fa-var-check-circle-o: "\f05d"; |
|
114 |
$fa-var-check-square: "\f14a"; |
|
115 |
$fa-var-check-square-o: "\f046"; |
|
116 |
$fa-var-chevron-circle-down: "\f13a"; |
|
117 |
$fa-var-chevron-circle-left: "\f137"; |
|
118 |
$fa-var-chevron-circle-right: "\f138"; |
|
119 |
$fa-var-chevron-circle-up: "\f139"; |
|
120 |
$fa-var-chevron-down: "\f078"; |
|
121 |
$fa-var-chevron-left: "\f053"; |
|
122 |
$fa-var-chevron-right: "\f054"; |
|
123 |
$fa-var-chevron-up: "\f077"; |
|
124 |
$fa-var-child: "\f1ae"; |
|
125 |
$fa-var-circle: "\f111"; |
|
126 |
$fa-var-circle-o: "\f10c"; |
|
127 |
$fa-var-circle-o-notch: "\f1ce"; |
|
128 |
$fa-var-circle-thin: "\f1db"; |
|
129 |
$fa-var-clipboard: "\f0ea"; |
|
130 |
$fa-var-clock-o: "\f017"; |
|
131 |
$fa-var-close: "\f00d"; |
|
132 |
$fa-var-cloud: "\f0c2"; |
|
133 |
$fa-var-cloud-download: "\f0ed"; |
|
134 |
$fa-var-cloud-upload: "\f0ee"; |
|
135 |
$fa-var-cny: "\f157"; |
|
136 |
$fa-var-code: "\f121"; |
|
137 |
$fa-var-code-fork: "\f126"; |
|
138 |
$fa-var-codepen: "\f1cb"; |
|
139 |
$fa-var-coffee: "\f0f4"; |
|
140 |
$fa-var-cog: "\f013"; |
|
141 |
$fa-var-cogs: "\f085"; |
|
142 |
$fa-var-columns: "\f0db"; |
|
143 |
$fa-var-comment: "\f075"; |
|
144 |
$fa-var-comment-o: "\f0e5"; |
|
145 |
$fa-var-comments: "\f086"; |
|
146 |
$fa-var-comments-o: "\f0e6"; |
|
147 |
$fa-var-compass: "\f14e"; |
|
148 |
$fa-var-compress: "\f066"; |
|
149 |
$fa-var-copy: "\f0c5"; |
|
150 |
$fa-var-copyright: "\f1f9"; |
|
151 |
$fa-var-credit-card: "\f09d"; |
|
152 |
$fa-var-crop: "\f125"; |
|
153 |
$fa-var-crosshairs: "\f05b"; |
|
154 |
$fa-var-css3: "\f13c"; |
|
155 |
$fa-var-cube: "\f1b2"; |
|
156 |
$fa-var-cubes: "\f1b3"; |
|
157 |
$fa-var-cut: "\f0c4"; |
|
158 |
$fa-var-cutlery: "\f0f5"; |
|
159 |
$fa-var-dashboard: "\f0e4"; |
|
160 |
$fa-var-database: "\f1c0"; |
|
161 |
$fa-var-dedent: "\f03b"; |
|
162 |
$fa-var-delicious: "\f1a5"; |
|
163 |
$fa-var-desktop: "\f108"; |
|
164 |
$fa-var-deviantart: "\f1bd"; |
|
165 |
$fa-var-digg: "\f1a6"; |
|
166 |
$fa-var-dollar: "\f155"; |
|
167 |
$fa-var-dot-circle-o: "\f192"; |
|
168 |
$fa-var-download: "\f019"; |
|
169 |
$fa-var-dribbble: "\f17d"; |
|
170 |
$fa-var-dropbox: "\f16b"; |
|
171 |
$fa-var-drupal: "\f1a9"; |
|
172 |
$fa-var-edit: "\f044"; |
|
173 |
$fa-var-eject: "\f052"; |
|
174 |
$fa-var-ellipsis-h: "\f141"; |
|
175 |
$fa-var-ellipsis-v: "\f142"; |
|
176 |
$fa-var-empire: "\f1d1"; |
|
177 |
$fa-var-envelope: "\f0e0"; |
|
178 |
$fa-var-envelope-o: "\f003"; |
|
179 |
$fa-var-envelope-square: "\f199"; |
|
180 |
$fa-var-eraser: "\f12d"; |
|
181 |
$fa-var-eur: "\f153"; |
|
182 |
$fa-var-euro: "\f153"; |
|
183 |
$fa-var-exchange: "\f0ec"; |
|
184 |
$fa-var-exclamation: "\f12a"; |
|
185 |
$fa-var-exclamation-circle: "\f06a"; |
|
186 |
$fa-var-exclamation-triangle: "\f071"; |
|
187 |
$fa-var-expand: "\f065"; |
|
188 |
$fa-var-external-link: "\f08e"; |
|
189 |
$fa-var-external-link-square: "\f14c"; |
|
190 |
$fa-var-eye: "\f06e"; |
|
191 |
$fa-var-eye-slash: "\f070"; |
|
192 |
$fa-var-eyedropper: "\f1fb"; |
|
193 |
$fa-var-facebook: "\f09a"; |
|
194 |
$fa-var-facebook-square: "\f082"; |
|
195 |
$fa-var-fast-backward: "\f049"; |
|
196 |
$fa-var-fast-forward: "\f050"; |
|
197 |
$fa-var-fax: "\f1ac"; |
|
198 |
$fa-var-female: "\f182"; |
|
199 |
$fa-var-fighter-jet: "\f0fb"; |
|
200 |
$fa-var-file: "\f15b"; |
|
201 |
$fa-var-file-archive-o: "\f1c6"; |
|
202 |
$fa-var-file-audio-o: "\f1c7"; |
|
203 |
$fa-var-file-code-o: "\f1c9"; |
|
204 |
$fa-var-file-excel-o: "\f1c3"; |
|
205 |
$fa-var-file-image-o: "\f1c5"; |
|
206 |
$fa-var-file-movie-o: "\f1c8"; |
|
207 |
$fa-var-file-o: "\f016"; |
|
208 |
$fa-var-file-pdf-o: "\f1c1"; |
|
209 |
$fa-var-file-photo-o: "\f1c5"; |
|
210 |
$fa-var-file-picture-o: "\f1c5"; |
|
211 |
$fa-var-file-powerpoint-o: "\f1c4"; |
|
212 |
$fa-var-file-sound-o: "\f1c7"; |
|
213 |
$fa-var-file-text: "\f15c"; |
|
214 |
$fa-var-file-text-o: "\f0f6"; |
|
215 |
$fa-var-file-video-o: "\f1c8"; |
|
216 |
$fa-var-file-word-o: "\f1c2"; |
|
217 |
$fa-var-file-zip-o: "\f1c6"; |
|
218 |
$fa-var-files-o: "\f0c5"; |
|
219 |
$fa-var-film: "\f008"; |
|
220 |
$fa-var-filter: "\f0b0"; |
|
221 |
$fa-var-fire: "\f06d"; |
|
222 |
$fa-var-fire-extinguisher: "\f134"; |
|
223 |
$fa-var-flag: "\f024"; |
|
224 |
$fa-var-flag-checkered: "\f11e"; |
|
225 |
$fa-var-flag-o: "\f11d"; |
|
226 |
$fa-var-flash: "\f0e7"; |
|
227 |
$fa-var-flask: "\f0c3"; |
|
228 |
$fa-var-flickr: "\f16e"; |
|
229 |
$fa-var-floppy-o: "\f0c7"; |
|
230 |
$fa-var-folder: "\f07b"; |
|
231 |
$fa-var-folder-o: "\f114"; |
|
232 |
$fa-var-folder-open: "\f07c"; |
|
233 |
$fa-var-folder-open-o: "\f115"; |
|
234 |
$fa-var-font: "\f031"; |
|
235 |
$fa-var-forward: "\f04e"; |
|
236 |
$fa-var-foursquare: "\f180"; |
|
237 |
$fa-var-frown-o: "\f119"; |
|
238 |
$fa-var-futbol-o: "\f1e3"; |
|
239 |
$fa-var-gamepad: "\f11b"; |
|
240 |
$fa-var-gavel: "\f0e3"; |
|
241 |
$fa-var-gbp: "\f154"; |
|
242 |
$fa-var-ge: "\f1d1"; |
|
243 |
$fa-var-gear: "\f013"; |
|
244 |
$fa-var-gears: "\f085"; |
|
245 |
$fa-var-gift: "\f06b"; |
|
246 |
$fa-var-git: "\f1d3"; |
|
247 |
$fa-var-git-square: "\f1d2"; |
|
248 |
$fa-var-github: "\f09b"; |
|
249 |
$fa-var-github-alt: "\f113"; |
|
250 |
$fa-var-github-square: "\f092"; |
|
251 |
$fa-var-gittip: "\f184"; |
|
252 |
$fa-var-glass: "\f000"; |
|
253 |
$fa-var-globe: "\f0ac"; |
|
254 |
$fa-var-google: "\f1a0"; |
|
255 |
$fa-var-google-plus: "\f0d5"; |
|
256 |
$fa-var-google-plus-square: "\f0d4"; |
|
257 |
$fa-var-google-wallet: "\f1ee"; |
|
258 |
$fa-var-graduation-cap: "\f19d"; |
|
259 |
$fa-var-group: "\f0c0"; |
|
260 |
$fa-var-h-square: "\f0fd"; |
|
261 |
$fa-var-hacker-news: "\f1d4"; |
|
262 |
$fa-var-hand-o-down: "\f0a7"; |
|
263 |
$fa-var-hand-o-left: "\f0a5"; |
|
264 |
$fa-var-hand-o-right: "\f0a4"; |
|
265 |
$fa-var-hand-o-up: "\f0a6"; |
|
266 |
$fa-var-hdd-o: "\f0a0"; |
|
267 |
$fa-var-header: "\f1dc"; |
|
268 |
$fa-var-headphones: "\f025"; |
|
269 |
$fa-var-heart: "\f004"; |
|
270 |
$fa-var-heart-o: "\f08a"; |
|
271 |
$fa-var-history: "\f1da"; |
|
272 |
$fa-var-home: "\f015"; |
|
273 |
$fa-var-hospital-o: "\f0f8"; |
|
274 |
$fa-var-html5: "\f13b"; |
|
275 |
$fa-var-ils: "\f20b"; |
|
276 |
$fa-var-image: "\f03e"; |
|
277 |
$fa-var-inbox: "\f01c"; |
|
278 |
$fa-var-indent: "\f03c"; |
|
279 |
$fa-var-info: "\f129"; |
|
280 |
$fa-var-info-circle: "\f05a"; |
|
281 |
$fa-var-inr: "\f156"; |
|
282 |
$fa-var-instagram: "\f16d"; |
|
283 |
$fa-var-institution: "\f19c"; |
|
284 |
$fa-var-ioxhost: "\f208"; |
|
285 |
$fa-var-italic: "\f033"; |
|
286 |
$fa-var-joomla: "\f1aa"; |
|
287 |
$fa-var-jpy: "\f157"; |
|
288 |
$fa-var-jsfiddle: "\f1cc"; |
|
289 |
$fa-var-key: "\f084"; |
|
290 |
$fa-var-keyboard-o: "\f11c"; |
|
291 |
$fa-var-krw: "\f159"; |
|
292 |
$fa-var-language: "\f1ab"; |
|
293 |
$fa-var-laptop: "\f109"; |
|
294 |
$fa-var-lastfm: "\f202"; |
|
295 |
$fa-var-lastfm-square: "\f203"; |
|
296 |
$fa-var-leaf: "\f06c"; |
|
297 |
$fa-var-legal: "\f0e3"; |
|
298 |
$fa-var-lemon-o: "\f094"; |
|
299 |
$fa-var-level-down: "\f149"; |
|
300 |
$fa-var-level-up: "\f148"; |
|
301 |
$fa-var-life-bouy: "\f1cd"; |
|
302 |
$fa-var-life-buoy: "\f1cd"; |
|
303 |
$fa-var-life-ring: "\f1cd"; |
|
304 |
$fa-var-life-saver: "\f1cd"; |
|
305 |
$fa-var-lightbulb-o: "\f0eb"; |
|
306 |
$fa-var-line-chart: "\f201"; |
|
307 |
$fa-var-link: "\f0c1"; |
|
308 |
$fa-var-linkedin: "\f0e1"; |
|
309 |
$fa-var-linkedin-square: "\f08c"; |
|
310 |
$fa-var-linux: "\f17c"; |
|
311 |
$fa-var-list: "\f03a"; |
|
312 |
$fa-var-list-alt: "\f022"; |
|
313 |
$fa-var-list-ol: "\f0cb"; |
|
314 |
$fa-var-list-ul: "\f0ca"; |
|
315 |
$fa-var-location-arrow: "\f124"; |
|
316 |
$fa-var-lock: "\f023"; |
|
317 |
$fa-var-long-arrow-down: "\f175"; |
|
318 |
$fa-var-long-arrow-left: "\f177"; |
|
319 |
$fa-var-long-arrow-right: "\f178"; |
|
320 |
$fa-var-long-arrow-up: "\f176"; |
|
321 |
$fa-var-magic: "\f0d0"; |
|
322 |
$fa-var-magnet: "\f076"; |
|
323 |
$fa-var-mail-forward: "\f064"; |
|
324 |
$fa-var-mail-reply: "\f112"; |
|
325 |
$fa-var-mail-reply-all: "\f122"; |
|
326 |
$fa-var-male: "\f183"; |
|
327 |
$fa-var-map-marker: "\f041"; |
|
328 |
$fa-var-maxcdn: "\f136"; |
|
329 |
$fa-var-meanpath: "\f20c"; |
|
330 |
$fa-var-medkit: "\f0fa"; |
|
331 |
$fa-var-meh-o: "\f11a"; |
|
332 |
$fa-var-microphone: "\f130"; |
|
333 |
$fa-var-microphone-slash: "\f131"; |
|
334 |
$fa-var-minus: "\f068"; |
|
335 |
$fa-var-minus-circle: "\f056"; |
|
336 |
$fa-var-minus-square: "\f146"; |
|
337 |
$fa-var-minus-square-o: "\f147"; |
|
338 |
$fa-var-mobile: "\f10b"; |
|
339 |
$fa-var-mobile-phone: "\f10b"; |
|
340 |
$fa-var-money: "\f0d6"; |
|
341 |
$fa-var-moon-o: "\f186"; |
|
342 |
$fa-var-mortar-board: "\f19d"; |
|
343 |
$fa-var-music: "\f001"; |
|
344 |
$fa-var-navicon: "\f0c9"; |
|
345 |
$fa-var-newspaper-o: "\f1ea"; |
|
346 |
$fa-var-openid: "\f19b"; |
|
347 |
$fa-var-outdent: "\f03b"; |
|
348 |
$fa-var-pagelines: "\f18c"; |
|
349 |
$fa-var-paint-brush: "\f1fc"; |
|
350 |
$fa-var-paper-plane: "\f1d8"; |
|
351 |
$fa-var-paper-plane-o: "\f1d9"; |
|
352 |
$fa-var-paperclip: "\f0c6"; |
|
353 |
$fa-var-paragraph: "\f1dd"; |
|
354 |
$fa-var-paste: "\f0ea"; |
|
355 |
$fa-var-pause: "\f04c"; |
|
356 |
$fa-var-paw: "\f1b0"; |
|
357 |
$fa-var-paypal: "\f1ed"; |
|
358 |
$fa-var-pencil: "\f040"; |
|
359 |
$fa-var-pencil-square: "\f14b"; |
|
360 |
$fa-var-pencil-square-o: "\f044"; |
|
361 |
$fa-var-phone: "\f095"; |
|
362 |
$fa-var-phone-square: "\f098"; |
|
363 |
$fa-var-photo: "\f03e"; |
|
364 |
$fa-var-picture-o: "\f03e"; |
|
365 |
$fa-var-pie-chart: "\f200"; |
|
366 |
$fa-var-pied-piper: "\f1a7"; |
|
367 |
$fa-var-pied-piper-alt: "\f1a8"; |
|
368 |
$fa-var-pinterest: "\f0d2"; |
|
369 |
$fa-var-pinterest-square: "\f0d3"; |
|
370 |
$fa-var-plane: "\f072"; |
|
371 |
$fa-var-play: "\f04b"; |
|
372 |
$fa-var-play-circle: "\f144"; |
|
373 |
$fa-var-play-circle-o: "\f01d"; |
|
374 |
$fa-var-plug: "\f1e6"; |
|
375 |
$fa-var-plus: "\f067"; |
|
376 |
$fa-var-plus-circle: "\f055"; |
|
377 |
$fa-var-plus-square: "\f0fe"; |
|
378 |
$fa-var-plus-square-o: "\f196"; |
|
379 |
$fa-var-power-off: "\f011"; |
|
380 |
$fa-var-print: "\f02f"; |
|
381 |
$fa-var-puzzle-piece: "\f12e"; |
|
382 |
$fa-var-qq: "\f1d6"; |
|
383 |
$fa-var-qrcode: "\f029"; |
|
384 |
$fa-var-question: "\f128"; |
|
385 |
$fa-var-question-circle: "\f059"; |
|
386 |
$fa-var-quote-left: "\f10d"; |
|
387 |
$fa-var-quote-right: "\f10e"; |
|
388 |
$fa-var-ra: "\f1d0"; |
|
389 |
$fa-var-random: "\f074"; |
|
390 |
$fa-var-rebel: "\f1d0"; |
|
391 |
$fa-var-recycle: "\f1b8"; |
|
392 |
$fa-var-reddit: "\f1a1"; |
|
393 |
$fa-var-reddit-square: "\f1a2"; |
|
394 |
$fa-var-refresh: "\f021"; |
|
395 |
$fa-var-remove: "\f00d"; |
|
396 |
$fa-var-renren: "\f18b"; |
|
397 |
$fa-var-reorder: "\f0c9"; |
|
398 |
$fa-var-repeat: "\f01e"; |
|
399 |
$fa-var-reply: "\f112"; |
|
400 |
$fa-var-reply-all: "\f122"; |
|
401 |
$fa-var-retweet: "\f079"; |
|
402 |
$fa-var-rmb: "\f157"; |
|
403 |
$fa-var-road: "\f018"; |
|
404 |
$fa-var-rocket: "\f135"; |
|
405 |
$fa-var-rotate-left: "\f0e2"; |
|
406 |
$fa-var-rotate-right: "\f01e"; |
|
407 |
$fa-var-rouble: "\f158"; |
|
408 |
$fa-var-rss: "\f09e"; |
|
409 |
$fa-var-rss-square: "\f143"; |
|
410 |
$fa-var-rub: "\f158"; |
|
411 |
$fa-var-ruble: "\f158"; |
|
412 |
$fa-var-rupee: "\f156"; |
|
413 |
$fa-var-save: "\f0c7"; |
|
414 |
$fa-var-scissors: "\f0c4"; |
|
415 |
$fa-var-search: "\f002"; |
|
416 |
$fa-var-search-minus: "\f010"; |
|
417 |
$fa-var-search-plus: "\f00e"; |
|
418 |
$fa-var-send: "\f1d8"; |
|
419 |
$fa-var-send-o: "\f1d9"; |
|
420 |
$fa-var-share: "\f064"; |
|
421 |
$fa-var-share-alt: "\f1e0"; |
|
422 |
$fa-var-share-alt-square: "\f1e1"; |
|
423 |
$fa-var-share-square: "\f14d"; |
|
424 |
$fa-var-share-square-o: "\f045"; |
|
425 |
$fa-var-shekel: "\f20b"; |
|
426 |
$fa-var-sheqel: "\f20b"; |
|
427 |
$fa-var-shield: "\f132"; |
|
428 |
$fa-var-shopping-cart: "\f07a"; |
|
429 |
$fa-var-sign-in: "\f090"; |
|
430 |
$fa-var-sign-out: "\f08b"; |
|
431 |
$fa-var-signal: "\f012"; |
|
432 |
$fa-var-sitemap: "\f0e8"; |
|
433 |
$fa-var-skype: "\f17e"; |
|
434 |
$fa-var-slack: "\f198"; |
|
435 |
$fa-var-sliders: "\f1de"; |
|
436 |
$fa-var-slideshare: "\f1e7"; |
|
437 |
$fa-var-smile-o: "\f118"; |
|
438 |
$fa-var-soccer-ball-o: "\f1e3"; |
|
439 |
$fa-var-sort: "\f0dc"; |
|
440 |
$fa-var-sort-alpha-asc: "\f15d"; |
|
441 |
$fa-var-sort-alpha-desc: "\f15e"; |
|
442 |
$fa-var-sort-amount-asc: "\f160"; |
|
443 |
$fa-var-sort-amount-desc: "\f161"; |
|
444 |
$fa-var-sort-asc: "\f0de"; |
|
445 |
$fa-var-sort-desc: "\f0dd"; |
Also available in: Unified diff
added new version