Project

General

Profile

« Previous | Next » 

Revision 39920

added new version

View differences:

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";
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff