diff --git a/indexer.py b/indexer.py index 5eff96f..9f40fa9 100644 --- a/indexer.py +++ b/indexer.py @@ -61,15 +61,17 @@ class Indexer: self.es.indices.create(index=self.index_name) self.es.indices.close(index=self.index_name) - self.es.indices.put_settings(body='{"analysis": {"analyzer": {"path_analyser": {' - '"tokenizer": "path_tokenizer"}}, "tokenizer": {"path_tokenizer": {' - '"type": "path_hierarchy"}}}}', index=self.index_name) + self.es.indices.put_settings(body='{"analysis":{"tokenizer":{"path_tokenizer":{"type":"path_hierarchy"}}}}', index=self.index_name) + self.es.indices.put_settings(body='{"analysis":{"tokenizer":{"my_nGram_tokenizer":{"type":"nGram","min_gram":3,"max_gram":4}}}}') + self.es.indices.put_settings(body='{"analysis":{"analyzer":{"path_analyser":{"tokenizer":"path_tokenizer"}}}}') + self.es.indices.put_settings(body='{"analysis":{"analyzer":{"my_nGram":{"tokenizer":"my_nGram_tokenizer"}}}}') self.es.indices.put_mapping(body='{"properties": {' - '"name": {"type": "text", "analyzer": "path_analyser", "copy_to": "suggest-path"},' + '"path": {"type": "text", "analyzer": "path_analyser", "copy_to": "suggest-path"},' '"suggest-path": {"type": "completion", "analyzer": "keyword"},' '"mime": {"type": "keyword"},' - '"directory": {"type": "keyword"}' + '"directory": {"type": "keyword"},' + '"name": {"analyzer": "my_nGram", "type": "text"}' '}}', doc_type="file", index=self.index_name) self.es.indices.open(index=self.index_name) diff --git a/parsing.py b/parsing.py index f5c2569..9a1391d 100644 --- a/parsing.py +++ b/parsing.py @@ -127,10 +127,12 @@ class GenericFileParser(FileParser): file_stat = os.stat(full_path) path, name = os.path.split(full_path) + name, extension = os.path.splitext(name) info["size"] = file_stat.st_size info["path"] = path # todo save relative path info["name"] = name + info["extension"] = extension[1:] info["mtime"] = file_stat.st_mtime for calculator in self.checksum_calculators: @@ -264,13 +266,17 @@ class PictureFileParser(GenericFileParser): print("picture") - with open(full_path, "rb") as image_file: - with Image.open(image_file) as image: + try: + with open(full_path, "rb") as image_file: + with Image.open(image_file) as image: - info["mode"] = image.mode - info["format"] = image.format - info["width"] = image.width - info["height"] = image.height + info["mode"] = image.mode + info["format"] = image.format + info["width"] = image.width + info["height"] = image.height + except OSError as e: + print(e.strerror) + pass return info diff --git a/requirements.txt b/requirements.txt index 705c4c8..3d0e91d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,10 +4,4 @@ flask_bcrypt elasticsearch python-magic requests -apscheduler -ffmpeg-python -fonttools -chardet -exifread -humanfriendly -Pillow \ No newline at end of file +apscheduler \ No newline at end of file diff --git a/run.py b/run.py index 4d8bed5..fddad21 100644 --- a/run.py +++ b/run.py @@ -6,6 +6,8 @@ import json import os import humanfriendly from search import Search +from PIL import Image +from io import BytesIO app = Flask(__name__) app.secret_key = "A very secret key" @@ -15,6 +17,8 @@ tm = TaskManager(storage) search = Search("changeme") + + def get_dir_size(path): size = 0 @@ -45,7 +49,8 @@ def file(doc_id): doc = search.get_doc(doc_id)["_source"] directory = storage.dirs()[doc["directory"]] - full_path = os.path.join(directory.path, doc["path"], doc["name"]) + extension = "" if doc["extension"] is None or doc["extension"] == "" else "." + doc["extension"] + full_path = os.path.join(directory.path, doc["path"], doc["name"] + extension) return send_file(full_path, mimetype=doc["mime"], as_attachment=True, attachment_filename=doc["name"]) @@ -55,32 +60,53 @@ def download(doc_id): doc = search.get_doc(doc_id)["_source"] directory = storage.dirs()[doc["directory"]] - - full_path = os.path.join(directory.path, doc["path"], doc["name"]) + extension = "" if doc["extension"] is None or doc["extension"] == "" else "." + doc["extension"] + full_path = os.path.join(directory.path, doc["path"], doc["name"] + extension) return send_file(full_path) -@app.route("/thumb//") -def thumb(dir_id, doc_id): +@app.route("/thumb/") +def thumb(doc_id): - if dir_id in storage.dirs(): + doc = search.get_doc(doc_id) - return app.send_static_file(os.path.join("thumbnails/", str(dir_id), doc_id)) + if doc is not None: + + tn_path = os.path.join("static/thumbnails/", str(doc["_source"]["directory"]), doc_id) + print(tn_path) + if os.path.isfile(tn_path): + return send_file(tn_path) + else: + print("tn not found") + default_thumbnail = BytesIO() + Image.new("RGB", (255, 128), (0, 0, 0)).save(default_thumbnail, "JPEG") + default_thumbnail.seek(0) + return send_file(default_thumbnail, "image/jpeg") else: - abort(404) + print("doc is none") + default_thumbnail = BytesIO() + Image.new("RGB", (255, 128), (0, 0, 0)).save(default_thumbnail, "JPEG") + default_thumbnail.seek(0) + return send_file(default_thumbnail, "image/jpeg") @app.route("/") def search_page(): return render_template("search.html") +@app.route("/list") +def search_liste_page(): + return render_template("searchList.html") + @app.route("/search") def search_route(): - page = search.search() + query = request.args.get("q") + query = "" if query is None else query + page = search.search(query) return json.dumps(page) diff --git a/search.py b/search.py index 98065d9..c33a209 100644 --- a/search.py +++ b/search.py @@ -1,8 +1,9 @@ -import elasticsearch -from elasticsearch import helpers -import requests import json +import elasticsearch +import requests +from elasticsearch import helpers + class Search: @@ -50,9 +51,34 @@ class Search: except: return 0 - def search(self): - page = self.es.search(body={"query": {"term": {"directory": 1}}, "size": 40}, - index=self.index_name, scroll="3m") + def search(self, query): + + print(query) + + page = self.es.search(body={"query": + {"multi_match": { + "query": query, + "fields": ["name", "content"] + }}, + "sort": [ + "_score" + ], + "highlight": { + "fields": { + "content": {"pre_tags": [""], "post_tags": [""]}, + "name": {"pre_tags": [""], "post_tags": [""]}, + } + }, + "suggest": { + "path": { + "prefix": query, + "completion": { + "field": "suggest-path", + "skip_duplicates": True + } + } + }, + "size": 40}, index=self.index_name, scroll="3m") return page @@ -64,4 +90,7 @@ class Search: def get_doc(self, doc_id): - return self.es.get(index=self.index_name, id=doc_id, doc_type="file") + try: + return self.es.get(index=self.index_name, id=doc_id, doc_type="file") + except elasticsearch.exceptions.NotFoundError: + return None diff --git a/spec/FileParser_spec.py b/spec/FileParser_spec.py index fa9763f..1c94358 100644 --- a/spec/FileParser_spec.py +++ b/spec/FileParser_spec.py @@ -29,7 +29,12 @@ class GenericFileParserTest(TestCase): def test_parse_name(self): result = self.parser.parse("test_parse.txt") - self.assertEqual(result["name"], "test_parse.txt") + self.assertEqual(result["name"], "test_parse") + + def test_parse_ext(self): + result = self.parser.parse("test_parse.txt") + + self.assertEqual(result["extension"], "txt") def test_parse_md5(self): result = self.parser.parse("test_parse.txt") diff --git a/spec/test_files/Sound sample licence b/spec/test_files/Sound sample licence new file mode 100644 index 0000000..e69de29 diff --git a/spec/test_files/Sound sample licence.txt b/spec/test_files/Sound sample licence.txt new file mode 100644 index 0000000..41f0e0e --- /dev/null +++ b/spec/test_files/Sound sample licence.txt @@ -0,0 +1,2 @@ +cat1.wav https://archive.org/details/BoulangerColette +vid1.mp4 https://archive.org/details/electricsheep-flock-244-32500-1/ \ No newline at end of file diff --git a/spec/test_files/fix.csv b/spec/test_files/fix.csv new file mode 100644 index 0000000..8aba93b --- /dev/null +++ b/spec/test_files/fix.csv @@ -0,0 +1,242 @@ +rosbagTimestamp,header,seq,stamp,secs,nsecs,frame_id,status,status,service,latitude,longitude,altitude,position_covariance,position_covariance_type +1497155692699200530,,7,,1491157579,160773992,/imu,,0,1,39.5369442,-122.3383189,70.212,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155692944880129,,8,,1491157579,405828952,/imu,,0,1,39.5369442,-122.3383189,70.214,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155693205080145,,9,,1491157579,662808895,/imu,,0,1,39.5369442,-122.338319,70.217,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155693448665182,,10,,1491157579,910070896,/imu,,0,1,39.5369442,-122.338319,70.22,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155693701357896,,11,,1491157580,160749912,/imu,,0,1,39.5369442,-122.338319,70.224,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155693948406723,,12,,1491157580,410056114,/imu,,0,1,39.5369443,-122.3383191,70.222,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155694199249441,,13,,1491157580,660702943,/imu,,0,1,39.5369443,-122.3383191,70.224,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155694450031554,,14,,1491157580,910502910,/imu,,0,1,39.5369442,-122.3383192,70.228,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155694698414318,,15,,1491157581,159912109,/imu,,0,1,39.5369442,-122.3383192,70.232,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155694950937611,,16,,1491157581,410650968,/imu,,0,1,39.5369442,-122.3383192,70.234,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155695200456558,,17,,1491157581,661637067,/imu,,0,1,39.5369442,-122.3383192,70.236,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155695449647452,,18,,1491157581,910274028,/imu,,0,1,39.5369442,-122.3383193,70.241,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155695696654172,,19,,1491157582,156757116,/imu,,0,1,39.5369442,-122.3383193,70.246,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155695950408543,,20,,1491157582,411731958,/imu,,0,1,39.5369441,-122.3383193,70.248,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155696198959694,,21,,1491157582,660002946,/imu,,0,1,39.5369441,-122.3383193,70.253,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155696450044493,,22,,1491157582,910267114,/imu,,0,1,39.5369441,-122.3383193,70.26,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155696698862343,,23,,1491157583,159172058,/imu,,0,1,39.536944,-122.3383193,70.264,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155696949976702,,24,,1491157583,411098003,/imu,,0,1,39.536944,-122.3383193,70.265,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155697196047935,,25,,1491157583,657394886,/imu,,0,1,39.536944,-122.3383193,70.268,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155697449888530,,26,,1491157583,911263942,/imu,,0,1,39.536944,-122.3383193,70.273,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155697702363698,,27,,1491157584,160381078,/imu,,0,1,39.536944,-122.3383193,70.275,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155697951978681,,28,,1491157584,412154912,/imu,,0,1,39.536944,-122.3383193,70.277,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155698198757549,,29,,1491157584,660244941,/imu,,0,1,39.536944,-122.3383193,70.282,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155698449013208,,30,,1491157584,907248020,/imu,,0,1,39.536944,-122.3383193,70.283,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155698698816621,,31,,1491157585,160113096,/imu,,0,1,39.536944,-122.3383193,70.286,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155698951458599,,32,,1491157585,410294055,/imu,,0,1,39.536944,-122.3383193,70.29,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155699201636690,,33,,1491157585,660209894,/imu,,0,1,39.536944,-122.3383193,70.292,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155699450118119,,34,,1491157585,910845041,/imu,,0,1,39.536944,-122.3383193,70.29,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155699701400647,,35,,1491157586,162636995,/imu,,0,1,39.5369439,-122.3383193,70.293,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155699944604249,,36,,1491157586,405736923,/imu,,0,1,39.5369439,-122.3383193,70.297,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155700198733961,,37,,1491157586,660314083,/imu,,0,1,39.5369439,-122.3383193,70.3,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155700448780955,,38,,1491157586,910307884,/imu,,0,1,39.5369439,-122.3383193,70.299,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155700699622454,,39,,1491157587,160471916,/imu,,0,1,39.5369439,-122.3383193,70.302,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155700948941462,,40,,1491157587,410373926,/imu,,0,1,39.5369439,-122.3383192,70.303,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155701194175133,,41,,1491157587,655395030,/imu,,0,1,39.5369439,-122.338319,70.311,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155701450504697,,42,,1491157587,911648988,/imu,,0,1,39.5369439,-122.3383188,70.307,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155701698065310,,43,,1491157588,159014940,/imu,,0,1,39.5369439,-122.3383186,70.306,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155701949455364,,44,,1491157588,410485029,/imu,,0,1,39.5369439,-122.3383184,70.303,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155702199158214,,45,,1491157588,660476922,/imu,,0,1,39.5369438,-122.3383179,70.305,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155702448983975,,46,,1491157588,910530090,/imu,,0,1,39.5369438,-122.3383174,70.301,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155702695878475,,47,,1491157589,155520915,/imu,,0,1,39.5369439,-122.3383166,70.299,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155702949338529,,48,,1491157589,410665035,/imu,,0,1,39.536944,-122.3383156,70.302,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155703199315450,,49,,1491157589,659708023,/imu,,0,1,39.5369441,-122.338314,70.291,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155703449223652,,50,,1491157589,910044908,/imu,,0,1,39.5369443,-122.3383119,70.296,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155703699304461,,51,,1491157590,160664081,/imu,,0,1,39.5369446,-122.3383092,70.304,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155703947999966,,52,,1491157590,408267974,/imu,,0,1,39.536945,-122.3383059,70.307,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155704199853653,,53,,1491157590,659373998,/imu,,0,1,39.5369455,-122.338302,70.313,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155704449923828,,54,,1491157590,910463094,/imu,,0,1,39.5369461,-122.3382978,70.319,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155704699914812,,55,,1491157591,160336017,/imu,,0,1,39.5369469,-122.3382933,70.331,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155704949678326,,56,,1491157591,410551071,/imu,,0,1,39.5369476,-122.3382886,70.342,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155705198275100,,57,,1491157591,659427881,/imu,,0,1,39.5369484,-122.3382839,70.346,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155705444401125,,58,,1491157591,905611038,/imu,,0,1,39.5369493,-122.338279,70.36,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155705697950603,,59,,1491157592,159246921,/imu,,0,1,39.5369501,-122.3382739,70.364,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155705947898569,,60,,1491157592,409276008,/imu,,0,1,39.5369509,-122.3382685,70.373,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155706201433941,,61,,1491157592,662067890,/imu,,0,1,39.5369517,-122.338263,70.384,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155706448094672,,62,,1491157592,909292936,/imu,,0,1,39.5369524,-122.3382572,70.394,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155706697164634,,63,,1491157593,158289909,/imu,,0,1,39.5369529,-122.3382512,70.409,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155706949400478,,64,,1491157593,410562038,/imu,,0,1,39.5369532,-122.3382449,70.431,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155707197712675,,65,,1491157593,659317970,/imu,,0,1,39.5369534,-122.3382385,70.439,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155707449055767,,66,,1491157593,909921884,/imu,,0,1,39.5369533,-122.3382317,70.451,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155707699543833,,67,,1491157594,161025047,/imu,,0,1,39.5369529,-122.3382246,70.466,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155707961802428,,68,,1491157594,423089027,/imu,,0,1,39.5369518,-122.338217,70.474,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155708194211324,,69,,1491157594,654262065,/imu,,0,1,39.5369504,-122.3382094,70.483,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155708448727185,,70,,1491157594,910130023,/imu,,0,1,39.5369486,-122.3382016,70.496,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155708697043657,,71,,1491157595,158277034,/imu,,0,1,39.5369461,-122.3381937,70.499,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155708948969008,,72,,1491157595,409624099,/imu,,0,1,39.5369429,-122.3381858,70.507,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155709197035651,,73,,1491157595,658170938,/imu,,0,1,39.536939,-122.3381781,70.515,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155709447997402,,74,,1491157595,908169031,/imu,,0,1,39.5369342,-122.3381705,70.519,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155709697805161,,75,,1491157596,158976078,/imu,,0,1,39.5369286,-122.3381634,70.518,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155709946710876,,76,,1491157596,408154964,/imu,,0,1,39.5369223,-122.3381568,70.513,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155710198099025,,77,,1491157596,659354925,/imu,,0,1,39.5369152,-122.3381508,70.509,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155710461332047,,78,,1491157596,908322095,/imu,,0,1,39.5369073,-122.3381455,70.5,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155710696766355,,79,,1491157597,157232999,/imu,,0,1,39.5368988,-122.3381409,70.5,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155710945343303,,80,,1491157597,405055046,/imu,,0,1,39.5368897,-122.338137,70.488,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155711195932659,,81,,1491157597,657205104,/imu,,0,1,39.5368799,-122.3381338,70.478,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155711449236169,,82,,1491157597,910403966,/imu,,0,1,39.5368697,-122.3381311,70.457,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155711698383488,,83,,1491157598,159436941,/imu,,0,1,39.536859,-122.3381288,70.442,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155711949212672,,84,,1491157598,409419059,/imu,,0,1,39.5368479,-122.338127,70.425,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155712198051260,,85,,1491157598,658176898,/imu,,0,1,39.5368365,-122.3381256,70.399,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155712447853905,,86,,1491157598,909332036,/imu,,0,1,39.5368248,-122.3381244,70.371,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155712696731825,,87,,1491157599,157332897,/imu,,0,1,39.5368128,-122.3381235,70.343,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155712946995774,,88,,1491157599,408145904,/imu,,0,1,39.5368005,-122.3381226,70.311,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155713198037946,,89,,1491157599,659293889,/imu,,0,1,39.536788,-122.3381218,70.282,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155713449059897,,90,,1491157599,908636093,/imu,,0,1,39.5367753,-122.3381209,70.252,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155713696473516,,91,,1491157600,155035018,/imu,,0,1,39.5367625,-122.33812,70.214,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155713947725083,,92,,1491157600,409291982,/imu,,0,1,39.5367494,-122.3381191,70.186,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155714198662068,,93,,1491157600,659518003,/imu,,0,1,39.5367362,-122.338118,70.148,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155714449562923,,94,,1491157600,910015106,/imu,,0,1,39.536723,-122.3381169,70.11,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155714697863656,,95,,1491157601,157715082,/imu,,0,1,39.5367096,-122.3381157,70.072,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155714948745712,,96,,1491157601,408838033,/imu,,0,1,39.5366958,-122.3381144,70.027,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155715195767761,,97,,1491157601,657129049,/imu,,0,1,39.536682,-122.3381131,69.99,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155715447829133,,98,,1491157601,908929109,/imu,,0,1,39.5366681,-122.3381119,69.978,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155715695767183,,99,,1491157602,157166957,/imu,,0,1,39.5366541,-122.3381105,69.96,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155715946697363,,100,,1491157602,408101081,/imu,,0,1,39.5366399,-122.3381089,69.927,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155716202546429,,101,,1491157602,663192987,/imu,,0,1,39.5366256,-122.3381071,69.874,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155716443188249,,102,,1491157602,903445005,/imu,,0,1,39.5366112,-122.3381053,69.828,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155716700709390,,103,,1491157603,159765958,/imu,,0,1,39.5365969,-122.3381034,69.787,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155716947885611,,104,,1491157603,408421993,/imu,,0,1,39.5365826,-122.3381016,69.76,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155717198205716,,105,,1491157603,659338951,/imu,,0,1,39.5365682,-122.3380997,69.734,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155717449897379,,106,,1491157603,910563945,/imu,,0,1,39.5365539,-122.3380977,69.697,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155717699204075,,107,,1491157604,160567998,/imu,,0,1,39.5365395,-122.3380958,69.663,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155717948976167,,108,,1491157604,410216093,/imu,,0,1,39.5365252,-122.3380938,69.632,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155718199116389,,109,,1491157604,660048007,/imu,,0,1,39.5365109,-122.3380919,69.597,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155718448483108,,110,,1491157604,909468889,/imu,,0,1,39.5364967,-122.3380899,69.567,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155718696669528,,111,,1491157605,158133029,/imu,,0,1,39.5364825,-122.338088,69.529,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155718949947850,,112,,1491157605,409681081,/imu,,0,1,39.5364684,-122.338086,69.502,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155719194649958,,113,,1491157605,654079914,/imu,,0,1,39.5364544,-122.3380841,69.475,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155719447786542,,114,,1491157605,909197092,/imu,,0,1,39.5364404,-122.3380821,69.443,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155719698886630,,115,,1491157606,159821987,/imu,,0,1,39.5364264,-122.3380801,69.418,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155719949318966,,116,,1491157606,410510063,/imu,,0,1,39.5364126,-122.3380781,69.391,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155720199181745,,117,,1491157606,660552978,/imu,,0,1,39.5363988,-122.3380761,69.361,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155720450661321,,118,,1491157606,910518884,/imu,,0,1,39.5363849,-122.3380741,69.335,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155720697685441,,119,,1491157607,157399892,/imu,,0,1,39.5363712,-122.3380721,69.301,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155720949137584,,120,,1491157607,410551071,/imu,,0,1,39.5363575,-122.33807,69.259,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155721196739895,,121,,1491157607,658086061,/imu,,0,1,39.5363438,-122.3380679,69.223,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155721450502865,,122,,1491157607,911902904,/imu,,0,1,39.5363301,-122.3380659,69.182,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155721698386959,,123,,1491157608,159539937,/imu,,0,1,39.5363164,-122.3380638,69.148,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155721948297985,,124,,1491157608,406718969,/imu,,0,1,39.5363027,-122.3380617,69.113,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155722198180314,,125,,1491157608,659586906,/imu,,0,1,39.5362891,-122.3380596,69.072,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155722455147462,,126,,1491157608,909884929,/imu,,0,1,39.5362755,-122.3380574,69.035,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155722696254636,,127,,1491157609,157794952,/imu,,0,1,39.5362621,-122.3380553,69.001,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155722948033178,,128,,1491157609,409248113,/imu,,0,1,39.5362489,-122.3380532,68.973,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155723200398236,,129,,1491157609,660497903,/imu,,0,1,39.5362359,-122.3380512,68.944,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155723449069302,,130,,1491157609,910171985,/imu,,0,1,39.5362232,-122.3380492,68.918,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155723699161031,,131,,1491157610,160501003,/imu,,0,1,39.5362108,-122.3380472,68.891,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155723949209172,,132,,1491157610,410502910,/imu,,0,1,39.5361988,-122.3380453,68.867,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155724199154816,,133,,1491157610,660494089,/imu,,0,1,39.5361869,-122.3380434,68.841,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155724447510129,,134,,1491157610,908545970,/imu,,0,1,39.5361751,-122.3380415,68.821,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155724694232025,,135,,1491157611,155545949,/imu,,0,1,39.5361635,-122.3380396,68.796,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155724948094596,,136,,1491157611,407845973,/imu,,0,1,39.5361521,-122.3380378,68.766,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155725197259839,,137,,1491157611,658011913,/imu,,0,1,39.5361408,-122.3380359,68.743,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155725449143011,,138,,1491157611,910495042,/imu,,0,1,39.5361297,-122.3380341,68.716,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155725702664448,,139,,1491157612,160501003,/imu,,0,1,39.5361187,-122.3380324,68.693,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155725949242269,,140,,1491157612,410589933,/imu,,0,1,39.536108,-122.3380306,68.661,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155726201790455,,141,,1491157612,662151098,/imu,,0,1,39.5360974,-122.3380289,68.632,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155726449120790,,142,,1491157612,910515069,/imu,,0,1,39.536087,-122.3380272,68.604,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155726696834146,,143,,1491157613,157763004,/imu,,0,1,39.5360769,-122.3380256,68.571,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155726949004947,,144,,1491157613,410432100,/imu,,0,1,39.536067,-122.338024,68.546,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155727195714645,,145,,1491157613,656830072,/imu,,0,1,39.5360573,-122.3380225,68.516,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155727441578678,,146,,1491157613,903002977,/imu,,0,1,39.5360477,-122.338021,68.486,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155727696844359,,147,,1491157614,157660961,/imu,,0,1,39.5360383,-122.3380195,68.457,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155727951494080,,148,,1491157614,409310102,/imu,,0,1,39.5360291,-122.3380181,68.428,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155728201405196,,149,,1491157614,659255981,/imu,,0,1,39.5360201,-122.3380167,68.388,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155728447835451,,150,,1491157614,908274888,/imu,,0,1,39.5360113,-122.3380154,68.372,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155728702189170,,151,,1491157615,160244941,/imu,,0,1,39.5360029,-122.3380143,68.344,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155728946960581,,152,,1491157615,408008098,/imu,,0,1,39.5359949,-122.3380134,68.332,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155729196049151,,153,,1491157615,657421112,/imu,,0,1,39.5359874,-122.3380125,68.316,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155729449922543,,154,,1491157615,910732984,/imu,,0,1,39.5359803,-122.3380119,68.301,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155729698325415,,155,,1491157616,159256935,/imu,,0,1,39.5359737,-122.3380113,68.281,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155729948856084,,156,,1491157616,410342931,/imu,,0,1,39.5359676,-122.338011,68.269,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155730194486192,,157,,1491157616,655848026,/imu,,0,1,39.5359621,-122.3380107,68.26,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155730446842166,,158,,1491157616,907995939,/imu,,0,1,39.5359571,-122.3380106,68.247,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155730697257945,,159,,1491157617,157727956,/imu,,0,1,39.5359526,-122.3380106,68.237,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155730952850137,,160,,1491157617,411092042,/imu,,0,1,39.5359487,-122.3380106,68.225,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155731196498380,,161,,1491157617,657931089,/imu,,0,1,39.5359453,-122.3380106,68.225,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155731447867577,,162,,1491157617,908143997,/imu,,0,1,39.5359424,-122.3380106,68.216,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155731693388263,,163,,1491157618,154478073,/imu,,0,1,39.5359401,-122.3380106,68.208,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155731947994725,,164,,1491157618,409207105,/imu,,0,1,39.5359382,-122.3380107,68.2,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155732198637774,,165,,1491157618,657967090,/imu,,0,1,39.5359368,-122.3380108,68.19,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155732447386476,,166,,1491157618,908008098,/imu,,0,1,39.5359359,-122.3380108,68.177,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155732697234084,,167,,1491157619,157946109,/imu,,0,1,39.5359355,-122.3380108,68.172,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155732944366471,,168,,1491157619,402901887,/imu,,0,1,39.5359356,-122.3380108,68.166,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155733198443881,,169,,1491157619,659679889,/imu,,0,1,39.5359356,-122.3380108,68.163,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155733448418093,,170,,1491157619,909205913,/imu,,0,1,39.5359356,-122.3380107,68.159,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155733698090175,,171,,1491157620,158154964,/imu,,0,1,39.5359356,-122.3380107,68.157,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155733952346150,,172,,1491157620,410418987,/imu,,0,1,39.5359357,-122.3380107,68.155,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155734198171923,,173,,1491157620,659285068,/imu,,0,1,39.5359357,-122.3380107,68.153,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155734443804338,,174,,1491157620,904732942,/imu,,0,1,39.5359357,-122.3380107,68.153,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155734697406375,,175,,1491157621,157968997,/imu,,0,1,39.5359358,-122.3380107,68.152,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155734947537291,,176,,1491157621,408992052,/imu,,0,1,39.5359358,-122.3380107,68.154,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155735196415897,,177,,1491157621,657907009,/imu,,0,1,39.5359359,-122.3380107,68.156,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155735447672921,,178,,1491157621,909153938,/imu,,0,1,39.5359359,-122.3380107,68.156,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155735691811886,,179,,1491157622,152919054,/imu,,0,1,39.5359359,-122.3380107,68.158,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155735947751414,,180,,1491157622,409225940,/imu,,0,1,39.535936,-122.3380107,68.157,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155736199884738,,181,,1491157622,661108970,/imu,,0,1,39.5359361,-122.3380107,68.158,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155736447374439,,182,,1491157622,909032106,/imu,,0,1,39.5359361,-122.3380107,68.157,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155736701032643,,183,,1491157623,159367084,/imu,,0,1,39.5359362,-122.3380107,68.156,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155736952718626,,184,,1491157623,414052963,/imu,,0,1,39.5359362,-122.3380107,68.156,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155737194257429,,185,,1491157623,655292987,/imu,,0,1,39.5359362,-122.3380107,68.158,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155737447683346,,186,,1491157623,909085035,/imu,,0,1,39.5359363,-122.3380107,68.162,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155737696680498,,187,,1491157624,157902002,/imu,,0,1,39.5359363,-122.3380106,68.164,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155737948464321,,188,,1491157624,409212112,/imu,,0,1,39.5359363,-122.3380106,68.166,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155738199651371,,189,,1491157624,659838914,/imu,,0,1,39.5359363,-122.3380106,68.173,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155738444798391,,190,,1491157624,906227111,/imu,,0,1,39.5359363,-122.3380106,68.176,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155738696943204,,191,,1491157625,157941102,/imu,,0,1,39.5359364,-122.3380106,68.181,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155738948926610,,192,,1491157625,409712076,/imu,,0,1,39.5359364,-122.3380106,68.188,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155739195596695,,193,,1491157625,656975030,/imu,,0,1,39.5359364,-122.3380106,68.195,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155739447778936,,194,,1491157625,907885074,/imu,,0,1,39.5359364,-122.3380106,68.198,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155739701050572,,195,,1491157626,158618927,/imu,,0,1,39.5359365,-122.3380106,68.207,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155739941907268,,196,,1491157626,402844905,/imu,,0,1,39.5359365,-122.3380107,68.212,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155740204060764,,197,,1491157626,657048940,/imu,,0,1,39.5359366,-122.3380107,68.218,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155740445747036,,198,,1491157626,907058954,/imu,,0,1,39.5359366,-122.3380107,68.224,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155740695534180,,199,,1491157627,157113075,/imu,,0,1,39.5359366,-122.3380108,68.233,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155740950635644,,200,,1491157627,409611940,/imu,,0,1,39.5359366,-122.3380108,68.238,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155741195706305,,201,,1491157627,656493902,/imu,,0,1,39.5359367,-122.3380108,68.247,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155741448978653,,202,,1491157627,910146951,/imu,,0,1,39.5359367,-122.3380108,68.256,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155741697159340,,203,,1491157628,157885074,/imu,,0,1,39.5359367,-122.3380108,68.262,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155741945685140,,204,,1491157628,406941890,/imu,,0,1,39.5359367,-122.3380108,68.272,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155742198062351,,205,,1491157628,659518003,/imu,,0,1,39.5359367,-122.3380108,68.279,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155742447214777,,206,,1491157628,907263994,/imu,,0,1,39.5359367,-122.3380108,68.285,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155742692417228,,207,,1491157629,152875900,/imu,,0,1,39.5359367,-122.3380108,68.296,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155742945377934,,208,,1491157629,406910896,/imu,,0,1,39.5359367,-122.3380108,68.3,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155743196856056,,209,,1491157629,658334016,/imu,,0,1,39.5359367,-122.3380108,68.307,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155743447716525,,210,,1491157629,909028053,/imu,,0,1,39.5359367,-122.3380108,68.317,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155743695461308,,211,,1491157630,156981945,/imu,,0,1,39.5359367,-122.3380108,68.322,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155743945862817,,212,,1491157630,407001018,/imu,,0,1,39.5359366,-122.3380108,68.33,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155744200256486,,213,,1491157630,657071113,/imu,,0,1,39.5359366,-122.3380108,68.338,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155744446631301,,214,,1491157630,906867980,/imu,,0,1,39.5359366,-122.3380108,68.345,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155744697576850,,215,,1491157631,156963109,/imu,,0,1,39.5359365,-122.3380108,68.352,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155744949039484,,216,,1491157631,410414934,/imu,,0,1,39.5359365,-122.3380108,68.359,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155745197472728,,217,,1491157631,658984899,/imu,,0,1,39.5359364,-122.3380108,68.367,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155745445158027,,218,,1491157631,904109001,/imu,,0,1,39.5359364,-122.3380108,68.38,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155745695522866,,219,,1491157632,157011032,/imu,,0,1,39.5359364,-122.3380108,68.393,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155745952775530,,220,,1491157632,407785892,/imu,,0,1,39.5359363,-122.3380108,68.402,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155746199169863,,221,,1491157632,660240888,/imu,,0,1,39.5359363,-122.3380108,68.412,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155746445926295,,222,,1491157632,907088994,/imu,,0,1,39.5359362,-122.3380108,68.424,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155746696670470,,223,,1491157633,157870054,/imu,,0,1,39.5359361,-122.3380109,68.436,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155746946947692,,224,,1491157633,407990932,/imu,,0,1,39.5359361,-122.3380109,68.449,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155747195884782,,225,,1491157633,657109022,/imu,,0,1,39.535936,-122.3380109,68.459,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155747450513696,,226,,1491157633,909704923,/imu,,0,1,39.535936,-122.3380109,68.47,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155747696332549,,227,,1491157634,157325983,/imu,,0,1,39.5359359,-122.3380109,68.477,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155747945577446,,228,,1491157634,407183885,/imu,,0,1,39.5359358,-122.3380109,68.485,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155748193006721,,229,,1491157634,653882026,/imu,,0,1,39.5359357,-122.3380109,68.491,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155748448162210,,230,,1491157634,909323930,/imu,,0,1,39.5359357,-122.3380109,68.502,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155748696751922,,231,,1491157635,157892942,/imu,,0,1,39.5359357,-122.338011,68.511,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155748947535713,,232,,1491157635,408888101,/imu,,0,1,39.5359356,-122.3380109,68.517,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155749201393009,,233,,1491157635,662369012,/imu,,0,1,39.5359355,-122.338011,68.527,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155749445983993,,234,,1491157635,907316923,/imu,,0,1,39.5359355,-122.338011,68.536,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155749699176870,,235,,1491157636,159857988,/imu,,0,1,39.5359354,-122.338011,68.547,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155749946452996,,236,,1491157636,407423973,/imu,,0,1,39.5359354,-122.338011,68.561,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155750197486026,,237,,1491157636,657428979,/imu,,0,1,39.5359353,-122.338011,68.573,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155750446607040,,238,,1491157636,907505035,/imu,,0,1,39.5359353,-122.338011,68.585,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155750696678877,,239,,1491157637,158029079,/imu,,0,1,39.5359352,-122.338011,68.598,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155750943246128,,240,,1491157637,404588937,/imu,,0,1,39.5359351,-122.338011,68.614,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155751198753064,,241,,1491157637,660267114,/imu,,0,1,39.5359351,-122.338011,68.627,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155751448949737,,242,,1491157637,910247087,/imu,,0,1,39.535935,-122.338011,68.637,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155751710305542,,243,,1491157638,158471107,/imu,,0,1,39.535935,-122.338011,68.642,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155751949756491,,244,,1491157638,410789012,/imu,,0,1,39.5359349,-122.3380111,68.654,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155752202861277,,245,,1491157638,661005973,/imu,,0,1,39.5359348,-122.338011,68.664,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155752449210439,,246,,1491157638,910099983,/imu,,0,1,39.5359347,-122.3380111,68.672,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 +1497155752699561822,,247,,1491157639,161111116,/imu,,0,1,39.5359347,-122.338011,68.678,"[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]",0 diff --git a/spec/test_files/ls b/spec/test_files/ls new file mode 100755 index 0000000..a7a0cf9 Binary files /dev/null and b/spec/test_files/ls differ diff --git a/spec/test_files/vid2.mov b/spec/test_files/vid2.mov new file mode 100644 index 0000000..8458070 Binary files /dev/null and b/spec/test_files/vid2.mov differ diff --git a/spec/test_files/vid3.mp4 b/spec/test_files/vid3.mp4 new file mode 100644 index 0000000..2abf819 Binary files /dev/null and b/spec/test_files/vid3.mp4 differ diff --git a/spec/test_files/vid4.ogv b/spec/test_files/vid4.ogv new file mode 100644 index 0000000..2c428a9 Binary files /dev/null and b/spec/test_files/vid4.ogv differ diff --git a/static/css/fa-brands.css b/static/css/fa-brands.css new file mode 100644 index 0000000..da1df6a --- /dev/null +++ b/static/css/fa-brands.css @@ -0,0 +1,13 @@ +/*! + * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: normal; + src: url("../webfonts/fa-brands-400.eot"); + src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } + +.fab { + font-family: 'Font Awesome 5 Brands'; } diff --git a/static/css/fa-regular.css b/static/css/fa-regular.css new file mode 100644 index 0000000..86f779e --- /dev/null +++ b/static/css/fa-regular.css @@ -0,0 +1,14 @@ +/*! + * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + src: url("../webfonts/fa-regular-400.eot"); + src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } + +.far { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } diff --git a/static/css/fa-solid.css b/static/css/fa-solid.css new file mode 100644 index 0000000..769272a --- /dev/null +++ b/static/css/fa-solid.css @@ -0,0 +1,15 @@ +/*! + * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + src: url("../webfonts/fa-solid-900.eot"); + src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } + +.fa, +.fas { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; } diff --git a/static/css/fontawesome.css b/static/css/fontawesome.css new file mode 100644 index 0000000..c92667e --- /dev/null +++ b/static/css/fontawesome.css @@ -0,0 +1,2696 @@ +/*! + * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-card:before { + content: "\f2bb"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-arrow-alt-circle-down:before { + content: "\f358"; } + +.fa-arrow-alt-circle-left:before { + content: "\f359"; } + +.fa-arrow-alt-circle-right:before { + content: "\f35a"; } + +.fa-arrow-alt-circle-up:before { + content: "\f35b"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-arrows-alt-h:before { + content: "\f337"; } + +.fa-arrows-alt-v:before { + content: "\f338"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-band-aid:before { + content: "\f462"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-baseball-ball:before { + content: "\f433"; } + +.fa-basketball-ball:before { + content: "\f434"; } + +.fa-bath:before { + content: "\f2cd"; } + +.fa-battery-empty:before { + content: "\f244"; } + +.fa-battery-full:before { + content: "\f240"; } + +.fa-battery-half:before { + content: "\f242"; } + +.fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-bed:before { + content: "\f236"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-bolt:before { + content: "\f0e7"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-bowling-ball:before { + content: "\f436"; } + +.fa-box:before { + content: "\f466"; } + +.fa-boxes:before { + content: "\f468"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-calendar:before { + content: "\f133"; } + +.fa-calendar-alt:before { + content: "\f073"; } + +.fa-calendar-check:before { + content: "\f274"; } + +.fa-calendar-minus:before { + content: "\f272"; } + +.fa-calendar-plus:before { + content: "\f271"; } + +.fa-calendar-times:before { + content: "\f273"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-car:before { + content: "\f1b9"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-caret-square-down:before { + content: "\f150"; } + +.fa-caret-square-left:before { + content: "\f191"; } + +.fa-caret-square-right:before { + content: "\f152"; } + +.fa-caret-square-up:before { + content: "\f151"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-chart-area:before { + content: "\f1fe"; } + +.fa-chart-bar:before { + content: "\f080"; } + +.fa-chart-line:before { + content: "\f201"; } + +.fa-chart-pie:before { + content: "\f200"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-chess:before { + content: "\f439"; } + +.fa-chess-bishop:before { + content: "\f43a"; } + +.fa-chess-board:before { + content: "\f43c"; } + +.fa-chess-king:before { + content: "\f43f"; } + +.fa-chess-knight:before { + content: "\f441"; } + +.fa-chess-pawn:before { + content: "\f443"; } + +.fa-chess-queen:before { + content: "\f445"; } + +.fa-chess-rook:before { + content: "\f447"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-circle-notch:before { + content: "\f1ce"; } + +.fa-clipboard:before { + content: "\f328"; } + +.fa-clipboard-check:before { + content: "\f46c"; } + +.fa-clipboard-list:before { + content: "\f46d"; } + +.fa-clock:before { + content: "\f017"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-closed-captioning:before { + content: "\f20a"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-cloud-download-alt:before { + content: "\f381"; } + +.fa-cloud-upload-alt:before { + content: "\f382"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-code:before { + content: "\f121"; } + +.fa-code-branch:before { + content: "\f126"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cog:before { + content: "\f013"; } + +.fa-cogs:before { + content: "\f085"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-comment-alt:before { + content: "\f27a"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-copy:before { + content: "\f0c5"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-cut:before { + content: "\f0c4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-dna:before { + content: "\f471"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-dollar-sign:before { + content: "\f155"; } + +.fa-dolly:before { + content: "\f472"; } + +.fa-dolly-flatbed:before { + content: "\f474"; } + +.fa-dot-circle:before { + content: "\f192"; } + +.fa-download:before { + content: "\f019"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edit:before { + content: "\f044"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-euro-sign:before { + content: "\f153"; } + +.fa-exchange-alt:before { + content: "\f362"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-expand-arrows-alt:before { + content: "\f31e"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-external-link-alt:before { + content: "\f35d"; } + +.fa-external-link-square-alt:before { + content: "\f360"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-dropper:before { + content: "\f1fb"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-female:before { + content: "\f182"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-alt:before { + content: "\f15c"; } + +.fa-file-archive:before { + content: "\f1c6"; } + +.fa-file-audio:before { + content: "\f1c7"; } + +.fa-file-code:before { + content: "\f1c9"; } + +.fa-file-excel:before { + content: "\f1c3"; } + +.fa-file-image:before { + content: "\f1c5"; } + +.fa-file-pdf:before { + content: "\f1c1"; } + +.fa-file-powerpoint:before { + content: "\f1c4"; } + +.fa-file-video:before { + content: "\f1c8"; } + +.fa-file-word:before { + content: "\f1c2"; } + +.fa-film:before { + content: "\f008"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-first-aid:before { + content: "\f479"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-font:before { + content: "\f031"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-font-awesome-flag:before { + content: "\f425"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-football-ball:before { + content: "\f44e"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-frown:before { + content: "\f119"; } + +.fa-futbol:before { + content: "\f1e3"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-gavel:before { + content: "\f0e3"; } + +.fa-gem:before { + content: "\f3a5"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glass-martini:before { + content: "\f000"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golf-ball:before { + content: "\f450"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-graduation-cap:before { + content: "\f19d"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hand-lizard:before { + content: "\f258"; } + +.fa-hand-paper:before { + content: "\f256"; } + +.fa-hand-peace:before { + content: "\f25b"; } + +.fa-hand-point-down:before { + content: "\f0a7"; } + +.fa-hand-point-left:before { + content: "\f0a5"; } + +.fa-hand-point-right:before { + content: "\f0a4"; } + +.fa-hand-point-up:before { + content: "\f0a6"; } + +.fa-hand-pointer:before { + content: "\f25a"; } + +.fa-hand-rock:before { + content: "\f255"; } + +.fa-hand-scissors:before { + content: "\f257"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-hdd:before { + content: "\f0a0"; } + +.fa-heading:before { + content: "\f1dc"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-hockey-puck:before { + content: "\f453"; } + +.fa-home:before { + content: "\f015"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hospital:before { + content: "\f0f8"; } + +.fa-hospital-symbol:before { + content: "\f47e"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-start:before { + content: "\f251"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-id-card:before { + content: "\f2c2"; } + +.fa-image:before { + content: "\f03e"; } + +.fa-images:before { + content: "\f302"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-info:before { + content: "\f129"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-key:before { + content: "\f084"; } + +.fa-keyboard:before { + content: "\f11c"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-lemon:before { + content: "\f094"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-level-down-alt:before { + content: "\f3be"; } + +.fa-level-up-alt:before { + content: "\f3bf"; } + +.fa-life-ring:before { + content: "\f1cd"; } + +.fa-lightbulb:before { + content: "\f0eb"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-link:before { + content: "\f0c1"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lira-sign:before { + content: "\f195"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-lock-open:before { + content: "\f3c1"; } + +.fa-long-arrow-alt-down:before { + content: "\f309"; } + +.fa-long-arrow-alt-left:before { + content: "\f30a"; } + +.fa-long-arrow-alt-right:before { + content: "\f30b"; } + +.fa-long-arrow-alt-up:before { + content: "\f30c"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-male:before { + content: "\f183"; } + +.fa-map:before { + content: "\f279"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-map-marker-alt:before { + content: "\f3c5"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f3c7"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-meh:before { + content: "\f11a"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-mobile:before { + content: "\f10b"; } + +.fa-mobile-alt:before { + content: "\f3cd"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-money-bill-alt:before { + content: "\f3d1"; } + +.fa-moon:before { + content: "\f186"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-music:before { + content: "\f001"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-newspaper:before { + content: "\f1ea"; } + +.fa-nintendo-switch:before { + content: "\f418"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-outdent:before { + content: "\f03b"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-pallet:before { + content: "\f482"; } + +.fa-paper-plane:before { + content: "\f1d8"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-paste:before { + content: "\f0ea"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-pen-square:before { + content: "\f14b"; } + +.fa-pencil-alt:before { + content: "\f303"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-phone-volume:before { + content: "\f2a0"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pills:before { + content: "\f484"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-pound-sign:before { + content: "\f154"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-question:before { + content: "\f128"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-quidditch:before { + content: "\f458"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-random:before { + content: "\f074"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redo:before { + content: "\f01e"; } + +.fa-redo-alt:before { + content: "\f2f9"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-reply:before { + content: "\f3e5"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-road:before { + content: "\f018"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-ruble-sign:before { + content: "\f158"; } + +.fa-rupee-sign:before { + content: "\f156"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-save:before { + content: "\f0c7"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-search:before { + content: "\f002"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-server:before { + content: "\f233"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-share:before { + content: "\f064"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-shekel-sign:before { + content: "\f20b"; } + +.fa-shield-alt:before { + content: "\f3ed"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-shipping-fast:before { + content: "\f48b"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-sign-in-alt:before { + content: "\f2f6"; } + +.fa-sign-language:before { + content: "\f2a7"; } + +.fa-sign-out-alt:before { + content: "\f2f5"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f3ef"; } + +.fa-sliders-h:before { + content: "\f1de"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-smile:before { + content: "\f118"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-snowflake:before { + content: "\f2dc"; } + +.fa-sort:before { + content: "\f0dc"; } + +.fa-sort-alpha-down:before { + content: "\f15d"; } + +.fa-sort-alpha-up:before { + content: "\f15e"; } + +.fa-sort-amount-down:before { + content: "\f160"; } + +.fa-sort-amount-up:before { + content: "\f161"; } + +.fa-sort-down:before { + content: "\f0dd"; } + +.fa-sort-numeric-down:before { + content: "\f162"; } + +.fa-sort-numeric-up:before { + content: "\f163"; } + +.fa-sort-up:before { + content: "\f0de"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-square-full:before { + content: "\f45c"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stopwatch:before { + content: "\f2f2"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-sun:before { + content: "\f185"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-sync:before { + content: "\f021"; } + +.fa-sync-alt:before { + content: "\f2f1"; } + +.fa-syringe:before { + content: "\f48e"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-table-tennis:before { + content: "\f45d"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-tablet-alt:before { + content: "\f3fa"; } + +.fa-tachometer-alt:before { + content: "\f3fd"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-taxi:before { + content: "\f1ba"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f3fe"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-thermometer:before { + content: "\f491"; } + +.fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbtack:before { + content: "\f08d"; } + +.fa-ticket-alt:before { + content: "\f3ff"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-train:before { + content: "\f238"; } + +.fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-trash-alt:before { + content: "\f2ed"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-tripadvisor:before { + content: "\f262"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-tv:before { + content: "\f26c"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-university:before { + content: "\f19c"; } + +.fa-unlink:before { + content: "\f127"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-user:before { + content: "\f007"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-users:before { + content: "\f0c0"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-utensil-spoon:before { + content: "\f2e5"; } + +.fa-utensils:before { + content: "\f2e7"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-video:before { + content: "\f03d"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-volleyball-ball:before { + content: "\f45f"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-warehouse:before { + content: "\f494"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-weight:before { + content: "\f496"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-window-close:before { + content: "\f410"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-won-sign:before { + content: "\f159"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-yen-sign:before { + content: "\f157"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } diff --git a/templates/search.html b/templates/search.html index 122d0b5..4e106a1 100644 --- a/templates/search.html +++ b/templates/search.html @@ -11,23 +11,39 @@ padding: 0.5rem; } + .document p { + margin-bottom: 0; + } + .document:hover p { text-decoration: underline; } .badge-video { - color: #ffffff; + color: #FFFFFF; background-color: #F27761; } .badge-image { - color: #ffffff; + color: #FFFFFF; background-color: #AA99C9; } .badge-resolution { color: #212529; - background-color: #ffc107; + background-color: #FFC107; + } + + + + .card-img-top { + display: block; + min-width: 64px; + max-width: 100%; + max-height: 256px; + width: unset; + margin: 0 auto 0; + padding: 3px 3px 0 3px; } .card-img-overlay { @@ -54,6 +70,8 @@ .fit { width: 100%; height: 100%; + margin-top: 3px; + padding: 3px; } @media (min-width: 1200px) { @@ -62,7 +80,7 @@ } } - @media (min-width: 1500px){ + @media (min-width: 1500px) { .container { max-width: 1440px; } @@ -71,7 +89,9 @@ } } - + .hl { + color: red; + }
@@ -79,8 +99,14 @@
{#
An excellent form
#}
-
- +
+
+
+
+ + +
+
@@ -103,7 +129,7 @@ statsCardBody.setAttribute("class", "card-body"); var stat = document.createElement("p"); - stat.appendChild(document.createTextNode(searchResult["hits"]["total"] + " results")); + stat.appendChild(document.createTextNode(searchResult["hits"]["total"] + " results in " + searchResult["took"] + "ms")); statsCardBody.appendChild(stat); statsCard.appendChild(statsCardBody); @@ -156,6 +182,7 @@ * @param documentId */ function gifOver(thumbnail, documentId) { + var callee = arguments.callee; thumbnail.addEventListener("mouseover", function () { @@ -163,25 +190,10 @@ window.setTimeout(function() { if (thumbnail.mouseStayedOver) { - thumbnail.removeEventListener('mouseover', arguments.callee, false); + thumbnail.removeEventListener('mouseover', callee, false); //Load gif - var gifImage = document.createElement("img"); - gifImage.setAttribute("src", "/file/" + documentId); - gifImage.setAttribute("class", "fit"); - thumbnail.parentNode.appendChild(gifImage); - - thumbnail.setAttribute("style", "display: none"); - - //Toggle gif/thumbnail on hover - gifImage.addEventListener("mouseout", function() { - gifImage.setAttribute("style", "display: none"); - thumbnail.setAttribute("style", ""); - }); - thumbnail.addEventListener("mouseover", function () { - gifImage.setAttribute("style", ""); - thumbnail.setAttribute("style", "display: none"); - }); + thumbnail.setAttribute("src", "/file/" + documentId); } }, 750); //todo grab hover time from config @@ -190,6 +202,8 @@ thumbnail.addEventListener("mouseout", function() { //Reset timer thumbnail.mouseStayedOver = false; + thumbnail.setAttribute("src", "/thumb/" + documentId); + }) } @@ -210,6 +224,7 @@ vidSource.setAttribute("type", "video/webm"); video.appendChild(vidSource); video.setAttribute("class", "fit"); + video.setAttribute("poster", "/thumb/" + documentId); imgWrapper.appendChild(video); //Video hover @@ -247,6 +262,7 @@ }); } + var counter = 0; /** * * @param hit @@ -265,16 +281,18 @@ link.setAttribute("href", "/document/" + hit["_id"]); link.setAttribute("target", "_blank"); + //Title var title = document.createElement("p"); title.setAttribute("class", "file-title"); - title.appendChild(document.createTextNode(hit["_source"]["name"])); - title.setAttribute("title", hit["_source"]["name"]); + var extention = hit["_source"].hasOwnProperty("extension") && hit["_source"]["extension"] !== null ? "." + hit["_source"]["extension"] : ""; + title.insertAdjacentHTML('afterbegin', hit["highlight"]["name"] + extention); + title.setAttribute("title", hit["_source"]["path"]); docCard.appendChild(title); var tagContainer = document.createElement("div"); tagContainer.setAttribute("class", "card-text"); - if (hit["_source"].hasOwnProperty("mime")) { + if (hit["_source"].hasOwnProperty("mime") && hit["_source"]["mime"] !== null) { var tags = []; var thumbnail = null; @@ -291,9 +309,8 @@ case "image": thumbnail = document.createElement("img"); thumbnail.setAttribute("class", "card-img-top"); - thumbnail.setAttribute("src", "/thumb/" + hit["_source"]["directory"] + "/" + hit["_id"]); + thumbnail.setAttribute("src", "/thumb/" + hit["_id"]); break; - } //Thumbnail overlay @@ -351,6 +368,14 @@ break; } + //Content + if (hit.hasOwnProperty("highlight") && hit["highlight"].hasOwnProperty("content")) { + + var contentDiv = document.createElement("div"); + contentDiv.innerHTML = hit["highlight"]["content"][0]; + docCard.appendChild(contentDiv); + } + //Size tag var sizeTag = document.createElement("small"); sizeTag.appendChild(document.createTextNode(humanFileSize(hit["_source"]["size"]))); @@ -387,6 +412,7 @@ function makePageIndicator(searchResult) { var pageIndicator = document.createElement("div"); pageIndicator.appendChild(document.createTextNode(docCount + " / " +searchResult["hits"]["total"])); + return pageIndicator; } @@ -437,7 +463,7 @@ } }); - searchBar.addEventListener("keydown", function () { + searchBar.addEventListener("keyup", function () { //Clear old search results var searchResults = document.getElementById("searchResults"); @@ -446,6 +472,7 @@ } + var query = searchBar.value; console.log("query: " + query); @@ -471,7 +498,7 @@ initPopover(); } }; - xhttp.open("GET", "/search", true); + xhttp.open("GET", "/search?q=" + query, true); xhttp.send(); }); diff --git a/templates/searchList.html b/templates/searchList.html new file mode 100644 index 0000000..a44847a --- /dev/null +++ b/templates/searchList.html @@ -0,0 +1,348 @@ +{% extends "layout.html" %} + +{% set active_page = "search" %} + +{% block title %}Search{% endblock title %} + +{% block body %} + + + +
+ +
+ {#
An excellent form
#} +
+
+ +
+
+ +
+ +
+ + +
+ + +{% endblock body %} \ No newline at end of file diff --git a/tmp.py b/tmp.py new file mode 100644 index 0000000..f744dd7 --- /dev/null +++ b/tmp.py @@ -0,0 +1,56 @@ +from elasticsearch import Elasticsearch +from indexer import Indexer +import json +from crawler import Crawler +from indexer import Indexer +from parsing import GenericFileParser, Sha256CheckSumCalculator, ExtensionMimeGuesser + +es = Elasticsearch() +1 + +# reset +es.indices.delete(index="test") +es.indices.create(index="test") +es.indices.close(index="test") + + +# # config +es.indices.put_settings(body='{"analysis": {"analyzer": {"path_analyser": {' + '"tokenizer": "path_tokenizer"}}, "tokenizer": {"path_tokenizer": {' + '"type": "path_hierarchy"}}}}', index="test") + +es.indices.put_mapping(body='{"properties": {' + '"name": {"type": "text", "analyzer": "path_analyser", "copy_to": "suggest-path"},' + '"suggest-path": {"type": "completion", "analyzer": "keyword"},' + '"mime": {"type": "keyword"}' + '}}', index="test",doc_type="file" ) + +es.indices.open(index="test") + + +# add docs + +# crawler = Crawler([GenericFileParser([Sha256CheckSumCalculator()], ExtensionMimeGuesser())]) +# crawler.crawl("spec/test_folder") +# +# indexer = Indexer("test") +# +# indexer.index(crawler.documents) + +# search +# print(es.search("test", "file", '{"query": {"term": {"name": "spec/test_folder/sub2/"}}}')) +# print(es.search("test", "file", '{"query": {"match_all": {}}, "aggs": {"test": {"terms": {"field": "mime"}}}}')) +# suggest = es.search("test", "file", '{"suggest": {"path-suggest": {"prefix": "spec/test_folder/sub", "completion": {"field": "suggest-path"}}}}') +# +# print(suggest["suggest"]["path-suggest"]) +# +# for hit in suggest["suggest"]["path-suggest"][0]["options"]: +# print(hit["text"]) + +# indexer = Indexer("test") + +# import time +# time.sleep(10) + +c = Crawler([]) +c.countFiles("/")