feat:项目完成
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,2 @@ | |||||||
|  | __pycache__ | ||||||
|  | .venv | ||||||
							
								
								
									
										7
									
								
								app_conf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,7 @@ | |||||||
|  | import configparser | ||||||
|  |  | ||||||
|  | def conf(): | ||||||
|  |     '返回配置文件对象' | ||||||
|  |     conf = configparser.ConfigParser() | ||||||
|  |     conf.read('./conf/app.ini') | ||||||
|  |     return conf | ||||||
							
								
								
									
										15
									
								
								conf/app.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,15 @@ | |||||||
|  | [server] | ||||||
|  | port=8080 | ||||||
|  | debug=1 | ||||||
|  | host=0.0.0.0 | ||||||
|  | threaded=1 | ||||||
|  |  | ||||||
|  | [database] | ||||||
|  | host=127.0.0.1 | ||||||
|  | port=3306 | ||||||
|  | user=root | ||||||
|  | password=password | ||||||
|  | database=fz_data | ||||||
|  |  | ||||||
|  | [RSA] | ||||||
|  | key= | ||||||
							
								
								
									
										83
									
								
								db/fz_data.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,83 @@ | |||||||
|  | import pymysql, json | ||||||
|  | import app_conf | ||||||
|  |  | ||||||
|  | conf = app_conf.conf() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def getConn(): | ||||||
|  |     return pymysql.Connect( | ||||||
|  |         host=conf.get("database", "host"), | ||||||
|  |         user=conf.get("database", "user"), | ||||||
|  |         port=conf.getint("database", "port"), | ||||||
|  |         database=conf.get("database", "database"), | ||||||
|  |         password=conf.get("database", "password"), | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def saveFzData(data) -> bool: | ||||||
|  |     "将数据存入数据库" | ||||||
|  |     sql = """ | ||||||
|  |     INSERT INTO table_zhapian  | ||||||
|  |     VALUES ( | ||||||
|  |     %(uuid)s,%(callednm)s,%(zptype)s,%(zpfeatures)s,%(early_warning_time)s, | ||||||
|  |     %(warninglevel)s,%(zpcallernm)s,%(talktime)s,%(auth_code)s,%(student_number)s, | ||||||
|  |     %(transfer_amout)s,%(url_or_app_name)s,%(zp_account)s | ||||||
|  |     ); | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         for message in data: | ||||||
|  |             message.setdefault("uuid",None) | ||||||
|  |             message.setdefault("callednm",None) | ||||||
|  |             message.setdefault("zptype",None) | ||||||
|  |             message.setdefault("zpfeatures",None) | ||||||
|  |             message.setdefault("early_warning_time",None) | ||||||
|  |             message.setdefault("warninglevel",None) | ||||||
|  |             message.setdefault("zpcallernm",None) | ||||||
|  |             message.setdefault("talktime",None) | ||||||
|  |             message.setdefault("auth_code",None) | ||||||
|  |             message.setdefault("student_number",None) | ||||||
|  |             message.setdefault("transfer_amout",None) | ||||||
|  |             message.setdefault("url_or_app_name",None) | ||||||
|  |             message.setdefault("zp_account",None) | ||||||
|  |             cursor.execute(sql,message) | ||||||
|  |         conn.commit() | ||||||
|  |     except: | ||||||
|  |         return False | ||||||
|  |     conn.close() | ||||||
|  |     return True | ||||||
|  |  | ||||||
|  | def LoadFzData(): | ||||||
|  |     "从数据库读取数据" | ||||||
|  |     sql = """ | ||||||
|  |     SELECT * FROM `table_zhapian` ORDER BY `early_warning_time` DESC LIMIT 0,1000; | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         cursor.execute(sql) | ||||||
|  |         results = cursor.fetchall() | ||||||
|  |     except: | ||||||
|  |         conn.close() | ||||||
|  |         return None | ||||||
|  |     conn.close() | ||||||
|  |  | ||||||
|  |     return results | ||||||
|  |  | ||||||
|  | def total(): | ||||||
|  |     "返回数据库总条目数量" | ||||||
|  |     sql = """ | ||||||
|  |     SELECT COUNT(*) AS total_count FROM table_zhapian; | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         cursor.execute(sql) | ||||||
|  |         results = cursor.fetchone() | ||||||
|  |     except: | ||||||
|  |         conn.close() | ||||||
|  |         return None | ||||||
|  |     conn.close() | ||||||
|  |  | ||||||
|  |     return results[0] | ||||||
							
								
								
									
										116
									
								
								db/user.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,116 @@ | |||||||
|  | import hashlib | ||||||
|  | from db.fz_data import getConn | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def Check(username: str, password: str) -> bool: | ||||||
|  |     password_hash = hashlib.md5(password.encode()).hexdigest() | ||||||
|  |     "检查用户密码" | ||||||
|  |     sql = """ | ||||||
|  |     SELECT * FROM `table_user` WHERE username = %s and password = %s; | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         cursor.execute(sql, (username, password_hash)) | ||||||
|  |         results = cursor.fetchone() | ||||||
|  |         conn.close() | ||||||
|  |     except: | ||||||
|  |         conn.close() | ||||||
|  |         return False | ||||||
|  |     if results != None: | ||||||
|  |         return True | ||||||
|  |     return False | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def UpdatePassword(username: str, password: str) -> bool: | ||||||
|  |     password_hash = hashlib.md5(password.encode()).hexdigest() | ||||||
|  |     "更新用户密码" | ||||||
|  |     sql = """ | ||||||
|  |     UPDATE `table_user` SET `password` = %s WHERE `username` = %s; | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         c_row = cursor.execute(sql, (password_hash, username)) | ||||||
|  |         conn.commit() | ||||||
|  |         conn.close() | ||||||
|  |     except: | ||||||
|  |         conn.close() | ||||||
|  |         return False | ||||||
|  |     if c_row > 0: | ||||||
|  |         return True | ||||||
|  |     return False | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def New(username: str, password: str) -> bool: | ||||||
|  |     password_hash = hashlib.md5(password.encode()).hexdigest() | ||||||
|  |     "更新用户密码" | ||||||
|  |     sql = """ | ||||||
|  |     INSERT INTO `table_user` (`username`, `password`) VALUES (%s, %s); | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         c_row = cursor.execute(sql, (username,password_hash)) | ||||||
|  |         conn.commit() | ||||||
|  |         conn.close() | ||||||
|  |     except: | ||||||
|  |         conn.close() | ||||||
|  |         return False | ||||||
|  |     if c_row > 0: | ||||||
|  |         return True | ||||||
|  |     return False | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def total() -> int: | ||||||
|  |     "返回数据库总条目数量" | ||||||
|  |     sql = """ | ||||||
|  |     SELECT COUNT(*) AS total_count FROM table_user; | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         cursor.execute(sql) | ||||||
|  |         results = cursor.fetchone() | ||||||
|  |     except: | ||||||
|  |         conn.close() | ||||||
|  |         return None | ||||||
|  |     conn.close() | ||||||
|  |  | ||||||
|  |     return results[0] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def list(): | ||||||
|  |     "返回数据库所有条目" | ||||||
|  |     sql = """ | ||||||
|  |     SELECT * FROM table_user; | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         cursor.execute(sql) | ||||||
|  |         results = cursor.fetchall() | ||||||
|  |     except: | ||||||
|  |         conn.close() | ||||||
|  |         return None | ||||||
|  |     conn.close() | ||||||
|  |     return results | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def Del(username: str) -> bool: | ||||||
|  |     "删除用户" | ||||||
|  |     sql = """ | ||||||
|  |     DELETE FROM `table_user` WHERE `username` = %s; | ||||||
|  |     """ | ||||||
|  |     conn = getConn() | ||||||
|  |     cursor = conn.cursor() | ||||||
|  |     try: | ||||||
|  |         c_row = cursor.execute(sql, (username)) | ||||||
|  |         conn.commit() | ||||||
|  |         conn.close() | ||||||
|  |     except: | ||||||
|  |         conn.close() | ||||||
|  |         return False | ||||||
|  |     if c_row > 0: | ||||||
|  |         return True | ||||||
|  |     return False | ||||||
							
								
								
									
										45
									
								
								func/decryption.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,45 @@ | |||||||
|  | import Crypto, base64 | ||||||
|  | from Crypto.Cipher import PKCS1_v1_5 | ||||||
|  | from Crypto.PublicKey import RSA | ||||||
|  | from Crypto.Cipher import DES | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # rsa解密密文方法 | ||||||
|  | def get_max_length(rsa_key, encrypt=True): | ||||||
|  |     """加密内容过长时 需要分段加密 换算每一段的长度. | ||||||
|  |         :param rsa_key: 钥匙. | ||||||
|  |         :param encrypt: 是否是加密. | ||||||
|  |     """ | ||||||
|  |     blocksize = Crypto.Util.number.size(rsa_key.n) / 8 | ||||||
|  |     reserve_size = 11  # 预留位为11 | ||||||
|  |     if not encrypt:  # 解密时不需要考虑预留位 | ||||||
|  |         reserve_size = 0 | ||||||
|  |     maxlength = blocksize - reserve_size | ||||||
|  |     return maxlength | ||||||
|  | # ------------------------解密密文------------------------ | ||||||
|  | def decryption(text_encrypted_base64: str, private_key: bytes): | ||||||
|  |     # 字符串指定编码(转为bytes) | ||||||
|  |     text_encrypted_base64 = text_encrypted_base64.encode('utf-8') | ||||||
|  |     # base64解码 | ||||||
|  |     text_encrypted = base64.b64decode(text_encrypted_base64) | ||||||
|  |     # 构建私钥对象 | ||||||
|  |     private_key = RSA.importKey(private_key) | ||||||
|  |     max_length = int(get_max_length(private_key, False)) | ||||||
|  |     cipher_private = PKCS1_v1_5.new(private_key) | ||||||
|  |     length = len(text_encrypted) | ||||||
|  |     if length < max_length: | ||||||
|  |         return b''.join(cipher_private.decrypt(text_encrypted, b'xyz')) | ||||||
|  |         # 需要分段 | ||||||
|  |     offset = 0 | ||||||
|  |     res = [] | ||||||
|  |     while length - offset > 0: | ||||||
|  |         if length - offset > max_length: | ||||||
|  |             res.append(cipher_private.decrypt(text_encrypted[offset:offset + max_length], b'xyz')) | ||||||
|  |         else: | ||||||
|  |             res.append(cipher_private.decrypt(text_encrypted[offset:], b'xyz')) | ||||||
|  |         offset += max_length | ||||||
|  |     text_decrypted = b'' | ||||||
|  |     for i in res: | ||||||
|  |         text_decrypted += i | ||||||
|  |     # print(text_decrypted.decode()) | ||||||
|  |     return text_decrypted.decode() | ||||||
							
								
								
									
										51
									
								
								fz_data.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,51 @@ | |||||||
|  | /* | ||||||
|  |  Navicat Premium Data Transfer | ||||||
|  |  | ||||||
|  |  Source Server         : 172.16.0.4 | ||||||
|  |  Source Server Type    : MariaDB | ||||||
|  |  Source Server Version : 101106 (10.11.6-MariaDB-0+deb12u1) | ||||||
|  |  Source Host           : 172.16.0.4:3306 | ||||||
|  |  Source Schema         : fz_data | ||||||
|  |  | ||||||
|  |  Target Server Type    : MariaDB | ||||||
|  |  Target Server Version : 101106 (10.11.6-MariaDB-0+deb12u1) | ||||||
|  |  File Encoding         : 65001 | ||||||
|  |  | ||||||
|  |  Date: 23/05/2024 10:53:04 | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | SET NAMES utf8mb4; | ||||||
|  | SET FOREIGN_KEY_CHECKS = 0; | ||||||
|  |  | ||||||
|  | -- ---------------------------- | ||||||
|  | -- Table structure for table_user | ||||||
|  | -- ---------------------------- | ||||||
|  | DROP TABLE IF EXISTS `table_user`; | ||||||
|  | CREATE TABLE `table_user`  ( | ||||||
|  |   `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||||||
|  |   `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   PRIMARY KEY (`username`) USING BTREE | ||||||
|  | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | ||||||
|  |  | ||||||
|  | -- ---------------------------- | ||||||
|  | -- Table structure for table_zhapian | ||||||
|  | -- ---------------------------- | ||||||
|  | DROP TABLE IF EXISTS `table_zhapian`; | ||||||
|  | CREATE TABLE `table_zhapian`  ( | ||||||
|  |   `uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||||||
|  |   `callednm` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `zptype` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `zpfeatures` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `early_warning_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `warninglevel` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `zpcallernm` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `talktime` int(11) NULL DEFAULT NULL, | ||||||
|  |   `auth_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `student_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `transfer_amout` float NULL DEFAULT NULL, | ||||||
|  |   `url_or_app_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   `zp_account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, | ||||||
|  |   PRIMARY KEY (`uuid`) USING BTREE | ||||||
|  | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; | ||||||
|  |  | ||||||
|  | SET FOREIGN_KEY_CHECKS = 1; | ||||||
							
								
								
									
										23
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,23 @@ | |||||||
|  | from flask import Flask | ||||||
|  |  | ||||||
|  | import app_conf | ||||||
|  |  | ||||||
|  | from web.api.receive import api_receive_bp | ||||||
|  | from web.page import page_bp | ||||||
|  |  | ||||||
|  |  | ||||||
|  | conf = app_conf.conf() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | app = Flask(__name__) | ||||||
|  | app.register_blueprint(page_bp) | ||||||
|  | app.register_blueprint(api_receive_bp) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     app.run( | ||||||
|  |         debug=conf.getboolean("server", "debug"), | ||||||
|  |         host=conf.get("server", "host"), | ||||||
|  |         port=conf.get("server", "port"), | ||||||
|  |         threaded=conf.getboolean("server", "threaded"), | ||||||
|  |     ) | ||||||
							
								
								
									
										6
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,6 @@ | |||||||
|  | pycryptodome | ||||||
|  | Crypto | ||||||
|  | flask | ||||||
|  | pydes | ||||||
|  | pathlib | ||||||
|  | pymysql | ||||||
							
								
								
									
										1242
									
								
								static/data/flot-data.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										117
									
								
								static/data/morris-data.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,117 @@ | |||||||
|  | $(function() { | ||||||
|  |  | ||||||
|  |     Morris.Area({ | ||||||
|  |         element: 'morris-area-chart', | ||||||
|  |         data: [{ | ||||||
|  |             period: '2010 Q1', | ||||||
|  |             iphone: 2666, | ||||||
|  |             ipad: null, | ||||||
|  |             itouch: 2647 | ||||||
|  |         }, { | ||||||
|  |             period: '2010 Q2', | ||||||
|  |             iphone: 2778, | ||||||
|  |             ipad: 2294, | ||||||
|  |             itouch: 2441 | ||||||
|  |         }, { | ||||||
|  |             period: '2010 Q3', | ||||||
|  |             iphone: 4912, | ||||||
|  |             ipad: 1969, | ||||||
|  |             itouch: 2501 | ||||||
|  |         }, { | ||||||
|  |             period: '2010 Q4', | ||||||
|  |             iphone: 3767, | ||||||
|  |             ipad: 3597, | ||||||
|  |             itouch: 5689 | ||||||
|  |         }, { | ||||||
|  |             period: '2011 Q1', | ||||||
|  |             iphone: 6810, | ||||||
|  |             ipad: 1914, | ||||||
|  |             itouch: 2293 | ||||||
|  |         }, { | ||||||
|  |             period: '2011 Q2', | ||||||
|  |             iphone: 5670, | ||||||
|  |             ipad: 4293, | ||||||
|  |             itouch: 1881 | ||||||
|  |         }, { | ||||||
|  |             period: '2011 Q3', | ||||||
|  |             iphone: 4820, | ||||||
|  |             ipad: 3795, | ||||||
|  |             itouch: 1588 | ||||||
|  |         }, { | ||||||
|  |             period: '2011 Q4', | ||||||
|  |             iphone: 15073, | ||||||
|  |             ipad: 5967, | ||||||
|  |             itouch: 5175 | ||||||
|  |         }, { | ||||||
|  |             period: '2012 Q1', | ||||||
|  |             iphone: 10687, | ||||||
|  |             ipad: 4460, | ||||||
|  |             itouch: 2028 | ||||||
|  |         }, { | ||||||
|  |             period: '2012 Q2', | ||||||
|  |             iphone: 8432, | ||||||
|  |             ipad: 5713, | ||||||
|  |             itouch: 1791 | ||||||
|  |         }], | ||||||
|  |         xkey: 'period', | ||||||
|  |         ykeys: ['iphone', 'ipad', 'itouch'], | ||||||
|  |         labels: ['iPhone', 'iPad', 'iPod Touch'], | ||||||
|  |         pointSize: 2, | ||||||
|  |         hideHover: 'auto', | ||||||
|  |         resize: true | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     Morris.Donut({ | ||||||
|  |         element: 'morris-donut-chart', | ||||||
|  |         data: [{ | ||||||
|  |             label: "Download Sales", | ||||||
|  |             value: 12 | ||||||
|  |         }, { | ||||||
|  |             label: "In-Store Sales", | ||||||
|  |             value: 30 | ||||||
|  |         }, { | ||||||
|  |             label: "Mail-Order Sales", | ||||||
|  |             value: 20 | ||||||
|  |         }], | ||||||
|  |         resize: true | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     Morris.Bar({ | ||||||
|  |         element: 'morris-bar-chart', | ||||||
|  |         data: [{ | ||||||
|  |             y: '2006', | ||||||
|  |             a: 100, | ||||||
|  |             b: 90 | ||||||
|  |         }, { | ||||||
|  |             y: '2007', | ||||||
|  |             a: 75, | ||||||
|  |             b: 65 | ||||||
|  |         }, { | ||||||
|  |             y: '2008', | ||||||
|  |             a: 50, | ||||||
|  |             b: 40 | ||||||
|  |         }, { | ||||||
|  |             y: '2009', | ||||||
|  |             a: 75, | ||||||
|  |             b: 65 | ||||||
|  |         }, { | ||||||
|  |             y: '2010', | ||||||
|  |             a: 50, | ||||||
|  |             b: 40 | ||||||
|  |         }, { | ||||||
|  |             y: '2011', | ||||||
|  |             a: 75, | ||||||
|  |             b: 65 | ||||||
|  |         }, { | ||||||
|  |             y: '2012', | ||||||
|  |             a: 100, | ||||||
|  |             b: 90 | ||||||
|  |         }], | ||||||
|  |         xkey: 'y', | ||||||
|  |         ykeys: ['a', 'b'], | ||||||
|  |         labels: ['Series A', 'Series B'], | ||||||
|  |         hideHover: 'auto', | ||||||
|  |         resize: true | ||||||
|  |     }); | ||||||
|  |      | ||||||
|  | }); | ||||||
							
								
								
									
										435
									
								
								static/dist/css/sb-admin-2.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,435 @@ | |||||||
|  | /*! | ||||||
|  |  * Start Bootstrap - SB Admin 2 v3.3.7+1 (#template-overviews/sb-admin-2) | ||||||
|  |  * Copyright 2013-2016 Start Bootstrap | ||||||
|  |  * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) | ||||||
|  |  */ | ||||||
|  | body { | ||||||
|  |   background-color: #f8f8f8; | ||||||
|  | } | ||||||
|  | #wrapper { | ||||||
|  |   width: 100%; | ||||||
|  | } | ||||||
|  | #page-wrapper { | ||||||
|  |   padding: 0 15px; | ||||||
|  |   min-height: 568px; | ||||||
|  |   background-color: white; | ||||||
|  | } | ||||||
|  | @media (min-width: 768px) { | ||||||
|  |   #page-wrapper { | ||||||
|  |     position: inherit; | ||||||
|  |     margin: 0 0 0 250px; | ||||||
|  |     padding: 0 30px; | ||||||
|  |     border-left: 1px solid #e7e7e7; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .navbar-top-links { | ||||||
|  |   margin-right: 0; | ||||||
|  | } | ||||||
|  | .navbar-top-links li { | ||||||
|  |   display: inline-block; | ||||||
|  | } | ||||||
|  | .navbar-top-links li:last-child { | ||||||
|  |   margin-right: 15px; | ||||||
|  | } | ||||||
|  | .navbar-top-links li a { | ||||||
|  |   padding: 15px; | ||||||
|  |   min-height: 50px; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-menu li { | ||||||
|  |   display: block; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-menu li:last-child { | ||||||
|  |   margin-right: 0; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-menu li a { | ||||||
|  |   padding: 3px 20px; | ||||||
|  |   min-height: 0; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-menu li a div { | ||||||
|  |   white-space: normal; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-messages, | ||||||
|  | .navbar-top-links .dropdown-tasks, | ||||||
|  | .navbar-top-links .dropdown-alerts { | ||||||
|  |   width: 310px; | ||||||
|  |   min-width: 0; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-messages { | ||||||
|  |   margin-left: 5px; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-tasks { | ||||||
|  |   margin-left: -59px; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-alerts { | ||||||
|  |   margin-left: -123px; | ||||||
|  | } | ||||||
|  | .navbar-top-links .dropdown-user { | ||||||
|  |   right: 0; | ||||||
|  |   left: auto; | ||||||
|  | } | ||||||
|  | .sidebar .sidebar-nav.navbar-collapse { | ||||||
|  |   padding-left: 0; | ||||||
|  |   padding-right: 0; | ||||||
|  | } | ||||||
|  | .sidebar .sidebar-search { | ||||||
|  |   padding: 15px; | ||||||
|  | } | ||||||
|  | .sidebar ul li { | ||||||
|  |   border-bottom: 1px solid #e7e7e7; | ||||||
|  | } | ||||||
|  | .sidebar ul li a.active { | ||||||
|  |   background-color: #eeeeee; | ||||||
|  | } | ||||||
|  | .sidebar .arrow { | ||||||
|  |   float: right; | ||||||
|  | } | ||||||
|  | .sidebar .fa.arrow:before { | ||||||
|  |   content: "\f104"; | ||||||
|  | } | ||||||
|  | .sidebar .active > a > .fa.arrow:before { | ||||||
|  |   content: "\f107"; | ||||||
|  | } | ||||||
|  | .sidebar .nav-second-level li, | ||||||
|  | .sidebar .nav-third-level li { | ||||||
|  |   border-bottom: none !important; | ||||||
|  | } | ||||||
|  | .sidebar .nav-second-level li a { | ||||||
|  |   padding-left: 37px; | ||||||
|  | } | ||||||
|  | .sidebar .nav-third-level li a { | ||||||
|  |   padding-left: 52px; | ||||||
|  | } | ||||||
|  | @media (min-width: 768px) { | ||||||
|  |   .sidebar { | ||||||
|  |     z-index: 1; | ||||||
|  |     position: absolute; | ||||||
|  |     width: 250px; | ||||||
|  |     margin-top: 51px; | ||||||
|  |   } | ||||||
|  |   .navbar-top-links .dropdown-messages, | ||||||
|  |   .navbar-top-links .dropdown-tasks, | ||||||
|  |   .navbar-top-links .dropdown-alerts { | ||||||
|  |     margin-left: auto; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .chs{text-indent:-9999px;height:0;line-height:0;font-size:0;overflow:hidden;} | ||||||
|  | .btn-outline { | ||||||
|  |   color: inherit; | ||||||
|  |   background-color: transparent; | ||||||
|  |   transition: all .5s; | ||||||
|  | } | ||||||
|  | .btn-primary.btn-outline { | ||||||
|  |   color: #428bca; | ||||||
|  | } | ||||||
|  | .btn-success.btn-outline { | ||||||
|  |   color: #5cb85c; | ||||||
|  | } | ||||||
|  | .btn-info.btn-outline { | ||||||
|  |   color: #5bc0de; | ||||||
|  | } | ||||||
|  | .btn-warning.btn-outline { | ||||||
|  |   color: #f0ad4e; | ||||||
|  | } | ||||||
|  | .btn-danger.btn-outline { | ||||||
|  |   color: #d9534f; | ||||||
|  | } | ||||||
|  | .btn-primary.btn-outline:hover, | ||||||
|  | .btn-success.btn-outline:hover, | ||||||
|  | .btn-info.btn-outline:hover, | ||||||
|  | .btn-warning.btn-outline:hover, | ||||||
|  | .btn-danger.btn-outline:hover { | ||||||
|  |   color: white; | ||||||
|  | } | ||||||
|  | .chat { | ||||||
|  |   margin: 0; | ||||||
|  |   padding: 0; | ||||||
|  |   list-style: none; | ||||||
|  | } | ||||||
|  | .chat li { | ||||||
|  |   margin-bottom: 10px; | ||||||
|  |   padding-bottom: 5px; | ||||||
|  |   border-bottom: 1px dotted #999999; | ||||||
|  | } | ||||||
|  | .chat li.left .chat-body { | ||||||
|  |   margin-left: 60px; | ||||||
|  | } | ||||||
|  | .chat li.right .chat-body { | ||||||
|  |   margin-right: 60px; | ||||||
|  | } | ||||||
|  | .chat li .chat-body p { | ||||||
|  |   margin: 0; | ||||||
|  | } | ||||||
|  | .panel .slidedown .glyphicon, | ||||||
|  | .chat .glyphicon { | ||||||
|  |   margin-right: 5px; | ||||||
|  | } | ||||||
|  | .chat-panel .panel-body { | ||||||
|  |   height: 350px; | ||||||
|  |   overflow-y: scroll; | ||||||
|  | } | ||||||
|  | .login-panel { | ||||||
|  |   margin-top: 25%; | ||||||
|  | } | ||||||
|  | .flot-chart { | ||||||
|  |   display: block; | ||||||
|  |   height: 400px; | ||||||
|  | } | ||||||
|  | .flot-chart-content { | ||||||
|  |   width: 100%; | ||||||
|  |   height: 100%; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc, | ||||||
|  | table.dataTable thead .sorting_asc_disabled, | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  |   background: transparent; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc:after { | ||||||
|  |   content: "\f0de"; | ||||||
|  |   float: right; | ||||||
|  |   font-family: fontawesome; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_desc:after { | ||||||
|  |   content: "\f0dd"; | ||||||
|  |   float: right; | ||||||
|  |   font-family: fontawesome; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:after { | ||||||
|  |   content: "\f0dc"; | ||||||
|  |   float: right; | ||||||
|  |   font-family: fontawesome; | ||||||
|  |   color: rgba(50, 50, 50, 0.5); | ||||||
|  | } | ||||||
|  | .btn-circle { | ||||||
|  |   width: 30px; | ||||||
|  |   height: 30px; | ||||||
|  |   padding: 6px 0; | ||||||
|  |   border-radius: 15px; | ||||||
|  |   text-align: center; | ||||||
|  |   font-size: 12px; | ||||||
|  |   line-height: 1.428571429; | ||||||
|  | } | ||||||
|  | .btn-circle.btn-lg { | ||||||
|  |   width: 50px; | ||||||
|  |   height: 50px; | ||||||
|  |   padding: 10px 16px; | ||||||
|  |   border-radius: 25px; | ||||||
|  |   font-size: 18px; | ||||||
|  |   line-height: 1.33; | ||||||
|  | } | ||||||
|  | .btn-circle.btn-xl { | ||||||
|  |   width: 70px; | ||||||
|  |   height: 70px; | ||||||
|  |   padding: 10px 16px; | ||||||
|  |   border-radius: 35px; | ||||||
|  |   font-size: 24px; | ||||||
|  |   line-height: 1.33; | ||||||
|  | } | ||||||
|  | .show-grid [class^="col-"] { | ||||||
|  |   padding-top: 10px; | ||||||
|  |   padding-bottom: 10px; | ||||||
|  |   border: 1px solid #ddd; | ||||||
|  |   background-color: #eee !important; | ||||||
|  | } | ||||||
|  | .show-grid { | ||||||
|  |   margin: 15px 0; | ||||||
|  | } | ||||||
|  | .huge { | ||||||
|  |   font-size: 40px; | ||||||
|  | } | ||||||
|  | .panel-green { | ||||||
|  |   border-color: #5cb85c; | ||||||
|  | } | ||||||
|  | .panel-green > .panel-heading { | ||||||
|  |   border-color: #5cb85c; | ||||||
|  |   color: white; | ||||||
|  |   background-color: #5cb85c; | ||||||
|  | } | ||||||
|  | .panel-green > a { | ||||||
|  |   color: #5cb85c; | ||||||
|  | } | ||||||
|  | .panel-green > a:hover { | ||||||
|  |   color: #3d8b3d; | ||||||
|  | } | ||||||
|  | .panel-red { | ||||||
|  |   border-color: #d9534f; | ||||||
|  | } | ||||||
|  | .panel-red > .panel-heading { | ||||||
|  |   border-color: #d9534f; | ||||||
|  |   color: white; | ||||||
|  |   background-color: #d9534f; | ||||||
|  | } | ||||||
|  | .panel-red > a { | ||||||
|  |   color: #d9534f; | ||||||
|  | } | ||||||
|  | .panel-red > a:hover { | ||||||
|  |   color: #b52b27; | ||||||
|  | } | ||||||
|  | .panel-yellow { | ||||||
|  |   border-color: #f0ad4e; | ||||||
|  | } | ||||||
|  | .panel-yellow > .panel-heading { | ||||||
|  |   border-color: #f0ad4e; | ||||||
|  |   color: white; | ||||||
|  |   background-color: #f0ad4e; | ||||||
|  | } | ||||||
|  | .panel-yellow > a { | ||||||
|  |   color: #f0ad4e; | ||||||
|  | } | ||||||
|  | .panel-yellow > a:hover { | ||||||
|  |   color: #df8a13; | ||||||
|  | } | ||||||
|  | .timeline { | ||||||
|  |   position: relative; | ||||||
|  |   padding: 20px 0 20px; | ||||||
|  |   list-style: none; | ||||||
|  | } | ||||||
|  | .timeline:before { | ||||||
|  |   content: " "; | ||||||
|  |   position: absolute; | ||||||
|  |   top: 0; | ||||||
|  |   bottom: 0; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 3px; | ||||||
|  |   margin-left: -1.5px; | ||||||
|  |   background-color: #eeeeee; | ||||||
|  | } | ||||||
|  | .timeline > li { | ||||||
|  |   position: relative; | ||||||
|  |   margin-bottom: 20px; | ||||||
|  | } | ||||||
|  | .timeline > li:before, | ||||||
|  | .timeline > li:after { | ||||||
|  |   content: " "; | ||||||
|  |   display: table; | ||||||
|  | } | ||||||
|  | .timeline > li:after { | ||||||
|  |   clear: both; | ||||||
|  | } | ||||||
|  | .timeline > li:before, | ||||||
|  | .timeline > li:after { | ||||||
|  |   content: " "; | ||||||
|  |   display: table; | ||||||
|  | } | ||||||
|  | .timeline > li:after { | ||||||
|  |   clear: both; | ||||||
|  | } | ||||||
|  | .timeline > li > .timeline-panel { | ||||||
|  |   float: left; | ||||||
|  |   position: relative; | ||||||
|  |   width: 46%; | ||||||
|  |   padding: 20px; | ||||||
|  |   border: 1px solid #d4d4d4; | ||||||
|  |   border-radius: 2px; | ||||||
|  |   -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); | ||||||
|  |   box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); | ||||||
|  | } | ||||||
|  | .timeline > li > .timeline-panel:before { | ||||||
|  |   content: " "; | ||||||
|  |   display: inline-block; | ||||||
|  |   position: absolute; | ||||||
|  |   top: 26px; | ||||||
|  |   right: -15px; | ||||||
|  |   border-top: 15px solid transparent; | ||||||
|  |   border-right: 0 solid #ccc; | ||||||
|  |   border-bottom: 15px solid transparent; | ||||||
|  |   border-left: 15px solid #ccc; | ||||||
|  | } | ||||||
|  | .timeline > li > .timeline-panel:after { | ||||||
|  |   content: " "; | ||||||
|  |   display: inline-block; | ||||||
|  |   position: absolute; | ||||||
|  |   top: 27px; | ||||||
|  |   right: -14px; | ||||||
|  |   border-top: 14px solid transparent; | ||||||
|  |   border-right: 0 solid #fff; | ||||||
|  |   border-bottom: 14px solid transparent; | ||||||
|  |   border-left: 14px solid #fff; | ||||||
|  | } | ||||||
|  | .timeline > li > .timeline-badge { | ||||||
|  |   z-index: 100; | ||||||
|  |   position: absolute; | ||||||
|  |   top: 16px; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 50px; | ||||||
|  |   height: 50px; | ||||||
|  |   margin-left: -25px; | ||||||
|  |   border-radius: 50% 50% 50% 50%; | ||||||
|  |   text-align: center; | ||||||
|  |   font-size: 1.4em; | ||||||
|  |   line-height: 50px; | ||||||
|  |   color: #fff; | ||||||
|  |   background-color: #999999; | ||||||
|  | } | ||||||
|  | .timeline > li.timeline-inverted > .timeline-panel { | ||||||
|  |   float: right; | ||||||
|  | } | ||||||
|  | .timeline > li.timeline-inverted > .timeline-panel:before { | ||||||
|  |   right: auto; | ||||||
|  |   left: -15px; | ||||||
|  |   border-right-width: 15px; | ||||||
|  |   border-left-width: 0; | ||||||
|  | } | ||||||
|  | .timeline > li.timeline-inverted > .timeline-panel:after { | ||||||
|  |   right: auto; | ||||||
|  |   left: -14px; | ||||||
|  |   border-right-width: 14px; | ||||||
|  |   border-left-width: 0; | ||||||
|  | } | ||||||
|  | .timeline-badge.primary { | ||||||
|  |   background-color: #2e6da4 !important; | ||||||
|  | } | ||||||
|  | .timeline-badge.success { | ||||||
|  |   background-color: #3f903f !important; | ||||||
|  | } | ||||||
|  | .timeline-badge.warning { | ||||||
|  |   background-color: #f0ad4e !important; | ||||||
|  | } | ||||||
|  | .timeline-badge.danger { | ||||||
|  |   background-color: #d9534f !important; | ||||||
|  | } | ||||||
|  | .timeline-badge.info { | ||||||
|  |   background-color: #5bc0de !important; | ||||||
|  | } | ||||||
|  | .timeline-title { | ||||||
|  |   margin-top: 0; | ||||||
|  |   color: inherit; | ||||||
|  | } | ||||||
|  | .timeline-body > p, | ||||||
|  | .timeline-body > ul { | ||||||
|  |   margin-bottom: 0; | ||||||
|  | } | ||||||
|  | .timeline-body > p + p { | ||||||
|  |   margin-top: 5px; | ||||||
|  | } | ||||||
|  | @media (max-width: 767px) { | ||||||
|  |   ul.timeline:before { | ||||||
|  |     left: 40px; | ||||||
|  |   } | ||||||
|  |   ul.timeline > li > .timeline-panel { | ||||||
|  |     width: calc(10%); | ||||||
|  |     width: -moz-calc(10%); | ||||||
|  |     width: -webkit-calc(10%); | ||||||
|  |   } | ||||||
|  |   ul.timeline > li > .timeline-badge { | ||||||
|  |     top: 16px; | ||||||
|  |     left: 15px; | ||||||
|  |     margin-left: 0; | ||||||
|  |   } | ||||||
|  |   ul.timeline > li > .timeline-panel { | ||||||
|  |     float: right; | ||||||
|  |   } | ||||||
|  |   ul.timeline > li > .timeline-panel:before { | ||||||
|  |     right: auto; | ||||||
|  |     left: -15px; | ||||||
|  |     border-right-width: 15px; | ||||||
|  |     border-left-width: 0; | ||||||
|  |   } | ||||||
|  |   ul.timeline > li > .timeline-panel:after { | ||||||
|  |     right: auto; | ||||||
|  |     left: -14px; | ||||||
|  |     border-right-width: 14px; | ||||||
|  |     border-left-width: 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								static/dist/css/sb-admin-2.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										47
									
								
								static/dist/js/sb-admin-2.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,47 @@ | |||||||
|  | /*! | ||||||
|  |  * Start Bootstrap - SB Admin 2 v3.3.7+1 (#template-overviews/sb-admin-2) | ||||||
|  |  * Copyright 2013-2016 Start Bootstrap | ||||||
|  |  * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) | ||||||
|  |  */ | ||||||
|  | $(function() { | ||||||
|  |     $('#side-menu').metisMenu(); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | //Loads the correct sidebar on window load, | ||||||
|  | //collapses the sidebar on window resize. | ||||||
|  | // Sets the min-height of #page-wrapper to window size | ||||||
|  | $(function() { | ||||||
|  |     $(window).bind("load resize", function() { | ||||||
|  |         var topOffset = 50; | ||||||
|  |         var width = (this.window.innerWidth > 0) ? this.window.innerWidth : this.screen.width; | ||||||
|  |         if (width < 768) { | ||||||
|  |             $('div.navbar-collapse').addClass('collapse'); | ||||||
|  |             topOffset = 100; // 2-row-menu | ||||||
|  |         } else { | ||||||
|  |             $('div.navbar-collapse').removeClass('collapse'); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         var height = ((this.window.innerHeight > 0) ? this.window.innerHeight : this.screen.height) - 1; | ||||||
|  |         height = height - topOffset; | ||||||
|  |         if (height < 1) height = 1; | ||||||
|  |         if (height > topOffset) { | ||||||
|  |             $("#page-wrapper").css("min-height", (height) + "px"); | ||||||
|  |         } | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     var url = window.location; | ||||||
|  |     // var element = $('ul.nav a').filter(function() { | ||||||
|  |     //     return this.href == url; | ||||||
|  |     // }).addClass('active').parent().parent().addClass('in').parent(); | ||||||
|  |     var element = $('ul.nav a').filter(function() { | ||||||
|  |         return this.href == url; | ||||||
|  |     }).addClass('active').parent(); | ||||||
|  |  | ||||||
|  |     while (true) { | ||||||
|  |         if (element.is('li')) { | ||||||
|  |             element = element.parent().addClass('in').parent(); | ||||||
|  |         } else { | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }); | ||||||
							
								
								
									
										6
									
								
								static/dist/js/sb-admin-2.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,6 @@ | |||||||
|  | /*! | ||||||
|  |  * Start Bootstrap - SB Admin 2 v3.3.7+1 (#template-overviews/sb-admin-2) | ||||||
|  |  * Copyright 2013-2016 Start Bootstrap | ||||||
|  |  * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) | ||||||
|  |  */ | ||||||
|  | $(function(){$("#side-menu").metisMenu()}),$(function(){$(window).bind("load resize",function(){var i=50,n=this.window.innerWidth>0?this.window.innerWidth:this.screen.width;n<768?($("div.navbar-collapse").addClass("collapse"),i=100):$("div.navbar-collapse").removeClass("collapse");var e=(this.window.innerHeight>0?this.window.innerHeight:this.screen.height)-1;e-=i,e<1&&(e=1),e>i&&$("#page-wrapper").css("min-height",e+"px")});for(var i=window.location,n=$("ul.nav a").filter(function(){return this.href==i}).addClass("active").parent();;){if(!n.is("li"))break;n=n.parent().addClass("in").parent()}}); | ||||||
							
								
								
									
										42
									
								
								static/js/sb-admin-2.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,42 @@ | |||||||
|  | $(function() { | ||||||
|  |     $('#side-menu').metisMenu(); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | //Loads the correct sidebar on window load, | ||||||
|  | //collapses the sidebar on window resize. | ||||||
|  | // Sets the min-height of #page-wrapper to window size | ||||||
|  | $(function() { | ||||||
|  |     $(window).bind("load resize", function() { | ||||||
|  |         var topOffset = 50; | ||||||
|  |         var width = (this.window.innerWidth > 0) ? this.window.innerWidth : this.screen.width; | ||||||
|  |         if (width < 768) { | ||||||
|  |             $('div.navbar-collapse').addClass('collapse'); | ||||||
|  |             topOffset = 100; // 2-row-menu | ||||||
|  |         } else { | ||||||
|  |             $('div.navbar-collapse').removeClass('collapse'); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         var height = ((this.window.innerHeight > 0) ? this.window.innerHeight : this.screen.height) - 1; | ||||||
|  |         height = height - topOffset; | ||||||
|  |         if (height < 1) height = 1; | ||||||
|  |         if (height > topOffset) { | ||||||
|  |             $("#page-wrapper").css("min-height", (height) + "px"); | ||||||
|  |         } | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     var url = window.location; | ||||||
|  |     // var element = $('ul.nav a').filter(function() { | ||||||
|  |     //     return this.href == url; | ||||||
|  |     // }).addClass('active').parent().parent().addClass('in').parent(); | ||||||
|  |     var element = $('ul.nav a').filter(function() { | ||||||
|  |         return this.href == url; | ||||||
|  |     }).addClass('active').parent(); | ||||||
|  |  | ||||||
|  |     while (true) { | ||||||
|  |         if (element.is('li')) { | ||||||
|  |             element = element.parent().addClass('in').parent(); | ||||||
|  |         } else { | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }); | ||||||
							
								
								
									
										101
									
								
								static/vendor/bootstrap-social/bootstrap-social.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,101 @@ | |||||||
|  | /* | ||||||
|  |  * Social Buttons for Bootstrap | ||||||
|  |  * | ||||||
|  |  * Copyright 2013-2014 Panayiotis Lipiridis | ||||||
|  |  * Licensed under the MIT License | ||||||
|  |  * | ||||||
|  |  * https://github.com/lipis/bootstrap-social | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | .btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} | ||||||
|  | .btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em} | ||||||
|  | .btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em} | ||||||
|  | .btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em} | ||||||
|  | .btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} | ||||||
|  | .btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em} | ||||||
|  | .btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em} | ||||||
|  | .btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em} | ||||||
|  | .btn-social-icon :first-child{border:none;text-align:center;width:100% !important} | ||||||
|  | .btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0} | ||||||
|  | .btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0} | ||||||
|  | .btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0} | ||||||
|  | .btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:hover,.btn-adn:focus,.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none} | ||||||
|  | .btn-adn.disabled,.btn-adn[disabled],fieldset[disabled] .btn-adn,.btn-adn.disabled:hover,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn:hover,.btn-adn.disabled:focus,.btn-adn[disabled]:focus,fieldset[disabled] .btn-adn:focus,.btn-adn.disabled:active,.btn-adn[disabled]:active,fieldset[disabled] .btn-adn:active,.btn-adn.disabled.active,.btn-adn[disabled].active,fieldset[disabled] .btn-adn.active{background-color:#d87a68;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-adn .badge{color:#d87a68;background-color:#fff} | ||||||
|  | .btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover,.btn-bitbucket:focus,.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none} | ||||||
|  | .btn-bitbucket.disabled,.btn-bitbucket[disabled],fieldset[disabled] .btn-bitbucket,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled:active,.btn-bitbucket[disabled]:active,fieldset[disabled] .btn-bitbucket:active,.btn-bitbucket.disabled.active,.btn-bitbucket[disabled].active,fieldset[disabled] .btn-bitbucket.active{background-color:#205081;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-bitbucket .badge{color:#205081;background-color:#fff} | ||||||
|  | .btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover,.btn-dropbox:focus,.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none} | ||||||
|  | .btn-dropbox.disabled,.btn-dropbox[disabled],fieldset[disabled] .btn-dropbox,.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled:active,.btn-dropbox[disabled]:active,fieldset[disabled] .btn-dropbox:active,.btn-dropbox.disabled.active,.btn-dropbox[disabled].active,fieldset[disabled] .btn-dropbox.active{background-color:#1087dd;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-dropbox .badge{color:#1087dd;background-color:#fff} | ||||||
|  | .btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover,.btn-facebook:focus,.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none} | ||||||
|  | .btn-facebook.disabled,.btn-facebook[disabled],fieldset[disabled] .btn-facebook,.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled:active,.btn-facebook[disabled]:active,fieldset[disabled] .btn-facebook:active,.btn-facebook.disabled.active,.btn-facebook[disabled].active,fieldset[disabled] .btn-facebook.active{background-color:#3b5998;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-facebook .badge{color:#3b5998;background-color:#fff} | ||||||
|  | .btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover,.btn-flickr:focus,.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none} | ||||||
|  | .btn-flickr.disabled,.btn-flickr[disabled],fieldset[disabled] .btn-flickr,.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled:active,.btn-flickr[disabled]:active,fieldset[disabled] .btn-flickr:active,.btn-flickr.disabled.active,.btn-flickr[disabled].active,fieldset[disabled] .btn-flickr.active{background-color:#ff0084;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-flickr .badge{color:#ff0084;background-color:#fff} | ||||||
|  | .btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover,.btn-foursquare:focus,.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none} | ||||||
|  | .btn-foursquare.disabled,.btn-foursquare[disabled],fieldset[disabled] .btn-foursquare,.btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled:active,.btn-foursquare[disabled]:active,fieldset[disabled] .btn-foursquare:active,.btn-foursquare.disabled.active,.btn-foursquare[disabled].active,fieldset[disabled] .btn-foursquare.active{background-color:#f94877;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-foursquare .badge{color:#f94877;background-color:#fff} | ||||||
|  | .btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:hover,.btn-github:focus,.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none} | ||||||
|  | .btn-github.disabled,.btn-github[disabled],fieldset[disabled] .btn-github,.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled:active,.btn-github[disabled]:active,fieldset[disabled] .btn-github:active,.btn-github.disabled.active,.btn-github[disabled].active,fieldset[disabled] .btn-github.active{background-color:#444;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-github .badge{color:#444;background-color:#fff} | ||||||
|  | .btn-google-plus{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google-plus:hover,.btn-google-plus:focus,.btn-google-plus:active,.btn-google-plus.active,.open>.dropdown-toggle.btn-google-plus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-google-plus:active,.btn-google-plus.active,.open>.dropdown-toggle.btn-google-plus{background-image:none} | ||||||
|  | .btn-google-plus.disabled,.btn-google-plus[disabled],fieldset[disabled] .btn-google-plus,.btn-google-plus.disabled:hover,.btn-google-plus[disabled]:hover,fieldset[disabled] .btn-google-plus:hover,.btn-google-plus.disabled:focus,.btn-google-plus[disabled]:focus,fieldset[disabled] .btn-google-plus:focus,.btn-google-plus.disabled:active,.btn-google-plus[disabled]:active,fieldset[disabled] .btn-google-plus:active,.btn-google-plus.disabled.active,.btn-google-plus[disabled].active,fieldset[disabled] .btn-google-plus.active{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-google-plus .badge{color:#dd4b39;background-color:#fff} | ||||||
|  | .btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover,.btn-instagram:focus,.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none} | ||||||
|  | .btn-instagram.disabled,.btn-instagram[disabled],fieldset[disabled] .btn-instagram,.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled:active,.btn-instagram[disabled]:active,fieldset[disabled] .btn-instagram:active,.btn-instagram.disabled.active,.btn-instagram[disabled].active,fieldset[disabled] .btn-instagram.active{background-color:#3f729b;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-instagram .badge{color:#3f729b;background-color:#fff} | ||||||
|  | .btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover,.btn-linkedin:focus,.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none} | ||||||
|  | .btn-linkedin.disabled,.btn-linkedin[disabled],fieldset[disabled] .btn-linkedin,.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled:active,.btn-linkedin[disabled]:active,fieldset[disabled] .btn-linkedin:active,.btn-linkedin.disabled.active,.btn-linkedin[disabled].active,fieldset[disabled] .btn-linkedin.active{background-color:#007bb6;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-linkedin .badge{color:#007bb6;background-color:#fff} | ||||||
|  | .btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover,.btn-microsoft:focus,.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none} | ||||||
|  | .btn-microsoft.disabled,.btn-microsoft[disabled],fieldset[disabled] .btn-microsoft,.btn-microsoft.disabled:hover,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft:hover,.btn-microsoft.disabled:focus,.btn-microsoft[disabled]:focus,fieldset[disabled] .btn-microsoft:focus,.btn-microsoft.disabled:active,.btn-microsoft[disabled]:active,fieldset[disabled] .btn-microsoft:active,.btn-microsoft.disabled.active,.btn-microsoft[disabled].active,fieldset[disabled] .btn-microsoft.active{background-color:#2672ec;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-microsoft .badge{color:#2672ec;background-color:#fff} | ||||||
|  | .btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:hover,.btn-openid:focus,.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none} | ||||||
|  | .btn-openid.disabled,.btn-openid[disabled],fieldset[disabled] .btn-openid,.btn-openid.disabled:hover,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid:hover,.btn-openid.disabled:focus,.btn-openid[disabled]:focus,fieldset[disabled] .btn-openid:focus,.btn-openid.disabled:active,.btn-openid[disabled]:active,fieldset[disabled] .btn-openid:active,.btn-openid.disabled.active,.btn-openid[disabled].active,fieldset[disabled] .btn-openid.active{background-color:#f7931e;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-openid .badge{color:#f7931e;background-color:#fff} | ||||||
|  | .btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover,.btn-pinterest:focus,.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none} | ||||||
|  | .btn-pinterest.disabled,.btn-pinterest[disabled],fieldset[disabled] .btn-pinterest,.btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled:active,.btn-pinterest[disabled]:active,fieldset[disabled] .btn-pinterest:active,.btn-pinterest.disabled.active,.btn-pinterest[disabled].active,fieldset[disabled] .btn-pinterest.active{background-color:#cb2027;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-pinterest .badge{color:#cb2027;background-color:#fff} | ||||||
|  | .btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover,.btn-reddit:focus,.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none} | ||||||
|  | .btn-reddit.disabled,.btn-reddit[disabled],fieldset[disabled] .btn-reddit,.btn-reddit.disabled:hover,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit:hover,.btn-reddit.disabled:focus,.btn-reddit[disabled]:focus,fieldset[disabled] .btn-reddit:focus,.btn-reddit.disabled:active,.btn-reddit[disabled]:active,fieldset[disabled] .btn-reddit:active,.btn-reddit.disabled.active,.btn-reddit[disabled].active,fieldset[disabled] .btn-reddit.active{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-reddit .badge{color:#eff7ff;background-color:#000} | ||||||
|  | .btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover,.btn-soundcloud:focus,.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none} | ||||||
|  | .btn-soundcloud.disabled,.btn-soundcloud[disabled],fieldset[disabled] .btn-soundcloud,.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud[disabled]:focus,fieldset[disabled] .btn-soundcloud:focus,.btn-soundcloud.disabled:active,.btn-soundcloud[disabled]:active,fieldset[disabled] .btn-soundcloud:active,.btn-soundcloud.disabled.active,.btn-soundcloud[disabled].active,fieldset[disabled] .btn-soundcloud.active{background-color:#f50;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-soundcloud .badge{color:#f50;background-color:#fff} | ||||||
|  | .btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover,.btn-tumblr:focus,.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none} | ||||||
|  | .btn-tumblr.disabled,.btn-tumblr[disabled],fieldset[disabled] .btn-tumblr,.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled:active,.btn-tumblr[disabled]:active,fieldset[disabled] .btn-tumblr:active,.btn-tumblr.disabled.active,.btn-tumblr[disabled].active,fieldset[disabled] .btn-tumblr.active{background-color:#2c4762;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-tumblr .badge{color:#2c4762;background-color:#fff} | ||||||
|  | .btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover,.btn-twitter:focus,.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none} | ||||||
|  | .btn-twitter.disabled,.btn-twitter[disabled],fieldset[disabled] .btn-twitter,.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled:active,.btn-twitter[disabled]:active,fieldset[disabled] .btn-twitter:active,.btn-twitter.disabled.active,.btn-twitter[disabled].active,fieldset[disabled] .btn-twitter.active{background-color:#55acee;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-twitter .badge{color:#55acee;background-color:#fff} | ||||||
|  | .btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover,.btn-vimeo:focus,.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none} | ||||||
|  | .btn-vimeo.disabled,.btn-vimeo[disabled],fieldset[disabled] .btn-vimeo,.btn-vimeo.disabled:hover,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo:hover,.btn-vimeo.disabled:focus,.btn-vimeo[disabled]:focus,fieldset[disabled] .btn-vimeo:focus,.btn-vimeo.disabled:active,.btn-vimeo[disabled]:active,fieldset[disabled] .btn-vimeo:active,.btn-vimeo.disabled.active,.btn-vimeo[disabled].active,fieldset[disabled] .btn-vimeo.active{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-vimeo .badge{color:#1ab7ea;background-color:#fff} | ||||||
|  | .btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:hover,.btn-vk:focus,.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none} | ||||||
|  | .btn-vk.disabled,.btn-vk[disabled],fieldset[disabled] .btn-vk,.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled:active,.btn-vk[disabled]:active,fieldset[disabled] .btn-vk:active,.btn-vk.disabled.active,.btn-vk[disabled].active,fieldset[disabled] .btn-vk.active{background-color:#587ea3;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-vk .badge{color:#587ea3;background-color:#fff} | ||||||
|  | .btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover,.btn-yahoo:focus,.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none} | ||||||
|  | .btn-yahoo.disabled,.btn-yahoo[disabled],fieldset[disabled] .btn-yahoo,.btn-yahoo.disabled:hover,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo:hover,.btn-yahoo.disabled:focus,.btn-yahoo[disabled]:focus,fieldset[disabled] .btn-yahoo:focus,.btn-yahoo.disabled:active,.btn-yahoo[disabled]:active,fieldset[disabled] .btn-yahoo:active,.btn-yahoo.disabled.active,.btn-yahoo[disabled].active,fieldset[disabled] .btn-yahoo.active{background-color:#720e9e;border-color:rgba(0,0,0,0.2)} | ||||||
|  | .btn-yahoo .badge{color:#720e9e;background-color:#fff} | ||||||
							
								
								
									
										114
									
								
								static/vendor/bootstrap-social/bootstrap-social.less
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,114 @@ | |||||||
|  | /* | ||||||
|  |  * Social Buttons for Bootstrap | ||||||
|  |  * | ||||||
|  |  * Copyright 2013-2014 Panayiotis Lipiridis | ||||||
|  |  * Licensed under the MIT License | ||||||
|  |  * | ||||||
|  |  * https://github.com/lipis/bootstrap-social | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | @bs-height-base: (@line-height-computed + @padding-base-vertical * 2); | ||||||
|  | @bs-height-lg:   (floor(@font-size-large * @line-height-base) + @padding-large-vertical * 2); | ||||||
|  | @bs-height-sm:   (floor(@font-size-small * 1.5) + @padding-small-vertical * 2); | ||||||
|  | @bs-height-xs:   (floor(@font-size-small * 1.2) + @padding-small-vertical + 1); | ||||||
|  |  | ||||||
|  | .btn-social { | ||||||
|  |   position: relative; | ||||||
|  |   padding-left: (@bs-height-base + @padding-base-horizontal); | ||||||
|  |   text-align: left; | ||||||
|  |   white-space: nowrap; | ||||||
|  |   overflow: hidden; | ||||||
|  |   text-overflow: ellipsis; | ||||||
|  |   > :first-child { | ||||||
|  |     position: absolute; | ||||||
|  |     left: 0; | ||||||
|  |     top: 0; | ||||||
|  |     bottom: 0; | ||||||
|  |     width: @bs-height-base; | ||||||
|  |     line-height: (@bs-height-base + 2); | ||||||
|  |     font-size: 1.6em; | ||||||
|  |     text-align: center; | ||||||
|  |     border-right: 1px solid rgba(0, 0, 0, 0.2); | ||||||
|  |   } | ||||||
|  |   &.btn-lg { | ||||||
|  |     padding-left: (@bs-height-lg + @padding-large-horizontal); | ||||||
|  |     :first-child { | ||||||
|  |       line-height: @bs-height-lg; | ||||||
|  |       width: @bs-height-lg; | ||||||
|  |       font-size: 1.8em; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   &.btn-sm { | ||||||
|  |     padding-left: (@bs-height-sm + @padding-small-horizontal); | ||||||
|  |     :first-child { | ||||||
|  |       line-height: @bs-height-sm; | ||||||
|  |       width: @bs-height-sm; | ||||||
|  |       font-size: 1.4em; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   &.btn-xs { | ||||||
|  |     padding-left: (@bs-height-xs + @padding-small-horizontal); | ||||||
|  |     :first-child { | ||||||
|  |       line-height: @bs-height-xs; | ||||||
|  |       width: @bs-height-xs; | ||||||
|  |       font-size: 1.2em; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-social-icon { | ||||||
|  |   .btn-social; | ||||||
|  |   height: (@bs-height-base + 2); | ||||||
|  |   width: (@bs-height-base + 2); | ||||||
|  |   padding: 0; | ||||||
|  |   :first-child { | ||||||
|  |     border: none; | ||||||
|  |     text-align: center; | ||||||
|  |     width: 100%!important; | ||||||
|  |   } | ||||||
|  |   &.btn-lg { | ||||||
|  |     height: @bs-height-lg; | ||||||
|  |     width: @bs-height-lg; | ||||||
|  |     padding-left: 0; | ||||||
|  |     padding-right: 0; | ||||||
|  |   } | ||||||
|  |   &.btn-sm { | ||||||
|  |     height: (@bs-height-sm + 2); | ||||||
|  |     width: (@bs-height-sm + 2); | ||||||
|  |     padding-left: 0; | ||||||
|  |     padding-right: 0; | ||||||
|  |   } | ||||||
|  |   &.btn-xs { | ||||||
|  |     height: (@bs-height-xs + 2); | ||||||
|  |     width: (@bs-height-xs + 2); | ||||||
|  |     padding-left: 0; | ||||||
|  |     padding-right: 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-social(@color-bg, @color: #fff) { | ||||||
|  |   background-color: @color-bg; | ||||||
|  |   .button-variant(@color, @color-bg, rgba(0,0,0,.2)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | .btn-adn           { .btn-social(#d87a68); } | ||||||
|  | .btn-bitbucket     { .btn-social(#205081); } | ||||||
|  | .btn-dropbox       { .btn-social(#1087dd); } | ||||||
|  | .btn-facebook      { .btn-social(#3b5998); } | ||||||
|  | .btn-flickr        { .btn-social(#ff0084); } | ||||||
|  | .btn-foursquare    { .btn-social(#f94877); } | ||||||
|  | .btn-github        { .btn-social(#444444); } | ||||||
|  | .btn-google-plus   { .btn-social(#dd4b39); } | ||||||
|  | .btn-instagram     { .btn-social(#3f729b); } | ||||||
|  | .btn-linkedin      { .btn-social(#007bb6); } | ||||||
|  | .btn-microsoft     { .btn-social(#2672ec); } | ||||||
|  | .btn-openid        { .btn-social(#f7931e); } | ||||||
|  | .btn-pinterest     { .btn-social(#cb2027); } | ||||||
|  | .btn-reddit        { .btn-social(#eff7ff, #000); } | ||||||
|  | .btn-soundcloud    { .btn-social(#ff5500); } | ||||||
|  | .btn-tumblr        { .btn-social(#2c4762); } | ||||||
|  | .btn-twitter       { .btn-social(#55acee); } | ||||||
|  | .btn-vimeo         { .btn-social(#1ab7ea); } | ||||||
|  | .btn-vk            { .btn-social(#587ea3); } | ||||||
|  | .btn-yahoo         { .btn-social(#720e9e); } | ||||||
							
								
								
									
										114
									
								
								static/vendor/bootstrap-social/bootstrap-social.scss
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,114 @@ | |||||||
|  | /* | ||||||
|  |  * Social Buttons for Bootstrap | ||||||
|  |  * | ||||||
|  |  * Copyright 2013-2014 Panayiotis Lipiridis | ||||||
|  |  * Licensed under the MIT License | ||||||
|  |  * | ||||||
|  |  * https://github.com/lipis/bootstrap-social | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | $bs-height-base: ($line-height-computed + $padding-base-vertical * 2); | ||||||
|  | $bs-height-lg:   (floor($font-size-large * $line-height-base) + $padding-large-vertical * 2); | ||||||
|  | $bs-height-sm:   (floor($font-size-small * 1.5) + $padding-small-vertical * 2); | ||||||
|  | $bs-height-xs:   (floor($font-size-small * 1.2) + $padding-small-vertical + 1); | ||||||
|  |  | ||||||
|  | .btn-social { | ||||||
|  |   position: relative; | ||||||
|  |   padding-left: ($bs-height-base + $padding-base-horizontal); | ||||||
|  |   text-align: left; | ||||||
|  |   white-space: nowrap; | ||||||
|  |   overflow: hidden; | ||||||
|  |   text-overflow: ellipsis; | ||||||
|  |   > :first-child { | ||||||
|  |     position: absolute; | ||||||
|  |     left: 0; | ||||||
|  |     top: 0; | ||||||
|  |     bottom: 0; | ||||||
|  |     width: $bs-height-base; | ||||||
|  |     line-height: ($bs-height-base + 2); | ||||||
|  |     font-size: 1.6em; | ||||||
|  |     text-align: center; | ||||||
|  |     border-right: 1px solid rgba(0, 0, 0, 0.2); | ||||||
|  |   } | ||||||
|  |   &.btn-lg { | ||||||
|  |     padding-left: ($bs-height-lg + $padding-large-horizontal); | ||||||
|  |     :first-child { | ||||||
|  |       line-height: $bs-height-lg; | ||||||
|  |       width: $bs-height-lg; | ||||||
|  |       font-size: 1.8em; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   &.btn-sm { | ||||||
|  |     padding-left: ($bs-height-sm + $padding-small-horizontal); | ||||||
|  |     :first-child { | ||||||
|  |       line-height: $bs-height-sm; | ||||||
|  |       width: $bs-height-sm; | ||||||
|  |       font-size: 1.4em; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   &.btn-xs { | ||||||
|  |     padding-left: ($bs-height-xs + $padding-small-horizontal); | ||||||
|  |     :first-child { | ||||||
|  |       line-height: $bs-height-xs; | ||||||
|  |       width: $bs-height-xs; | ||||||
|  |       font-size: 1.2em; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .btn-social-icon { | ||||||
|  |   @extend .btn-social; | ||||||
|  |   height: ($bs-height-base + 2); | ||||||
|  |   width: ($bs-height-base + 2); | ||||||
|  |   padding: 0; | ||||||
|  |   :first-child { | ||||||
|  |     border: none; | ||||||
|  |     text-align: center; | ||||||
|  |     width: 100%!important; | ||||||
|  |   } | ||||||
|  |   &.btn-lg { | ||||||
|  |     height: $bs-height-lg; | ||||||
|  |     width: $bs-height-lg; | ||||||
|  |     padding-left: 0; | ||||||
|  |     padding-right: 0; | ||||||
|  |   } | ||||||
|  |   &.btn-sm { | ||||||
|  |     height: ($bs-height-sm + 2); | ||||||
|  |     width: ($bs-height-sm + 2); | ||||||
|  |     padding-left: 0; | ||||||
|  |     padding-right: 0; | ||||||
|  |   } | ||||||
|  |   &.btn-xs { | ||||||
|  |     height: ($bs-height-xs + 2); | ||||||
|  |     width: ($bs-height-xs + 2); | ||||||
|  |     padding-left: 0; | ||||||
|  |     padding-right: 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @mixin btn-social($color-bg, $color: #fff) { | ||||||
|  |   background-color: $color-bg; | ||||||
|  |   @include button-variant($color, $color-bg, rgba(0,0,0,.2)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | .btn-adn           { @include btn-social(#d87a68); } | ||||||
|  | .btn-bitbucket     { @include btn-social(#205081); } | ||||||
|  | .btn-dropbox       { @include btn-social(#1087dd); } | ||||||
|  | .btn-facebook      { @include btn-social(#3b5998); } | ||||||
|  | .btn-flickr        { @include btn-social(#ff0084); } | ||||||
|  | .btn-foursquare    { @include btn-social(#f94877); } | ||||||
|  | .btn-github        { @include btn-social(#444444); } | ||||||
|  | .btn-google-plus   { @include btn-social(#dd4b39); } | ||||||
|  | .btn-instagram     { @include btn-social(#3f729b); } | ||||||
|  | .btn-linkedin      { @include btn-social(#007bb6); } | ||||||
|  | .btn-microsoft     { @include btn-social(#2672ec); } | ||||||
|  | .btn-openid        { @include btn-social(#f7931e); } | ||||||
|  | .btn-pinterest     { @include btn-social(#cb2027); } | ||||||
|  | .btn-reddit        { @include btn-social(#eff7ff, #000); } | ||||||
|  | .btn-soundcloud    { @include btn-social(#ff5500); } | ||||||
|  | .btn-tumblr        { @include btn-social(#2c4762); } | ||||||
|  | .btn-twitter       { @include btn-social(#55acee); } | ||||||
|  | .btn-vimeo         { @include btn-social(#1ab7ea); } | ||||||
|  | .btn-vk            { @include btn-social(#587ea3); } | ||||||
|  | .btn-yahoo         { @include btn-social(#720e9e); } | ||||||
							
								
								
									
										6757
									
								
								static/vendor/bootstrap/css/bootstrap.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										6
									
								
								static/vendor/bootstrap/css/bootstrap.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								static/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										288
									
								
								static/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,288 @@ | |||||||
|  | <?xml version="1.0" standalone="no"?> | ||||||
|  | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > | ||||||
|  | <svg xmlns="http://www.w3.org/2000/svg"> | ||||||
|  | <metadata></metadata> | ||||||
|  | <defs> | ||||||
|  | <font id="glyphicons_halflingsregular" horiz-adv-x="1200" > | ||||||
|  | <font-face units-per-em="1200" ascent="960" descent="-240" /> | ||||||
|  | <missing-glyph horiz-adv-x="500" /> | ||||||
|  | <glyph horiz-adv-x="0" /> | ||||||
|  | <glyph horiz-adv-x="400" /> | ||||||
|  | <glyph unicode=" " /> | ||||||
|  | <glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> | ||||||
|  | <glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode=" " /> | ||||||
|  | <glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="650" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="1300" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="650" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="1300" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="433" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="325" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="216" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="216" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="162" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="260" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="72" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="260" /> | ||||||
|  | <glyph unicode=" " horiz-adv-x="325" /> | ||||||
|  | <glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> | ||||||
|  | <glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> | ||||||
|  | <glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> | ||||||
|  | <glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> | ||||||
|  | <glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> | ||||||
|  | <glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> | ||||||
|  | <glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> | ||||||
|  | <glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> | ||||||
|  | <glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> | ||||||
|  | <glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> | ||||||
|  | <glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> | ||||||
|  | <glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> | ||||||
|  | <glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> | ||||||
|  | <glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> | ||||||
|  | <glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> | ||||||
|  | <glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> | ||||||
|  | <glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> | ||||||
|  | <glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> | ||||||
|  | <glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> | ||||||
|  | <glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> | ||||||
|  | <glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> | ||||||
|  | <glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> | ||||||
|  | <glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> | ||||||
|  | <glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> | ||||||
|  | <glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> | ||||||
|  | <glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> | ||||||
|  | <glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> | ||||||
|  | <glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> | ||||||
|  | <glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> | ||||||
|  | <glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> | ||||||
|  | <glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> | ||||||
|  | <glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> | ||||||
|  | <glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> | ||||||
|  | <glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> | ||||||
|  | <glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> | ||||||
|  | <glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> | ||||||
|  | <glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> | ||||||
|  | <glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> | ||||||
|  | <glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> | ||||||
|  | <glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> | ||||||
|  | <glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> | ||||||
|  | <glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> | ||||||
|  | <glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> | ||||||
|  | <glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> | ||||||
|  | <glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> | ||||||
|  | <glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> | ||||||
|  | <glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> | ||||||
|  | <glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> | ||||||
|  | <glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> | ||||||
|  | <glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> | ||||||
|  | <glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> | ||||||
|  | <glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> | ||||||
|  | <glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> | ||||||
|  | <glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> | ||||||
|  | <glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> | ||||||
|  | <glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> | ||||||
|  | <glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> | ||||||
|  | <glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> | ||||||
|  | <glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> | ||||||
|  | <glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> | ||||||
|  | <glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> | ||||||
|  | <glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> | ||||||
|  | <glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> | ||||||
|  | <glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> | ||||||
|  | <glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> | ||||||
|  | <glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> | ||||||
|  | <glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> | ||||||
|  | <glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> | ||||||
|  | <glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> | ||||||
|  | <glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> | ||||||
|  | <glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> | ||||||
|  | <glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> | ||||||
|  | <glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> | ||||||
|  | <glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> | ||||||
|  | <glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> | ||||||
|  | <glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> | ||||||
|  | <glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> | ||||||
|  | <glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> | ||||||
|  | <glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> | ||||||
|  | <glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> | ||||||
|  | <glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> | ||||||
|  | <glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> | ||||||
|  | <glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> | ||||||
|  | <glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> | ||||||
|  | <glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> | ||||||
|  | <glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> | ||||||
|  | <glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> | ||||||
|  | <glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> | ||||||
|  | <glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> | ||||||
|  | <glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> | ||||||
|  | <glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> | ||||||
|  | <glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> | ||||||
|  | <glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> | ||||||
|  | <glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> | ||||||
|  | <glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> | ||||||
|  | <glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> | ||||||
|  | <glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> | ||||||
|  | <glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> | ||||||
|  | <glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> | ||||||
|  | <glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> | ||||||
|  | <glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> | ||||||
|  | <glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> | ||||||
|  | <glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> | ||||||
|  | <glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> | ||||||
|  | <glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> | ||||||
|  | <glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> | ||||||
|  | <glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> | ||||||
|  | <glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> | ||||||
|  | <glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> | ||||||
|  | <glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> | ||||||
|  | <glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> | ||||||
|  | <glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> | ||||||
|  | <glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> | ||||||
|  | <glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> | ||||||
|  | <glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> | ||||||
|  | <glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> | ||||||
|  | <glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> | ||||||
|  | <glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> | ||||||
|  | <glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> | ||||||
|  | <glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> | ||||||
|  | <glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> | ||||||
|  | <glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> | ||||||
|  | <glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> | ||||||
|  | <glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> | ||||||
|  | <glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> | ||||||
|  | <glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> | ||||||
|  | <glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> | ||||||
|  | <glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> | ||||||
|  | <glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> | ||||||
|  | <glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> | ||||||
|  | <glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> | ||||||
|  | <glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> | ||||||
|  | <glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> | ||||||
|  | <glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> | ||||||
|  | <glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> | ||||||
|  | <glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> | ||||||
|  | <glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> | ||||||
|  | <glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> | ||||||
|  | <glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> | ||||||
|  | <glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> | ||||||
|  | <glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> | ||||||
|  | <glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> | ||||||
|  | <glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> | ||||||
|  | <glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> | ||||||
|  | <glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> | ||||||
|  | <glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> | ||||||
|  | <glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> | ||||||
|  | <glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> | ||||||
|  | <glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> | ||||||
|  | <glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> | ||||||
|  | <glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> | ||||||
|  | <glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> | ||||||
|  | <glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> | ||||||
|  | <glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> | ||||||
|  | <glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> | ||||||
|  | <glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> | ||||||
|  | <glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> | ||||||
|  | <glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> | ||||||
|  | <glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> | ||||||
|  | <glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> | ||||||
|  | <glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> | ||||||
|  | <glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> | ||||||
|  | <glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> | ||||||
|  | <glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> | ||||||
|  | <glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> | ||||||
|  | <glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> | ||||||
|  | <glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> | ||||||
|  | <glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> | ||||||
|  | <glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> | ||||||
|  | <glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> | ||||||
|  | <glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> | ||||||
|  | <glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> | ||||||
|  | <glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> | ||||||
|  | <glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> | ||||||
|  | <glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> | ||||||
|  | <glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> | ||||||
|  | <glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> | ||||||
|  | <glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> | ||||||
|  | <glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> | ||||||
|  | <glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> | ||||||
|  | <glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> | ||||||
|  | <glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> | ||||||
|  | <glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> | ||||||
|  | <glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> | ||||||
|  | <glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> | ||||||
|  | <glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> | ||||||
|  | <glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> | ||||||
|  | <glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> | ||||||
|  | <glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> | ||||||
|  | <glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> | ||||||
|  | <glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> | ||||||
|  | <glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> | ||||||
|  | <glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> | ||||||
|  | <glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> | ||||||
|  | <glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> | ||||||
|  | </font> | ||||||
|  | </defs></svg>  | ||||||
| After Width: | Height: | Size: 106 KiB | 
							
								
								
									
										
											BIN
										
									
								
								static/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								static/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2377
									
								
								static/vendor/bootstrap/js/bootstrap.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										7
									
								
								static/vendor/bootstrap/js/bootstrap.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										314
									
								
								static/vendor/datatables-plugins/dataTables.bootstrap.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,314 @@ | |||||||
|  | div.dataTables_length label { | ||||||
|  | 	font-weight: normal; | ||||||
|  | 	text-align: left; | ||||||
|  | 	white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_length select { | ||||||
|  | 	width: 75px; | ||||||
|  | 	display: inline-block; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_filter { | ||||||
|  | 	text-align: right; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_filter label { | ||||||
|  | 	font-weight: normal; | ||||||
|  | 	white-space: nowrap; | ||||||
|  | 	text-align: left; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_filter input { | ||||||
|  | 	margin-left: 0.5em; | ||||||
|  | 	display: inline-block; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_info { | ||||||
|  | 	padding-top: 8px; | ||||||
|  | 	white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_paginate { | ||||||
|  | 	margin: 0; | ||||||
|  | 	white-space: nowrap; | ||||||
|  | 	text-align: right; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_paginate ul.pagination { | ||||||
|  | 	margin: 2px 0; | ||||||
|  | 	white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @media screen and (max-width: 767px) { | ||||||
|  | 	div.dataTables_length, | ||||||
|  | 	div.dataTables_filter, | ||||||
|  | 	div.dataTables_info, | ||||||
|  | 	div.dataTables_paginate { | ||||||
|  | 		text-align: center; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | table.dataTable td, | ||||||
|  | table.dataTable th { | ||||||
|  | 	-webkit-box-sizing: content-box; | ||||||
|  | 	-moz-box-sizing: content-box; | ||||||
|  | 	box-sizing: content-box; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | table.dataTable { | ||||||
|  | 	clear: both; | ||||||
|  | 	margin-top: 6px !important; | ||||||
|  | 	margin-bottom: 6px !important; | ||||||
|  | 	max-width: none !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc, | ||||||
|  | table.dataTable thead .sorting_asc_disabled, | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  | 	cursor: pointer; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable thead .sorting { background: url('../images/sort_both.png') no-repeat center right; } | ||||||
|  | table.dataTable thead .sorting_asc { background: url('../images/sort_asc.png') no-repeat center right; } | ||||||
|  | table.dataTable thead .sorting_desc { background: url('../images/sort_desc.png') no-repeat center right; } | ||||||
|  |  | ||||||
|  | table.dataTable thead .sorting_asc_disabled { background: url('../images/sort_asc_disabled.png') no-repeat center right; } | ||||||
|  | table.dataTable thead .sorting_desc_disabled { background: url('../images/sort_desc_disabled.png') no-repeat center right; } | ||||||
|  |  | ||||||
|  | table.dataTable thead > tr > th { | ||||||
|  | 	padding-left: 18px; | ||||||
|  | 	padding-right: 18px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable th:active { | ||||||
|  | 	outline: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Scrolling */ | ||||||
|  | div.dataTables_scrollHead table { | ||||||
|  | 	margin-bottom: 0 !important; | ||||||
|  | 	border-bottom-left-radius: 0; | ||||||
|  | 	border-bottom-right-radius: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollHead table thead tr:last-child th:first-child, | ||||||
|  | div.dataTables_scrollHead table thead tr:last-child td:first-child { | ||||||
|  | 	border-bottom-left-radius: 0 !important; | ||||||
|  | 	border-bottom-right-radius: 0 !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollBody table { | ||||||
|  | 	border-top: none; | ||||||
|  | 	margin-top: 0 !important; | ||||||
|  | 	margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollBody tbody tr:first-child th, | ||||||
|  | div.dataTables_scrollBody tbody tr:first-child td { | ||||||
|  | 	border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollFoot table { | ||||||
|  | 	margin-top: 0 !important; | ||||||
|  | 	border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* Frustratingly the border-collapse:collapse used by Bootstrap makes the column | ||||||
|  |    width calculations when using scrolling impossible to align columns. We have | ||||||
|  |    to use separate | ||||||
|  |  */ | ||||||
|  | table.table-bordered.dataTable { | ||||||
|  | 	border-collapse: separate !important; | ||||||
|  | } | ||||||
|  | table.table-bordered thead th, | ||||||
|  | table.table-bordered thead td { | ||||||
|  | 	border-left-width: 0; | ||||||
|  | 	border-top-width: 0; | ||||||
|  | } | ||||||
|  | table.table-bordered tbody th, | ||||||
|  | table.table-bordered tbody td { | ||||||
|  | 	border-left-width: 0; | ||||||
|  | 	border-bottom-width: 0; | ||||||
|  | } | ||||||
|  | table.table-bordered th:last-child, | ||||||
|  | table.table-bordered td:last-child { | ||||||
|  | 	border-right-width: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_scrollHead table.table-bordered { | ||||||
|  | 	border-bottom-width: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * TableTools styles | ||||||
|  |  */ | ||||||
|  | .table.dataTable tbody tr.active td, | ||||||
|  | .table.dataTable tbody tr.active th { | ||||||
|  | 	background-color: #08C; | ||||||
|  | 	color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .table.dataTable tbody tr.active:hover td, | ||||||
|  | .table.dataTable tbody tr.active:hover th { | ||||||
|  | 	background-color: #0075b0 !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .table.dataTable tbody tr.active th > a, | ||||||
|  | .table.dataTable tbody tr.active td > a { | ||||||
|  | 	color: white; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .table-striped.dataTable tbody tr.active:nth-child(odd) td, | ||||||
|  | .table-striped.dataTable tbody tr.active:nth-child(odd) th { | ||||||
|  | 	background-color: #017ebc; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.DTTT_selectable tbody tr { | ||||||
|  | 	cursor: pointer; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.DTTT .btn:hover { | ||||||
|  | 	text-decoration: none !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ul.DTTT_dropdown.dropdown-menu { | ||||||
|  |   z-index: 2003; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ul.DTTT_dropdown.dropdown-menu a { | ||||||
|  | 	color: #333 !important; /* needed only when demo_page.css is included */ | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ul.DTTT_dropdown.dropdown-menu li { | ||||||
|  | 	position: relative; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ul.DTTT_dropdown.dropdown-menu li:hover a { | ||||||
|  | 	background-color: #0088cc; | ||||||
|  | 	color: white !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.DTTT_collection_background { | ||||||
|  | 	z-index: 2002;	 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* TableTools information display */ | ||||||
|  | div.DTTT_print_info { | ||||||
|  | 	position: fixed; | ||||||
|  | 	top: 50%; | ||||||
|  | 	left: 50%; | ||||||
|  | 	width: 400px; | ||||||
|  | 	height: 150px; | ||||||
|  | 	margin-left: -200px; | ||||||
|  | 	margin-top: -75px; | ||||||
|  | 	text-align: center; | ||||||
|  | 	color: #333; | ||||||
|  | 	padding: 10px 30px; | ||||||
|  | 	opacity: 0.95; | ||||||
|  |  | ||||||
|  | 	background-color: white; | ||||||
|  | 	border: 1px solid rgba(0, 0, 0, 0.2); | ||||||
|  | 	border-radius: 6px; | ||||||
|  | 	 | ||||||
|  | 	-webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); | ||||||
|  | 	        box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.DTTT_print_info h6 { | ||||||
|  | 	font-weight: normal; | ||||||
|  | 	font-size: 28px; | ||||||
|  | 	line-height: 28px; | ||||||
|  | 	margin: 1em; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.DTTT_print_info p { | ||||||
|  | 	font-size: 14px; | ||||||
|  | 	line-height: 20px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_processing { | ||||||
|  |     position: absolute; | ||||||
|  |     top: 50%; | ||||||
|  |     left: 50%; | ||||||
|  |     width: 100%; | ||||||
|  |     height: 60px; | ||||||
|  |     margin-left: -50%; | ||||||
|  |     margin-top: -25px; | ||||||
|  |     padding-top: 20px; | ||||||
|  |     padding-bottom: 20px; | ||||||
|  |     text-align: center; | ||||||
|  |     font-size: 1.2em; | ||||||
|  |     background-color: white; | ||||||
|  |     background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0))); | ||||||
|  |     background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); | ||||||
|  |     background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); | ||||||
|  |     background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); | ||||||
|  |     background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); | ||||||
|  |     background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * FixedColumns styles | ||||||
|  |  */ | ||||||
|  | div.DTFC_LeftHeadWrapper table, | ||||||
|  | div.DTFC_LeftFootWrapper table, | ||||||
|  | div.DTFC_RightHeadWrapper table, | ||||||
|  | div.DTFC_RightFootWrapper table, | ||||||
|  | table.DTFC_Cloned tr.even { | ||||||
|  |     background-color: white; | ||||||
|  |     margin-bottom: 0; | ||||||
|  | } | ||||||
|  |   | ||||||
|  | div.DTFC_RightHeadWrapper table , | ||||||
|  | div.DTFC_LeftHeadWrapper table { | ||||||
|  | 	border-bottom: none !important; | ||||||
|  |     margin-bottom: 0 !important; | ||||||
|  |     border-top-right-radius: 0 !important; | ||||||
|  |     border-bottom-left-radius: 0 !important; | ||||||
|  |     border-bottom-right-radius: 0 !important; | ||||||
|  | } | ||||||
|  |   | ||||||
|  | div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child, | ||||||
|  | div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child, | ||||||
|  | div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child, | ||||||
|  | div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child { | ||||||
|  |     border-bottom-left-radius: 0 !important; | ||||||
|  |     border-bottom-right-radius: 0 !important; | ||||||
|  | } | ||||||
|  |   | ||||||
|  | div.DTFC_RightBodyWrapper table, | ||||||
|  | div.DTFC_LeftBodyWrapper table { | ||||||
|  |     border-top: none; | ||||||
|  |     margin: 0 !important; | ||||||
|  | } | ||||||
|  |   | ||||||
|  | div.DTFC_RightBodyWrapper tbody tr:first-child th, | ||||||
|  | div.DTFC_RightBodyWrapper tbody tr:first-child td, | ||||||
|  | div.DTFC_LeftBodyWrapper tbody tr:first-child th, | ||||||
|  | div.DTFC_LeftBodyWrapper tbody tr:first-child td { | ||||||
|  |     border-top: none; | ||||||
|  | } | ||||||
|  |   | ||||||
|  | div.DTFC_RightFootWrapper table, | ||||||
|  | div.DTFC_LeftFootWrapper table { | ||||||
|  |     border-top: none; | ||||||
|  |     margin-top: 0 !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * FixedHeader styles | ||||||
|  |  */ | ||||||
|  | div.FixedHeader_Cloned table { | ||||||
|  | 	margin: 0 !important | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										186
									
								
								static/vendor/datatables-plugins/dataTables.bootstrap.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,186 @@ | |||||||
|  | /*! DataTables Bootstrap 3 integration | ||||||
|  |  * ©2011-2014 SpryMedia Ltd - datatables.net/license | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and | ||||||
|  |  * DataTables 1.10 or newer. | ||||||
|  |  * | ||||||
|  |  * This file sets the defaults and adds options to DataTables to style its | ||||||
|  |  * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap | ||||||
|  |  * for further information. | ||||||
|  |  */ | ||||||
|  | (function(window, document, undefined){ | ||||||
|  |  | ||||||
|  | var factory = function( $, DataTable ) { | ||||||
|  | "use strict"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Set the defaults for DataTables initialisation */ | ||||||
|  | $.extend( true, DataTable.defaults, { | ||||||
|  | 	dom: | ||||||
|  | 		"<'row'<'col-sm-6'l><'col-sm-6'f>>" + | ||||||
|  | 		"<'row'<'col-sm-12'tr>>" + | ||||||
|  | 		"<'row'<'col-sm-6'i><'col-sm-6'p>>", | ||||||
|  | 	renderer: 'bootstrap' | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Default class modification */ | ||||||
|  | $.extend( DataTable.ext.classes, { | ||||||
|  | 	sWrapper:      "dataTables_wrapper form-inline dt-bootstrap", | ||||||
|  | 	sFilterInput:  "form-control input-sm", | ||||||
|  | 	sLengthSelect: "form-control input-sm" | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Bootstrap paging button renderer */ | ||||||
|  | DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { | ||||||
|  | 	var api     = new DataTable.Api( settings ); | ||||||
|  | 	var classes = settings.oClasses; | ||||||
|  | 	var lang    = settings.oLanguage.oPaginate; | ||||||
|  | 	var btnDisplay, btnClass; | ||||||
|  |  | ||||||
|  | 	var attach = function( container, buttons ) { | ||||||
|  | 		var i, ien, node, button; | ||||||
|  | 		var clickHandler = function ( e ) { | ||||||
|  | 			e.preventDefault(); | ||||||
|  | 			if ( !$(e.currentTarget).hasClass('disabled') ) { | ||||||
|  | 				api.page( e.data.action ).draw( false ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) { | ||||||
|  | 			button = buttons[i]; | ||||||
|  |  | ||||||
|  | 			if ( $.isArray( button ) ) { | ||||||
|  | 				attach( container, button ); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				btnDisplay = ''; | ||||||
|  | 				btnClass = ''; | ||||||
|  |  | ||||||
|  | 				switch ( button ) { | ||||||
|  | 					case 'ellipsis': | ||||||
|  | 						btnDisplay = '…'; | ||||||
|  | 						btnClass = 'disabled'; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'first': | ||||||
|  | 						btnDisplay = lang.sFirst; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'previous': | ||||||
|  | 						btnDisplay = lang.sPrevious; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'next': | ||||||
|  | 						btnDisplay = lang.sNext; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'last': | ||||||
|  | 						btnDisplay = lang.sLast; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					default: | ||||||
|  | 						btnDisplay = button + 1; | ||||||
|  | 						btnClass = page === button ? | ||||||
|  | 							'active' : ''; | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ( btnDisplay ) { | ||||||
|  | 					node = $('<li>', { | ||||||
|  | 							'class': classes.sPageButton+' '+btnClass, | ||||||
|  | 							'aria-controls': settings.sTableId, | ||||||
|  | 							'tabindex': settings.iTabIndex, | ||||||
|  | 							'id': idx === 0 && typeof button === 'string' ? | ||||||
|  | 								settings.sTableId +'_'+ button : | ||||||
|  | 								null | ||||||
|  | 						} ) | ||||||
|  | 						.append( $('<a>', { | ||||||
|  | 								'href': '#' | ||||||
|  | 							} ) | ||||||
|  | 							.html( btnDisplay ) | ||||||
|  | 						) | ||||||
|  | 						.appendTo( container ); | ||||||
|  |  | ||||||
|  | 					settings.oApi._fnBindAction( | ||||||
|  | 						node, {action: button}, clickHandler | ||||||
|  | 					); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	attach( | ||||||
|  | 		$(host).empty().html('<ul class="pagination"/>').children('ul'), | ||||||
|  | 		buttons | ||||||
|  | 	); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * TableTools Bootstrap compatibility | ||||||
|  |  * Required TableTools 2.1+ | ||||||
|  |  */ | ||||||
|  | if ( DataTable.TableTools ) { | ||||||
|  | 	// Set the classes that TableTools uses to something suitable for Bootstrap | ||||||
|  | 	$.extend( true, DataTable.TableTools.classes, { | ||||||
|  | 		"container": "DTTT btn-group", | ||||||
|  | 		"buttons": { | ||||||
|  | 			"normal": "btn btn-default", | ||||||
|  | 			"disabled": "disabled" | ||||||
|  | 		}, | ||||||
|  | 		"collection": { | ||||||
|  | 			"container": "DTTT_dropdown dropdown-menu", | ||||||
|  | 			"buttons": { | ||||||
|  | 				"normal": "", | ||||||
|  | 				"disabled": "disabled" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		"print": { | ||||||
|  | 			"info": "DTTT_print_info" | ||||||
|  | 		}, | ||||||
|  | 		"select": { | ||||||
|  | 			"row": "active" | ||||||
|  | 		} | ||||||
|  | 	} ); | ||||||
|  |  | ||||||
|  | 	// Have the collection use a bootstrap compatible drop down | ||||||
|  | 	$.extend( true, DataTable.TableTools.DEFAULTS.oTags, { | ||||||
|  | 		"collection": { | ||||||
|  | 			"container": "ul", | ||||||
|  | 			"button": "li", | ||||||
|  | 			"liner": "a" | ||||||
|  | 		} | ||||||
|  | 	} ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | }; // /factory | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // Define as an AMD module if possible | ||||||
|  | if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 	define( ['jquery', 'datatables'], factory ); | ||||||
|  | } | ||||||
|  | else if ( typeof exports === 'object' ) { | ||||||
|  |     // Node/CommonJS | ||||||
|  |     factory( require('jquery'), require('datatables') ); | ||||||
|  | } | ||||||
|  | else if ( jQuery ) { | ||||||
|  | 	// Otherwise simply initialise as normal, stopping multiple evaluation | ||||||
|  | 	factory( jQuery, jQuery.fn.dataTable ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | })(window, document); | ||||||
|  |  | ||||||
							
								
								
									
										8
									
								
								static/vendor/datatables-plugins/dataTables.bootstrap.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables Bootstrap 3 integration | ||||||
|  |  ©2011-2014 SpryMedia Ltd - datatables.net/license | ||||||
|  | */ | ||||||
|  | (function(){var f=function(c,b){c.extend(!0,b.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-6'i><'col-sm-6'p>>",renderer:"bootstrap"});c.extend(b.ext.classes,{sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm"});b.ext.renderer.pageButton.bootstrap=function(g,f,p,k,h,l){var q=new b.Api(g),r=g.oClasses,i=g.oLanguage.oPaginate,d,e,o=function(b,f){var j,m,n,a,k=function(a){a.preventDefault(); | ||||||
|  | c(a.currentTarget).hasClass("disabled")||q.page(a.data.action).draw(!1)};j=0;for(m=f.length;j<m;j++)if(a=f[j],c.isArray(a))o(b,a);else{e=d="";switch(a){case "ellipsis":d="…";e="disabled";break;case "first":d=i.sFirst;e=a+(0<h?"":" disabled");break;case "previous":d=i.sPrevious;e=a+(0<h?"":" disabled");break;case "next":d=i.sNext;e=a+(h<l-1?"":" disabled");break;case "last":d=i.sLast;e=a+(h<l-1?"":" disabled");break;default:d=a+1,e=h===a?"active":""}d&&(n=c("<li>",{"class":r.sPageButton+" "+ | ||||||
|  | e,"aria-controls":g.sTableId,tabindex:g.iTabIndex,id:0===p&&"string"===typeof a?g.sTableId+"_"+a:null}).append(c("<a>",{href:"#"}).html(d)).appendTo(b),g.oApi._fnBindAction(n,{action:a},k))}};o(c(f).empty().html('<ul class="pagination"/>').children("ul"),k)};b.TableTools&&(c.extend(!0,b.TableTools.classes,{container:"DTTT btn-group",buttons:{normal:"btn btn-default",disabled:"disabled"},collection:{container:"DTTT_dropdown dropdown-menu",buttons:{normal:"",disabled:"disabled"}},print:{info:"DTTT_print_info"}, | ||||||
|  | select:{row:"active"}}),c.extend(!0,b.TableTools.DEFAULTS.oTags,{collection:{container:"ul",button:"li",liner:"a"}}))};"function"===typeof define&&define.amd?define(["jquery","datatables"],f):"object"===typeof exports?f(require("jquery"),require("datatables")):jQuery&&f(jQuery,jQuery.fn.dataTable)})(window,document); | ||||||
							
								
								
									
										442
									
								
								static/vendor/datatables-plugins/index.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,442 @@ | |||||||
|  | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> | ||||||
|  | <html> | ||||||
|  | 	<head> | ||||||
|  | 		<meta http-equiv="content-type" content="text/html; charset=utf-8" /> | ||||||
|  | 		 | ||||||
|  | 		<title>DataTables Bootstrap 3 example</title> | ||||||
|  |  | ||||||
|  | 		<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> | ||||||
|  | 		<link rel="stylesheet" type="text/css" href="dataTables.bootstrap.css"> | ||||||
|  |  | ||||||
|  | 		<script type="text/javascript" language="javascript" src="//code.jquery.com/jquery-1.11.1.min.js"></script> | ||||||
|  | 		<script type="text/javascript" language="javascript" src="//cdn.datatables.net/1.10.3/js/jquery.dataTables.min.js"></script> | ||||||
|  | 		<script type="text/javascript" language="javascript" src="dataTables.bootstrap.js"></script> | ||||||
|  | 		<script type="text/javascript" charset="utf-8"> | ||||||
|  | 			$(document).ready(function() { | ||||||
|  | 				$('#example').dataTable(); | ||||||
|  | 			} ); | ||||||
|  | 		</script> | ||||||
|  | 	</head> | ||||||
|  | 	<body> | ||||||
|  | 		<div class="container"> | ||||||
|  | 			 | ||||||
|  | <table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered" id="example"> | ||||||
|  | 	<thead> | ||||||
|  | 		<tr> | ||||||
|  | 			<th>Rendering engine</th> | ||||||
|  | 			<th>Browser</th> | ||||||
|  | 			<th>Platform(s)</th> | ||||||
|  | 			<th>Engine version</th> | ||||||
|  | 			<th>CSS grade</th> | ||||||
|  | 		</tr> | ||||||
|  | 	</thead> | ||||||
|  | 	<tbody> | ||||||
|  | 		<tr class="odd gradeX"> | ||||||
|  | 			<td>Trident</td> | ||||||
|  | 			<td>Internet | ||||||
|  | 				 Explorer 4.0</td> | ||||||
|  | 			<td>Win 95+</td> | ||||||
|  | 			<td class="center"> 4</td> | ||||||
|  | 			<td class="center">X</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="even gradeC"> | ||||||
|  | 			<td>Trident</td> | ||||||
|  | 			<td>Internet | ||||||
|  | 				 Explorer 5.0</td> | ||||||
|  | 			<td>Win 95+</td> | ||||||
|  | 			<td class="center">5</td> | ||||||
|  | 			<td class="center">C</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="odd gradeA"> | ||||||
|  | 			<td>Trident</td> | ||||||
|  | 			<td>Internet | ||||||
|  | 				 Explorer 5.5</td> | ||||||
|  | 			<td>Win 95+</td> | ||||||
|  | 			<td class="center">5.5</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="even gradeA"> | ||||||
|  | 			<td>Trident</td> | ||||||
|  | 			<td>Internet | ||||||
|  | 				 Explorer 6</td> | ||||||
|  | 			<td>Win 98+</td> | ||||||
|  | 			<td class="center">6</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="odd gradeA"> | ||||||
|  | 			<td>Trident</td> | ||||||
|  | 			<td>Internet Explorer 7</td> | ||||||
|  | 			<td>Win XP SP2+</td> | ||||||
|  | 			<td class="center">7</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="even gradeA"> | ||||||
|  | 			<td>Trident</td> | ||||||
|  | 			<td>AOL browser (AOL desktop)</td> | ||||||
|  | 			<td>Win XP</td> | ||||||
|  | 			<td class="center">6</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Firefox 1.0</td> | ||||||
|  | 			<td>Win 98+ / OSX.2+</td> | ||||||
|  | 			<td class="center">1.7</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Firefox 1.5</td> | ||||||
|  | 			<td>Win 98+ / OSX.2+</td> | ||||||
|  | 			<td class="center">1.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Firefox 2.0</td> | ||||||
|  | 			<td>Win 98+ / OSX.2+</td> | ||||||
|  | 			<td class="center">1.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Firefox 3.0</td> | ||||||
|  | 			<td>Win 2k+ / OSX.3+</td> | ||||||
|  | 			<td class="center">1.9</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Camino 1.0</td> | ||||||
|  | 			<td>OSX.2+</td> | ||||||
|  | 			<td class="center">1.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Camino 1.5</td> | ||||||
|  | 			<td>OSX.3+</td> | ||||||
|  | 			<td class="center">1.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Netscape 7.2</td> | ||||||
|  | 			<td>Win 95+ / Mac OS 8.6-9.2</td> | ||||||
|  | 			<td class="center">1.7</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Netscape Browser 8</td> | ||||||
|  | 			<td>Win 98SE+</td> | ||||||
|  | 			<td class="center">1.7</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Netscape Navigator 9</td> | ||||||
|  | 			<td>Win 98+ / OSX.2+</td> | ||||||
|  | 			<td class="center">1.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.0</td> | ||||||
|  | 			<td>Win 95+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.1</td> | ||||||
|  | 			<td>Win 95+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1.1</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.2</td> | ||||||
|  | 			<td>Win 95+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1.2</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.3</td> | ||||||
|  | 			<td>Win 95+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1.3</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.4</td> | ||||||
|  | 			<td>Win 95+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1.4</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.5</td> | ||||||
|  | 			<td>Win 95+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1.5</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.6</td> | ||||||
|  | 			<td>Win 95+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1.6</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.7</td> | ||||||
|  | 			<td>Win 98+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1.7</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Mozilla 1.8</td> | ||||||
|  | 			<td>Win 98+ / OSX.1+</td> | ||||||
|  | 			<td class="center">1.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Seamonkey 1.1</td> | ||||||
|  | 			<td>Win 98+ / OSX.2+</td> | ||||||
|  | 			<td class="center">1.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Gecko</td> | ||||||
|  | 			<td>Epiphany 2.20</td> | ||||||
|  | 			<td>Gnome</td> | ||||||
|  | 			<td class="center">1.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Webkit</td> | ||||||
|  | 			<td>Safari 1.2</td> | ||||||
|  | 			<td>OSX.3</td> | ||||||
|  | 			<td class="center">125.5</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Webkit</td> | ||||||
|  | 			<td>Safari 1.3</td> | ||||||
|  | 			<td>OSX.3</td> | ||||||
|  | 			<td class="center">312.8</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Webkit</td> | ||||||
|  | 			<td>Safari 2.0</td> | ||||||
|  | 			<td>OSX.4+</td> | ||||||
|  | 			<td class="center">419.3</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Webkit</td> | ||||||
|  | 			<td>Safari 3.0</td> | ||||||
|  | 			<td>OSX.4+</td> | ||||||
|  | 			<td class="center">522.1</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Webkit</td> | ||||||
|  | 			<td>OmniWeb 5.5</td> | ||||||
|  | 			<td>OSX.4+</td> | ||||||
|  | 			<td class="center">420</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Webkit</td> | ||||||
|  | 			<td>iPod Touch / iPhone</td> | ||||||
|  | 			<td>iPod</td> | ||||||
|  | 			<td class="center">420.1</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Webkit</td> | ||||||
|  | 			<td>S60</td> | ||||||
|  | 			<td>S60</td> | ||||||
|  | 			<td class="center">413</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Opera 7.0</td> | ||||||
|  | 			<td>Win 95+ / OSX.1+</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Opera 7.5</td> | ||||||
|  | 			<td>Win 95+ / OSX.2+</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Opera 8.0</td> | ||||||
|  | 			<td>Win 95+ / OSX.2+</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Opera 8.5</td> | ||||||
|  | 			<td>Win 95+ / OSX.2+</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Opera 9.0</td> | ||||||
|  | 			<td>Win 95+ / OSX.3+</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Opera 9.2</td> | ||||||
|  | 			<td>Win 88+ / OSX.3+</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Opera 9.5</td> | ||||||
|  | 			<td>Win 88+ / OSX.3+</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Opera for Wii</td> | ||||||
|  | 			<td>Wii</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Nokia N800</td> | ||||||
|  | 			<td>N800</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Presto</td> | ||||||
|  | 			<td>Nintendo DS browser</td> | ||||||
|  | 			<td>Nintendo DS</td> | ||||||
|  | 			<td class="center">8.5</td> | ||||||
|  | 			<td class="center">C/A<sup>1</sup></td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeC"> | ||||||
|  | 			<td>KHTML</td> | ||||||
|  | 			<td>Konqureror 3.1</td> | ||||||
|  | 			<td>KDE 3.1</td> | ||||||
|  | 			<td class="center">3.1</td> | ||||||
|  | 			<td class="center">C</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>KHTML</td> | ||||||
|  | 			<td>Konqureror 3.3</td> | ||||||
|  | 			<td>KDE 3.3</td> | ||||||
|  | 			<td class="center">3.3</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>KHTML</td> | ||||||
|  | 			<td>Konqureror 3.5</td> | ||||||
|  | 			<td>KDE 3.5</td> | ||||||
|  | 			<td class="center">3.5</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeX"> | ||||||
|  | 			<td>Tasman</td> | ||||||
|  | 			<td>Internet Explorer 4.5</td> | ||||||
|  | 			<td>Mac OS 8-9</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">X</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeC"> | ||||||
|  | 			<td>Tasman</td> | ||||||
|  | 			<td>Internet Explorer 5.1</td> | ||||||
|  | 			<td>Mac OS 7.6-9</td> | ||||||
|  | 			<td class="center">1</td> | ||||||
|  | 			<td class="center">C</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeC"> | ||||||
|  | 			<td>Tasman</td> | ||||||
|  | 			<td>Internet Explorer 5.2</td> | ||||||
|  | 			<td>Mac OS 8-X</td> | ||||||
|  | 			<td class="center">1</td> | ||||||
|  | 			<td class="center">C</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Misc</td> | ||||||
|  | 			<td>NetFront 3.1</td> | ||||||
|  | 			<td>Embedded devices</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">C</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeA"> | ||||||
|  | 			<td>Misc</td> | ||||||
|  | 			<td>NetFront 3.4</td> | ||||||
|  | 			<td>Embedded devices</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">A</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeX"> | ||||||
|  | 			<td>Misc</td> | ||||||
|  | 			<td>Dillo 0.8</td> | ||||||
|  | 			<td>Embedded devices</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">X</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeX"> | ||||||
|  | 			<td>Misc</td> | ||||||
|  | 			<td>Links</td> | ||||||
|  | 			<td>Text only</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">X</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeX"> | ||||||
|  | 			<td>Misc</td> | ||||||
|  | 			<td>Lynx</td> | ||||||
|  | 			<td>Text only</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">X</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeC"> | ||||||
|  | 			<td>Misc</td> | ||||||
|  | 			<td>IE Mobile</td> | ||||||
|  | 			<td>Windows Mobile 6</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">C</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeC"> | ||||||
|  | 			<td>Misc</td> | ||||||
|  | 			<td>PSP browser</td> | ||||||
|  | 			<td>PSP</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">C</td> | ||||||
|  | 		</tr> | ||||||
|  | 		<tr class="gradeU"> | ||||||
|  | 			<td>Other browsers</td> | ||||||
|  | 			<td>All others</td> | ||||||
|  | 			<td>-</td> | ||||||
|  | 			<td class="center">-</td> | ||||||
|  | 			<td class="center">U</td> | ||||||
|  | 		</tr> | ||||||
|  | 	</tbody> | ||||||
|  | </table> | ||||||
|  | 			 | ||||||
|  | 		</div> | ||||||
|  | 	</body> | ||||||
|  | </html> | ||||||
							
								
								
									
										106
									
								
								static/vendor/datatables-responsive/dataTables.responsive.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,106 @@ | |||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child, | ||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child { | ||||||
|  |   position: relative; | ||||||
|  |   padding-left: 30px; | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before, | ||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before { | ||||||
|  |   top: 8px; | ||||||
|  |   left: 4px; | ||||||
|  |   height: 16px; | ||||||
|  |   width: 16px; | ||||||
|  |   display: block; | ||||||
|  |   position: absolute; | ||||||
|  |   color: white; | ||||||
|  |   border: 2px solid white; | ||||||
|  |   border-radius: 16px; | ||||||
|  |   text-align: center; | ||||||
|  |   line-height: 14px; | ||||||
|  |   box-shadow: 0 0 3px #444; | ||||||
|  |   box-sizing: content-box; | ||||||
|  |   content: '+'; | ||||||
|  |   background-color: #31b131; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child.dataTables_empty:before, | ||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child.dataTables_empty:before { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before, | ||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before { | ||||||
|  |   content: '-'; | ||||||
|  |   background-color: #d33333; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-inline.collapsed > tbody > tr.child td:before { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child, | ||||||
|  | table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child { | ||||||
|  |   padding-left: 27px; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before, | ||||||
|  | table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before { | ||||||
|  |   top: 5px; | ||||||
|  |   left: 4px; | ||||||
|  |   height: 14px; | ||||||
|  |   width: 14px; | ||||||
|  |   border-radius: 14px; | ||||||
|  |   line-height: 12px; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-column > tbody > tr > td.control, | ||||||
|  | table.dataTable.dtr-column > tbody > tr > th.control { | ||||||
|  |   position: relative; | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-column > tbody > tr > td.control:before, | ||||||
|  | table.dataTable.dtr-column > tbody > tr > th.control:before { | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   height: 16px; | ||||||
|  |   width: 16px; | ||||||
|  |   margin-top: -10px; | ||||||
|  |   margin-left: -10px; | ||||||
|  |   display: block; | ||||||
|  |   position: absolute; | ||||||
|  |   color: white; | ||||||
|  |   border: 2px solid white; | ||||||
|  |   border-radius: 16px; | ||||||
|  |   text-align: center; | ||||||
|  |   line-height: 14px; | ||||||
|  |   box-shadow: 0 0 3px #444; | ||||||
|  |   box-sizing: content-box; | ||||||
|  |   content: '+'; | ||||||
|  |   background-color: #31b131; | ||||||
|  | } | ||||||
|  | table.dataTable.dtr-column > tbody > tr.parent td.control:before, | ||||||
|  | table.dataTable.dtr-column > tbody > tr.parent th.control:before { | ||||||
|  |   content: '-'; | ||||||
|  |   background-color: #d33333; | ||||||
|  | } | ||||||
|  | table.dataTable > tbody > tr.child { | ||||||
|  |   padding: 0.5em 1em; | ||||||
|  | } | ||||||
|  | table.dataTable > tbody > tr.child:hover { | ||||||
|  |   background: transparent !important; | ||||||
|  | } | ||||||
|  | table.dataTable > tbody > tr.child ul { | ||||||
|  |   display: inline-block; | ||||||
|  |   list-style-type: none; | ||||||
|  |   margin: 0; | ||||||
|  |   padding: 0; | ||||||
|  | } | ||||||
|  | table.dataTable > tbody > tr.child ul li { | ||||||
|  |   border-bottom: 1px solid #efefef; | ||||||
|  |   padding: 0.5em 0; | ||||||
|  | } | ||||||
|  | table.dataTable > tbody > tr.child ul li:first-child { | ||||||
|  |   padding-top: 0; | ||||||
|  | } | ||||||
|  | table.dataTable > tbody > tr.child ul li:last-child { | ||||||
|  |   border-bottom: none; | ||||||
|  | } | ||||||
|  | table.dataTable > tbody > tr.child span.dtr-title { | ||||||
|  |   display: inline-block; | ||||||
|  |   min-width: 75px; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
							
								
								
									
										873
									
								
								static/vendor/datatables-responsive/dataTables.responsive.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,873 @@ | |||||||
|  | /*! Responsive 1.0.6 | ||||||
|  |  * 2014-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @summary     Responsive | ||||||
|  |  * @description Responsive tables plug-in for DataTables | ||||||
|  |  * @version     1.0.6 | ||||||
|  |  * @file        dataTables.responsive.js | ||||||
|  |  * @author      SpryMedia Ltd (www.sprymedia.co.uk) | ||||||
|  |  * @contact     www.sprymedia.co.uk/contact | ||||||
|  |  * @copyright   Copyright 2014-2015 SpryMedia Ltd. | ||||||
|  |  * | ||||||
|  |  * This source file is free software, available under the following license: | ||||||
|  |  *   MIT license - http://datatables.net/license/mit | ||||||
|  |  * | ||||||
|  |  * This source file is distributed in the hope that it will be useful, but | ||||||
|  |  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | ||||||
|  |  * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. | ||||||
|  |  * | ||||||
|  |  * For details please refer to: http://www.datatables.net | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | (function(window, document, undefined) { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | var factory = function( $, DataTable ) { | ||||||
|  | "use strict"; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Responsive is a plug-in for the DataTables library that makes use of | ||||||
|  |  * DataTables' ability to change the visibility of columns, changing the | ||||||
|  |  * visibility of columns so the displayed columns fit into the table container. | ||||||
|  |  * The end result is that complex tables will be dynamically adjusted to fit | ||||||
|  |  * into the viewport, be it on a desktop, tablet or mobile browser. | ||||||
|  |  * | ||||||
|  |  * Responsive for DataTables has two modes of operation, which can used | ||||||
|  |  * individually or combined: | ||||||
|  |  * | ||||||
|  |  * * Class name based control - columns assigned class names that match the | ||||||
|  |  *   breakpoint logic can be shown / hidden as required for each breakpoint. | ||||||
|  |  * * Automatic control - columns are automatically hidden when there is no | ||||||
|  |  *   room left to display them. Columns removed from the right. | ||||||
|  |  * | ||||||
|  |  * In additional to column visibility control, Responsive also has built into | ||||||
|  |  * options to use DataTables' child row display to show / hide the information | ||||||
|  |  * from the table that has been hidden. There are also two modes of operation | ||||||
|  |  * for this child row display: | ||||||
|  |  * | ||||||
|  |  * * Inline - when the control element that the user can use to show / hide | ||||||
|  |  *   child rows is displayed inside the first column of the table. | ||||||
|  |  * * Column - where a whole column is dedicated to be the show / hide control. | ||||||
|  |  * | ||||||
|  |  * Initialisation of Responsive is performed by: | ||||||
|  |  * | ||||||
|  |  * * Adding the class `responsive` or `dt-responsive` to the table. In this case | ||||||
|  |  *   Responsive will automatically be initialised with the default configuration | ||||||
|  |  *   options when the DataTable is created. | ||||||
|  |  * * Using the `responsive` option in the DataTables configuration options. This | ||||||
|  |  *   can also be used to specify the configuration options, or simply set to | ||||||
|  |  *   `true` to use the defaults. | ||||||
|  |  * | ||||||
|  |  *  @class | ||||||
|  |  *  @param {object} settings DataTables settings object for the host table | ||||||
|  |  *  @param {object} [opts] Configuration options | ||||||
|  |  *  @requires jQuery 1.7+ | ||||||
|  |  *  @requires DataTables 1.10.1+ | ||||||
|  |  * | ||||||
|  |  *  @example | ||||||
|  |  *      $('#example').DataTable( { | ||||||
|  |  *        responsive: true | ||||||
|  |  *      } ); | ||||||
|  |  *    } ); | ||||||
|  |  */ | ||||||
|  | var Responsive = function ( settings, opts ) { | ||||||
|  | 	// Sanity check that we are using DataTables 1.10 or newer | ||||||
|  | 	if ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.1' ) ) { | ||||||
|  | 		throw 'DataTables Responsive requires DataTables 1.10.1 or newer'; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	this.s = { | ||||||
|  | 		dt: new DataTable.Api( settings ), | ||||||
|  | 		columns: [] | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// Check if responsive has already been initialised on this table | ||||||
|  | 	if ( this.s.dt.settings()[0].responsive ) { | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// details is an object, but for simplicity the user can give it as a string | ||||||
|  | 	if ( opts && typeof opts.details === 'string' ) { | ||||||
|  | 		opts.details = { type: opts.details }; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	this.c = $.extend( true, {}, Responsive.defaults, DataTable.defaults.responsive, opts ); | ||||||
|  | 	settings.responsive = this; | ||||||
|  | 	this._constructor(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | Responsive.prototype = { | ||||||
|  | 	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | ||||||
|  | 	 * Constructor | ||||||
|  | 	 */ | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Initialise the Responsive instance | ||||||
|  | 	 * | ||||||
|  | 	 * @private | ||||||
|  | 	 */ | ||||||
|  | 	_constructor: function () | ||||||
|  | 	{ | ||||||
|  | 		var that = this; | ||||||
|  | 		var dt = this.s.dt; | ||||||
|  |  | ||||||
|  | 		dt.settings()[0]._responsive = this; | ||||||
|  |  | ||||||
|  | 		// Use DataTables' private throttle function to avoid processor thrashing | ||||||
|  | 		$(window).on( 'resize.dtr orientationchange.dtr', dt.settings()[0].oApi._fnThrottle( function () { | ||||||
|  | 			that._resize(); | ||||||
|  | 		} ) ); | ||||||
|  |  | ||||||
|  | 		// Destroy event handler | ||||||
|  | 		dt.on( 'destroy.dtr', function () { | ||||||
|  | 			$(window).off( 'resize.dtr orientationchange.dtr draw.dtr' ); | ||||||
|  | 		} ); | ||||||
|  |  | ||||||
|  | 		// Reorder the breakpoints array here in case they have been added out | ||||||
|  | 		// of order | ||||||
|  | 		this.c.breakpoints.sort( function (a, b) { | ||||||
|  | 			return a.width < b.width ? 1 : | ||||||
|  | 				a.width > b.width ? -1 : 0; | ||||||
|  | 		} ); | ||||||
|  |  | ||||||
|  | 		// Determine which columns are already hidden, and should therefore | ||||||
|  | 		// remain hidden. todo - should this be done? See thread 22677 | ||||||
|  | 		// | ||||||
|  | 		// this.s.alwaysHidden = dt.columns(':hidden').indexes(); | ||||||
|  |  | ||||||
|  | 		this._classLogic(); | ||||||
|  | 		this._resizeAuto(); | ||||||
|  |  | ||||||
|  | 		// Details handler | ||||||
|  | 		var details = this.c.details; | ||||||
|  | 		if ( details.type ) { | ||||||
|  | 			that._detailsInit(); | ||||||
|  | 			this._detailsVis(); | ||||||
|  |  | ||||||
|  | 			dt.on( 'column-visibility.dtr', function () { | ||||||
|  | 				that._detailsVis(); | ||||||
|  | 			} ); | ||||||
|  |  | ||||||
|  | 			// Redraw the details box on each draw. This is used until | ||||||
|  | 			// DataTables implements a native `updated` event for rows | ||||||
|  | 			dt.on( 'draw.dtr', function () { | ||||||
|  | 				dt.rows( {page: 'current'} ).iterator( 'row', function ( settings, idx ) { | ||||||
|  | 					var row = dt.row( idx ); | ||||||
|  |  | ||||||
|  | 					if ( row.child.isShown() ) { | ||||||
|  | 						var info = that.c.details.renderer( dt, idx ); | ||||||
|  | 						row.child( info, 'child' ).show(); | ||||||
|  | 					} | ||||||
|  | 				} ); | ||||||
|  | 			} ); | ||||||
|  |  | ||||||
|  | 			$(dt.table().node()).addClass( 'dtr-'+details.type ); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// First pass - draw the table for the current viewport size | ||||||
|  | 		this._resize(); | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | ||||||
|  | 	 * Private methods | ||||||
|  | 	 */ | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Calculate the visibility for the columns in a table for a given | ||||||
|  | 	 * breakpoint. The result is pre-determined based on the class logic if | ||||||
|  | 	 * class names are used to control all columns, but the width of the table | ||||||
|  | 	 * is also used if there are columns which are to be automatically shown | ||||||
|  | 	 * and hidden. | ||||||
|  | 	 * | ||||||
|  | 	 * @param  {string} breakpoint Breakpoint name to use for the calculation | ||||||
|  | 	 * @return {array} Array of boolean values initiating the visibility of each | ||||||
|  | 	 *   column. | ||||||
|  | 	 *  @private | ||||||
|  | 	 */ | ||||||
|  | 	_columnsVisiblity: function ( breakpoint ) | ||||||
|  | 	{ | ||||||
|  | 		var dt = this.s.dt; | ||||||
|  | 		var columns = this.s.columns; | ||||||
|  | 		var i, ien; | ||||||
|  |  | ||||||
|  | 		// Class logic - determine which columns are in this breakpoint based | ||||||
|  | 		// on the classes. If no class control (i.e. `auto`) then `-` is used | ||||||
|  | 		// to indicate this to the rest of the function | ||||||
|  | 		var display = $.map( columns, function ( col ) { | ||||||
|  | 			return col.auto && col.minWidth === null ? | ||||||
|  | 				false : | ||||||
|  | 				col.auto === true ? | ||||||
|  | 					'-' : | ||||||
|  | 					$.inArray( breakpoint, col.includeIn ) !== -1; | ||||||
|  | 		} ); | ||||||
|  |  | ||||||
|  | 		// Auto column control - first pass: how much width is taken by the | ||||||
|  | 		// ones that must be included from the non-auto columns | ||||||
|  | 		var requiredWidth = 0; | ||||||
|  | 		for ( i=0, ien=display.length ; i<ien ; i++ ) { | ||||||
|  | 			if ( display[i] === true ) { | ||||||
|  | 				requiredWidth += columns[i].minWidth; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Second pass, use up any remaining width for other columns. For | ||||||
|  | 		// scrolling tables we need to subtract the width of the scrollbar. It | ||||||
|  | 		// may not be requires which makes this sub-optimal, but it would | ||||||
|  | 		// require another full redraw to make complete use of those extra few | ||||||
|  | 		// pixels | ||||||
|  | 		var scrolling = dt.settings()[0].oScroll; | ||||||
|  | 		var bar = scrolling.sY || scrolling.sX ? scrolling.iBarWidth : 0; | ||||||
|  | 		var widthAvailable = dt.table().container().offsetWidth - bar; | ||||||
|  | 		var usedWidth = widthAvailable - requiredWidth; | ||||||
|  |  | ||||||
|  | 		// Control column needs to always be included. This makes it sub- | ||||||
|  | 		// optimal in terms of using the available with, but to stop layout | ||||||
|  | 		// thrashing or overflow. Also we need to account for the control column | ||||||
|  | 		// width first so we know how much width is available for the other | ||||||
|  | 		// columns, since the control column might not be the first one shown | ||||||
|  | 		for ( i=0, ien=display.length ; i<ien ; i++ ) { | ||||||
|  | 			if ( columns[i].control ) { | ||||||
|  | 				usedWidth -= columns[i].minWidth; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Allow columns to be shown (counting from the left) until we run out | ||||||
|  | 		// of room | ||||||
|  | 		var empty = false; | ||||||
|  | 		for ( i=0, ien=display.length ; i<ien ; i++ ) { | ||||||
|  | 			if ( display[i] === '-' && ! columns[i].control ) { | ||||||
|  | 				// Once we've found a column that won't fit we don't let any | ||||||
|  | 				// others display either, or columns might disappear in the | ||||||
|  | 				// middle of the table | ||||||
|  | 				if ( empty || usedWidth - columns[i].minWidth < 0 ) { | ||||||
|  | 					empty = true; | ||||||
|  | 					display[i] = false; | ||||||
|  | 				} | ||||||
|  | 				else { | ||||||
|  | 					display[i] = true; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				usedWidth -= columns[i].minWidth; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Determine if the 'control' column should be shown (if there is one). | ||||||
|  | 		// This is the case when there is a hidden column (that is not the | ||||||
|  | 		// control column). The two loops look inefficient here, but they are | ||||||
|  | 		// trivial and will fly through. We need to know the outcome from the | ||||||
|  | 		// first , before the action in the second can be taken | ||||||
|  | 		var showControl = false; | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=columns.length ; i<ien ; i++ ) { | ||||||
|  | 			if ( ! columns[i].control && ! columns[i].never && ! display[i] ) { | ||||||
|  | 				showControl = true; | ||||||
|  | 				break; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=columns.length ; i<ien ; i++ ) { | ||||||
|  | 			if ( columns[i].control ) { | ||||||
|  | 				display[i] = showControl; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Finally we need to make sure that there is at least one column that | ||||||
|  | 		// is visible | ||||||
|  | 		if ( $.inArray( true, display ) === -1 ) { | ||||||
|  | 			display[0] = true; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return display; | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Create the internal `columns` array with information about the columns | ||||||
|  | 	 * for the table. This includes determining which breakpoints the column | ||||||
|  | 	 * will appear in, based upon class names in the column, which makes up the | ||||||
|  | 	 * vast majority of this method. | ||||||
|  | 	 * | ||||||
|  | 	 * @private | ||||||
|  | 	 */ | ||||||
|  | 	_classLogic: function () | ||||||
|  | 	{ | ||||||
|  | 		var that = this; | ||||||
|  | 		var calc = {}; | ||||||
|  | 		var breakpoints = this.c.breakpoints; | ||||||
|  | 		var columns = this.s.dt.columns().eq(0).map( function (i) { | ||||||
|  | 			var className = this.column(i).header().className; | ||||||
|  |  | ||||||
|  | 			return { | ||||||
|  | 				className: className, | ||||||
|  | 				includeIn: [], | ||||||
|  | 				auto:      false, | ||||||
|  | 				control:   false, | ||||||
|  | 				never:     className.match(/\bnever\b/) ? true : false | ||||||
|  | 			}; | ||||||
|  | 		} ); | ||||||
|  |  | ||||||
|  | 		// Simply add a breakpoint to `includeIn` array, ensuring that there are | ||||||
|  | 		// no duplicates | ||||||
|  | 		var add = function ( colIdx, name ) { | ||||||
|  | 			var includeIn = columns[ colIdx ].includeIn; | ||||||
|  |  | ||||||
|  | 			if ( $.inArray( name, includeIn ) === -1 ) { | ||||||
|  | 				includeIn.push( name ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		var column = function ( colIdx, name, operator, matched ) { | ||||||
|  | 			var size, i, ien; | ||||||
|  |  | ||||||
|  | 			if ( ! operator ) { | ||||||
|  | 				columns[ colIdx ].includeIn.push( name ); | ||||||
|  | 			} | ||||||
|  | 			else if ( operator === 'max-' ) { | ||||||
|  | 				// Add this breakpoint and all smaller | ||||||
|  | 				size = that._find( name ).width; | ||||||
|  |  | ||||||
|  | 				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) { | ||||||
|  | 					if ( breakpoints[i].width <= size ) { | ||||||
|  | 						add( colIdx, breakpoints[i].name ); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			else if ( operator === 'min-' ) { | ||||||
|  | 				// Add this breakpoint and all larger | ||||||
|  | 				size = that._find( name ).width; | ||||||
|  |  | ||||||
|  | 				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) { | ||||||
|  | 					if ( breakpoints[i].width >= size ) { | ||||||
|  | 						add( colIdx, breakpoints[i].name ); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			else if ( operator === 'not-' ) { | ||||||
|  | 				// Add all but this breakpoint (xxx need extra information) | ||||||
|  |  | ||||||
|  | 				for ( i=0, ien=breakpoints.length ; i<ien ; i++ ) { | ||||||
|  | 					if ( breakpoints[i].name.indexOf( matched ) === -1 ) { | ||||||
|  | 						add( colIdx, breakpoints[i].name ); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// Loop over each column and determine if it has a responsive control | ||||||
|  | 		// class | ||||||
|  | 		columns.each( function ( col, i ) { | ||||||
|  | 			var classNames = col.className.split(' '); | ||||||
|  | 			var hasClass = false; | ||||||
|  |  | ||||||
|  | 			// Split the class name up so multiple rules can be applied if needed | ||||||
|  | 			for ( var k=0, ken=classNames.length ; k<ken ; k++ ) { | ||||||
|  | 				var className = $.trim( classNames[k] ); | ||||||
|  |  | ||||||
|  | 				if ( className === 'all' ) { | ||||||
|  | 					// Include in all | ||||||
|  | 					hasClass = true; | ||||||
|  | 					col.includeIn = $.map( breakpoints, function (a) { | ||||||
|  | 						return a.name; | ||||||
|  | 					} ); | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				else if ( className === 'none' || className === 'never' ) { | ||||||
|  | 					// Include in none (default) and no auto | ||||||
|  | 					hasClass = true; | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 				else if ( className === 'control' ) { | ||||||
|  | 					// Special column that is only visible, when one of the other | ||||||
|  | 					// columns is hidden. This is used for the details control | ||||||
|  | 					hasClass = true; | ||||||
|  | 					col.control = true; | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				$.each( breakpoints, function ( j, breakpoint ) { | ||||||
|  | 					// Does this column have a class that matches this breakpoint? | ||||||
|  | 					var brokenPoint = breakpoint.name.split('-'); | ||||||
|  | 					var re = new RegExp( '(min\\-|max\\-|not\\-)?('+brokenPoint[0]+')(\\-[_a-zA-Z0-9])?' ); | ||||||
|  | 					var match = className.match( re ); | ||||||
|  |  | ||||||
|  | 					if ( match ) { | ||||||
|  | 						hasClass = true; | ||||||
|  |  | ||||||
|  | 						if ( match[2] === brokenPoint[0] && match[3] === '-'+brokenPoint[1] ) { | ||||||
|  | 							// Class name matches breakpoint name fully | ||||||
|  | 							column( i, breakpoint.name, match[1], match[2]+match[3] ); | ||||||
|  | 						} | ||||||
|  | 						else if ( match[2] === brokenPoint[0] && ! match[3] ) { | ||||||
|  | 							// Class name matched primary breakpoint name with no qualifier | ||||||
|  | 							column( i, breakpoint.name, match[1], match[2] ); | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				} ); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// If there was no control class, then automatic sizing is used | ||||||
|  | 			if ( ! hasClass ) { | ||||||
|  | 				col.auto = true; | ||||||
|  | 			} | ||||||
|  | 		} ); | ||||||
|  |  | ||||||
|  | 		this.s.columns = columns; | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Initialisation for the details handler | ||||||
|  | 	 * | ||||||
|  | 	 * @private | ||||||
|  | 	 */ | ||||||
|  | 	_detailsInit: function () | ||||||
|  | 	{ | ||||||
|  | 		var that    = this; | ||||||
|  | 		var dt      = this.s.dt; | ||||||
|  | 		var details = this.c.details; | ||||||
|  |  | ||||||
|  | 		// The inline type always uses the first child as the target | ||||||
|  | 		if ( details.type === 'inline' ) { | ||||||
|  | 			details.target = 'td:first-child'; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// type.target can be a string jQuery selector or a column index | ||||||
|  | 		var target   = details.target; | ||||||
|  | 		var selector = typeof target === 'string' ? target : 'td'; | ||||||
|  |  | ||||||
|  | 		// Click handler to show / hide the details rows when they are available | ||||||
|  | 		$( dt.table().body() ).on( 'click', selector, function (e) { | ||||||
|  | 			// If the table is not collapsed (i.e. there is no hidden columns) | ||||||
|  | 			// then take no action | ||||||
|  | 			if ( ! $(dt.table().node()).hasClass('collapsed' ) ) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Check that the row is actually a DataTable's controlled node | ||||||
|  | 			if ( ! dt.row( $(this).closest('tr') ).length ) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// For column index, we determine if we should act or not in the | ||||||
|  | 			// handler - otherwise it is already okay | ||||||
|  | 			if ( typeof target === 'number' ) { | ||||||
|  | 				var targetIdx = target < 0 ? | ||||||
|  | 					dt.columns().eq(0).length + target : | ||||||
|  | 					target; | ||||||
|  |  | ||||||
|  | 				if ( dt.cell( this ).index().column !== targetIdx ) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// $().closest() includes itself in its check | ||||||
|  | 			var row = dt.row( $(this).closest('tr') ); | ||||||
|  |  | ||||||
|  | 			if ( row.child.isShown() ) { | ||||||
|  | 				row.child( false ); | ||||||
|  | 				$( row.node() ).removeClass( 'parent' ); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				var info = that.c.details.renderer( dt, row[0] ); | ||||||
|  | 				row.child( info, 'child' ).show(); | ||||||
|  | 				$( row.node() ).addClass( 'parent' ); | ||||||
|  | 			} | ||||||
|  | 		} ); | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Update the child rows in the table whenever the column visibility changes | ||||||
|  | 	 * | ||||||
|  | 	 * @private | ||||||
|  | 	 */ | ||||||
|  | 	_detailsVis: function () | ||||||
|  | 	{ | ||||||
|  | 		var that = this; | ||||||
|  | 		var dt = this.s.dt; | ||||||
|  |  | ||||||
|  | 		// Find how many columns are hidden | ||||||
|  | 		var hiddenColumns = dt.columns().indexes().filter( function ( idx ) { | ||||||
|  | 			var col = dt.column( idx ); | ||||||
|  |  | ||||||
|  | 			if ( col.visible() ) { | ||||||
|  | 				return null; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Only counts as hidden if it doesn't have the `never` class | ||||||
|  | 			return $( col.header() ).hasClass( 'never' ) ? null : idx; | ||||||
|  | 		} ); | ||||||
|  | 		var haveHidden = true; | ||||||
|  |  | ||||||
|  | 		if ( hiddenColumns.length === 0 || ( hiddenColumns.length === 1 && this.s.columns[ hiddenColumns[0] ].control ) ) { | ||||||
|  | 			haveHidden = false; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if ( haveHidden ) { | ||||||
|  | 			// Show all existing child rows | ||||||
|  | 			dt.rows( { page: 'current' } ).eq(0).each( function (idx) { | ||||||
|  | 				var row = dt.row( idx ); | ||||||
|  |  | ||||||
|  | 				if ( row.child() ) { | ||||||
|  | 					var info = that.c.details.renderer( dt, row[0] ); | ||||||
|  |  | ||||||
|  | 					// The renderer can return false to have no child row | ||||||
|  | 					if ( info === false ) { | ||||||
|  | 						row.child.hide(); | ||||||
|  | 					} | ||||||
|  | 					else { | ||||||
|  | 						row.child( info, 'child' ).show(); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} ); | ||||||
|  | 		} | ||||||
|  | 		else { | ||||||
|  | 			// Hide all existing child rows | ||||||
|  | 			dt.rows( { page: 'current' } ).eq(0).each( function (idx) { | ||||||
|  | 				dt.row( idx ).child.hide(); | ||||||
|  | 			} ); | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Find a breakpoint object from a name | ||||||
|  | 	 * @param  {string} name Breakpoint name to find | ||||||
|  | 	 * @return {object}      Breakpoint description object | ||||||
|  | 	 */ | ||||||
|  | 	_find: function ( name ) | ||||||
|  | 	{ | ||||||
|  | 		var breakpoints = this.c.breakpoints; | ||||||
|  |  | ||||||
|  | 		for ( var i=0, ien=breakpoints.length ; i<ien ; i++ ) { | ||||||
|  | 			if ( breakpoints[i].name === name ) { | ||||||
|  | 				return breakpoints[i]; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Alter the table display for a resized viewport. This involves first | ||||||
|  | 	 * determining what breakpoint the window currently is in, getting the | ||||||
|  | 	 * column visibilities to apply and then setting them. | ||||||
|  | 	 * | ||||||
|  | 	 * @private | ||||||
|  | 	 */ | ||||||
|  | 	_resize: function () | ||||||
|  | 	{ | ||||||
|  | 		var dt = this.s.dt; | ||||||
|  | 		var width = $(window).width(); | ||||||
|  | 		var breakpoints = this.c.breakpoints; | ||||||
|  | 		var breakpoint = breakpoints[0].name; | ||||||
|  | 		var columns = this.s.columns; | ||||||
|  | 		var i, ien; | ||||||
|  |  | ||||||
|  | 		// Determine what breakpoint we are currently at | ||||||
|  | 		for ( i=breakpoints.length-1 ; i>=0 ; i-- ) { | ||||||
|  | 			if ( width <= breakpoints[i].width ) { | ||||||
|  | 				breakpoint = breakpoints[i].name; | ||||||
|  | 				break; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		// Show the columns for that break point | ||||||
|  | 		var columnsVis = this._columnsVisiblity( breakpoint ); | ||||||
|  |  | ||||||
|  | 		// Set the class before the column visibility is changed so event | ||||||
|  | 		// listeners know what the state is. Need to determine if there are | ||||||
|  | 		// any columns that are not visible but can be shown | ||||||
|  | 		var collapsedClass = false; | ||||||
|  | 		for ( i=0, ien=columns.length ; i<ien ; i++ ) { | ||||||
|  | 			if ( columnsVis[i] === false && ! columns[i].never ) { | ||||||
|  | 				collapsedClass = true; | ||||||
|  | 				break; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		$( dt.table().node() ).toggleClass('collapsed', collapsedClass ); | ||||||
|  |  | ||||||
|  | 		dt.columns().eq(0).each( function ( colIdx, i ) { | ||||||
|  | 			dt.column( colIdx ).visible( columnsVis[i] ); | ||||||
|  | 		} ); | ||||||
|  | 	}, | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Determine the width of each column in the table so the auto column hiding | ||||||
|  | 	 * has that information to work with. This method is never going to be 100% | ||||||
|  | 	 * perfect since column widths can change slightly per page, but without | ||||||
|  | 	 * seriously compromising performance this is quite effective. | ||||||
|  | 	 * | ||||||
|  | 	 * @private | ||||||
|  | 	 */ | ||||||
|  | 	_resizeAuto: function () | ||||||
|  | 	{ | ||||||
|  | 		var dt = this.s.dt; | ||||||
|  | 		var columns = this.s.columns; | ||||||
|  |  | ||||||
|  | 		// Are we allowed to do auto sizing? | ||||||
|  | 		if ( ! this.c.auto ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Are there any columns that actually need auto-sizing, or do they all | ||||||
|  | 		// have classes defined | ||||||
|  | 		if ( $.inArray( true, $.map( columns, function (c) { return c.auto; } ) ) === -1 ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Clone the table with the current data in it | ||||||
|  | 		var tableWidth   = dt.table().node().offsetWidth; | ||||||
|  | 		var columnWidths = dt.columns; | ||||||
|  | 		var clonedTable  = dt.table().node().cloneNode( false ); | ||||||
|  | 		var clonedHeader = $( dt.table().header().cloneNode( false ) ).appendTo( clonedTable ); | ||||||
|  | 		var clonedBody   = $( dt.table().body().cloneNode( false ) ).appendTo( clonedTable ); | ||||||
|  |  | ||||||
|  | 		$( dt.table().footer() ).clone( false ).appendTo( clonedTable ); | ||||||
|  |  | ||||||
|  | 		// This is a bit slow, but we need to get a clone of each row that | ||||||
|  | 		// includes all columns. As such, try to do this as little as possible. | ||||||
|  | 		dt.rows( { page: 'current' } ).indexes().flatten().each( function ( idx ) { | ||||||
|  | 			var clone = dt.row( idx ).node().cloneNode( true ); | ||||||
|  | 			 | ||||||
|  | 			if ( dt.columns( ':hidden' ).flatten().length ) { | ||||||
|  | 				$(clone).append( dt.cells( idx, ':hidden' ).nodes().to$().clone() ); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			$(clone).appendTo( clonedBody ); | ||||||
|  | 		} ); | ||||||
|  |  | ||||||
|  | 		var cells = dt.columns().header().to$().clone( false ); | ||||||
|  | 		$('<tr/>') | ||||||
|  | 			.append( cells ) | ||||||
|  | 			.appendTo( clonedHeader ); | ||||||
|  |  | ||||||
|  | 		// In the inline case extra padding is applied to the first column to | ||||||
|  | 		// give space for the show / hide icon. We need to use this in the | ||||||
|  | 		// calculation | ||||||
|  | 		if ( this.c.details.type === 'inline' ) { | ||||||
|  | 			$(clonedTable).addClass( 'dtr-inline collapsed' ); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		var inserted = $('<div/>') | ||||||
|  | 			.css( { | ||||||
|  | 				width: 1, | ||||||
|  | 				height: 1, | ||||||
|  | 				overflow: 'hidden' | ||||||
|  | 			} ) | ||||||
|  | 			.append( clonedTable ); | ||||||
|  |  | ||||||
|  | 		// Remove columns which are not to be included | ||||||
|  | 		inserted.find('th.never, td.never').remove(); | ||||||
|  |  | ||||||
|  | 		inserted.insertBefore( dt.table().node() ); | ||||||
|  |  | ||||||
|  | 		// The cloned header now contains the smallest that each column can be | ||||||
|  | 		dt.columns().eq(0).each( function ( idx ) { | ||||||
|  | 			columns[idx].minWidth = cells[ idx ].offsetWidth || 0; | ||||||
|  | 		} ); | ||||||
|  |  | ||||||
|  | 		inserted.remove(); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * List of default breakpoints. Each item in the array is an object with two | ||||||
|  |  * properties: | ||||||
|  |  * | ||||||
|  |  * * `name` - the breakpoint name. | ||||||
|  |  * * `width` - the breakpoint width | ||||||
|  |  * | ||||||
|  |  * @name Responsive.breakpoints | ||||||
|  |  * @static | ||||||
|  |  */ | ||||||
|  | Responsive.breakpoints = [ | ||||||
|  | 	{ name: 'desktop',  width: Infinity }, | ||||||
|  | 	{ name: 'tablet-l', width: 1024 }, | ||||||
|  | 	{ name: 'tablet-p', width: 768 }, | ||||||
|  | 	{ name: 'mobile-l', width: 480 }, | ||||||
|  | 	{ name: 'mobile-p', width: 320 } | ||||||
|  | ]; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Responsive default settings for initialisation | ||||||
|  |  * | ||||||
|  |  * @namespace | ||||||
|  |  * @name Responsive.defaults | ||||||
|  |  * @static | ||||||
|  |  */ | ||||||
|  | Responsive.defaults = { | ||||||
|  | 	/** | ||||||
|  | 	 * List of breakpoints for the instance. Note that this means that each | ||||||
|  | 	 * instance can have its own breakpoints. Additionally, the breakpoints | ||||||
|  | 	 * cannot be changed once an instance has been creased. | ||||||
|  | 	 * | ||||||
|  | 	 * @type {Array} | ||||||
|  | 	 * @default Takes the value of `Responsive.breakpoints` | ||||||
|  | 	 */ | ||||||
|  | 	breakpoints: Responsive.breakpoints, | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Enable / disable auto hiding calculations. It can help to increase | ||||||
|  | 	 * performance slightly if you disable this option, but all columns would | ||||||
|  | 	 * need to have breakpoint classes assigned to them | ||||||
|  | 	 * | ||||||
|  | 	 * @type {Boolean} | ||||||
|  | 	 * @default  `true` | ||||||
|  | 	 */ | ||||||
|  | 	auto: true, | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Details control. If given as a string value, the `type` property of the | ||||||
|  | 	 * default object is set to that value, and the defaults used for the rest | ||||||
|  | 	 * of the object - this is for ease of implementation. | ||||||
|  | 	 * | ||||||
|  | 	 * The object consists of the following properties: | ||||||
|  | 	 * | ||||||
|  | 	 * * `renderer` - function that is called for display of the child row data. | ||||||
|  | 	 *   The default function will show the data from the hidden columns | ||||||
|  | 	 * * `target` - Used as the selector for what objects to attach the child | ||||||
|  | 	 *   open / close to | ||||||
|  | 	 * * `type` - `false` to disable the details display, `inline` or `column` | ||||||
|  | 	 *   for the two control types | ||||||
|  | 	 * | ||||||
|  | 	 * @type {Object|string} | ||||||
|  | 	 */ | ||||||
|  | 	details: { | ||||||
|  | 		renderer: function ( api, rowIdx ) { | ||||||
|  | 			var data = api.cells( rowIdx, ':hidden' ).eq(0).map( function ( cell ) { | ||||||
|  | 				var header = $( api.column( cell.column ).header() ); | ||||||
|  | 				var idx = api.cell( cell ).index(); | ||||||
|  |  | ||||||
|  | 				if ( header.hasClass( 'control' ) || header.hasClass( 'never' ) ) { | ||||||
|  | 					return ''; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				// Use a non-public DT API method to render the data for display | ||||||
|  | 				// This needs to be updated when DT adds a suitable method for | ||||||
|  | 				// this type of data retrieval | ||||||
|  | 				var dtPrivate = api.settings()[0]; | ||||||
|  | 				var cellData = dtPrivate.oApi._fnGetCellData( | ||||||
|  | 					dtPrivate, idx.row, idx.column, 'display' | ||||||
|  | 				); | ||||||
|  | 				var title = header.text(); | ||||||
|  | 				if ( title ) { | ||||||
|  | 					title = title + ':'; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				return '<li data-dtr-index="'+idx.column+'">'+ | ||||||
|  | 						'<span class="dtr-title">'+ | ||||||
|  | 							title+ | ||||||
|  | 						'</span> '+ | ||||||
|  | 						'<span class="dtr-data">'+ | ||||||
|  | 							cellData+ | ||||||
|  | 						'</span>'+ | ||||||
|  | 					'</li>'; | ||||||
|  | 			} ).toArray().join(''); | ||||||
|  |  | ||||||
|  | 			return data ? | ||||||
|  | 				$('<ul data-dtr-index="'+rowIdx+'"/>').append( data ) : | ||||||
|  | 				false; | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		target: 0, | ||||||
|  |  | ||||||
|  | 		type: 'inline' | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * API | ||||||
|  |  */ | ||||||
|  | var Api = $.fn.dataTable.Api; | ||||||
|  |  | ||||||
|  | // Doesn't do anything - work around for a bug in DT... Not documented | ||||||
|  | Api.register( 'responsive()', function () { | ||||||
|  | 	return this; | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  | Api.register( 'responsive.index()', function ( li ) { | ||||||
|  | 	li = $(li); | ||||||
|  |  | ||||||
|  | 	return { | ||||||
|  | 		column: li.data('dtr-index'), | ||||||
|  | 		row:    li.parent().data('dtr-index') | ||||||
|  | 	}; | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  | Api.register( 'responsive.rebuild()', function () { | ||||||
|  | 	return this.iterator( 'table', function ( ctx ) { | ||||||
|  | 		if ( ctx._responsive ) { | ||||||
|  | 			ctx._responsive._classLogic(); | ||||||
|  | 		} | ||||||
|  | 	} ); | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  | Api.register( 'responsive.recalc()', function () { | ||||||
|  | 	return this.iterator( 'table', function ( ctx ) { | ||||||
|  | 		if ( ctx._responsive ) { | ||||||
|  | 			ctx._responsive._resizeAuto(); | ||||||
|  | 			ctx._responsive._resize(); | ||||||
|  | 		} | ||||||
|  | 	} ); | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Version information | ||||||
|  |  * | ||||||
|  |  * @name Responsive.version | ||||||
|  |  * @static | ||||||
|  |  */ | ||||||
|  | Responsive.version = '1.0.6'; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | $.fn.dataTable.Responsive = Responsive; | ||||||
|  | $.fn.DataTable.Responsive = Responsive; | ||||||
|  |  | ||||||
|  | // Attach a listener to the document which listens for DataTables initialisation | ||||||
|  | // events so we can automatically initialise | ||||||
|  | $(document).on( 'init.dt.dtr', function (e, settings, json) { | ||||||
|  | 	if ( e.namespace !== 'dt' ) { | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if ( $(settings.nTable).hasClass( 'responsive' ) || | ||||||
|  | 		 $(settings.nTable).hasClass( 'dt-responsive' ) || | ||||||
|  | 		 settings.oInit.responsive || | ||||||
|  | 		 DataTable.defaults.responsive | ||||||
|  | 	) { | ||||||
|  | 		var init = settings.oInit.responsive; | ||||||
|  |  | ||||||
|  | 		if ( init !== false ) { | ||||||
|  | 			new Responsive( settings, $.isPlainObject( init ) ? init : {}  ); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  | return Responsive; | ||||||
|  | }; // /factory | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // Define as an AMD module if possible | ||||||
|  | if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 	define( ['jquery', 'datatables'], factory ); | ||||||
|  | } | ||||||
|  | else if ( typeof exports === 'object' ) { | ||||||
|  |     // Node/CommonJS | ||||||
|  |     factory( require('jquery'), require('datatables') ); | ||||||
|  | } | ||||||
|  | else if ( jQuery && !jQuery.fn.dataTable.Responsive ) { | ||||||
|  | 	// Otherwise simply initialise as normal, stopping multiple evaluation | ||||||
|  | 	factory( jQuery, jQuery.fn.dataTable ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | })(window, document); | ||||||
							
								
								
									
										149
									
								
								static/vendor/datatables-responsive/dataTables.responsive.scss
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,149 @@ | |||||||
|  |  | ||||||
|  | // | ||||||
|  | // Mixins | ||||||
|  | // | ||||||
|  | @mixin control() { | ||||||
|  | 	display: block; | ||||||
|  | 	position: absolute; | ||||||
|  | 	color: white; | ||||||
|  | 	border: 2px solid white; | ||||||
|  | 	border-radius: 16px; | ||||||
|  | 	text-align: center; | ||||||
|  | 	line-height: 14px; | ||||||
|  | 	box-shadow: 0 0 3px #444; | ||||||
|  | 	box-sizing: content-box; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @mixin control-open() { | ||||||
|  | 	content: '+'; | ||||||
|  | 	background-color: #31b131; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @mixin control-close() { | ||||||
|  | 	content: '-'; | ||||||
|  | 	background-color: #d33333; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // | ||||||
|  | // Table styles | ||||||
|  | // | ||||||
|  | table.dataTable { | ||||||
|  | 	// Styling for the `inline` type | ||||||
|  | 	&.dtr-inline.collapsed > tbody { | ||||||
|  | 		> tr > td:first-child, | ||||||
|  | 		> tr > th:first-child { | ||||||
|  | 			position: relative; | ||||||
|  | 			padding-left: 30px; | ||||||
|  | 			cursor: pointer; | ||||||
|  |  | ||||||
|  | 			&:before { | ||||||
|  | 				top: 8px; | ||||||
|  | 				left: 4px; | ||||||
|  | 				height: 16px; | ||||||
|  | 				width: 16px; | ||||||
|  | 				@include control; | ||||||
|  | 				@include control-open; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			&.dataTables_empty:before { | ||||||
|  | 				display: none; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		> tr.parent { | ||||||
|  | 			> td:first-child:before, | ||||||
|  | 			> th:first-child:before { | ||||||
|  | 				@include control-close; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		> tr.child td:before { | ||||||
|  | 			display: none; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// DataTables' `compact` styling | ||||||
|  | 	&.dtr-inline.collapsed.compact > tbody { | ||||||
|  | 		> tr > td:first-child, | ||||||
|  | 		> tr > th:first-child { | ||||||
|  | 			padding-left: 27px; | ||||||
|  |  | ||||||
|  | 			&:before { | ||||||
|  | 				top: 5px; | ||||||
|  | 				left: 4px; | ||||||
|  | 				height: 14px; | ||||||
|  | 				width: 14px; | ||||||
|  | 				border-radius: 14px; | ||||||
|  | 				line-height: 12px; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	// Styling for the `column` type | ||||||
|  | 	&.dtr-column > tbody { | ||||||
|  | 		> tr > td.control, | ||||||
|  | 		> tr > th.control { | ||||||
|  | 			position: relative; | ||||||
|  | 			cursor: pointer; | ||||||
|  |  | ||||||
|  | 			&:before { | ||||||
|  | 				top: 50%; | ||||||
|  | 				left: 50%; | ||||||
|  | 				height: 16px; | ||||||
|  | 				width: 16px; | ||||||
|  | 				margin-top: -10px; | ||||||
|  | 				margin-left: -10px; | ||||||
|  | 				@include control; | ||||||
|  | 				@include control-open; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		> tr.parent { | ||||||
|  | 			td.control:before, | ||||||
|  | 			th.control:before { | ||||||
|  | 				@include control-close; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	// Child row styling | ||||||
|  | 	> tbody > tr.child { | ||||||
|  | 		padding: 0.5em 1em; | ||||||
|  |  | ||||||
|  | 		&:hover { | ||||||
|  | 			background: transparent !important; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		ul { | ||||||
|  | 			display: inline-block; | ||||||
|  | 			list-style-type: none; | ||||||
|  | 			margin: 0; | ||||||
|  | 			padding: 0; | ||||||
|  |  | ||||||
|  | 			li { | ||||||
|  | 				border-bottom: 1px solid #efefef; | ||||||
|  | 				padding: 0.5em 0; | ||||||
|  |  | ||||||
|  | 				&:first-child { | ||||||
|  | 					padding-top: 0; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				&:last-child { | ||||||
|  | 					border-bottom: none; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		span.dtr-title { | ||||||
|  | 			display: inline-block; | ||||||
|  | 			min-width: 75px; | ||||||
|  | 			font-weight: bold; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		span.dtr-data {} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										185
									
								
								static/vendor/datatables/css/dataTables.bootstrap.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,185 @@ | |||||||
|  | table.dataTable { | ||||||
|  |   clear: both; | ||||||
|  |   margin-top: 6px !important; | ||||||
|  |   margin-bottom: 6px !important; | ||||||
|  |   max-width: none !important; | ||||||
|  |   border-collapse: separate !important; | ||||||
|  | } | ||||||
|  | table.dataTable td, | ||||||
|  | table.dataTable th { | ||||||
|  |   -webkit-box-sizing: content-box; | ||||||
|  |   -moz-box-sizing: content-box; | ||||||
|  |   box-sizing: content-box; | ||||||
|  | } | ||||||
|  | table.dataTable td.dataTables_empty, | ||||||
|  | table.dataTable th.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable.nowrap th, | ||||||
|  | table.dataTable.nowrap td { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_wrapper div.dataTables_length label { | ||||||
|  |   font-weight: normal; | ||||||
|  |   text-align: left; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_length select { | ||||||
|  |   width: 75px; | ||||||
|  |   display: inline-block; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter label { | ||||||
|  |   font-weight: normal; | ||||||
|  |   white-space: nowrap; | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter input { | ||||||
|  |   margin-left: 0.5em; | ||||||
|  |   display: inline-block; | ||||||
|  |   width: auto; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_info { | ||||||
|  |   padding-top: 8px; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_paginate { | ||||||
|  |   margin: 0; | ||||||
|  |   white-space: nowrap; | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_paginate ul.pagination { | ||||||
|  |   margin: 2px 0; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 200px; | ||||||
|  |   margin-left: -100px; | ||||||
|  |   margin-top: -26px; | ||||||
|  |   text-align: center; | ||||||
|  |   padding: 1em 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, | ||||||
|  | table.dataTable thead > tr > td.sorting_asc, | ||||||
|  | table.dataTable thead > tr > td.sorting_desc, | ||||||
|  | table.dataTable thead > tr > td.sorting { | ||||||
|  |   padding-right: 30px; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th:active, | ||||||
|  | table.dataTable thead > tr > td:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc, | ||||||
|  | table.dataTable thead .sorting_asc_disabled, | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  |   cursor: pointer; | ||||||
|  |   position: relative; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:after, | ||||||
|  | table.dataTable thead .sorting_asc:after, | ||||||
|  | table.dataTable thead .sorting_desc:after, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:after, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:after { | ||||||
|  |   position: absolute; | ||||||
|  |   bottom: 8px; | ||||||
|  |   right: 8px; | ||||||
|  |   display: block; | ||||||
|  |   font-family: 'Glyphicons Halflings'; | ||||||
|  |   opacity: 0.5; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:after { | ||||||
|  |   opacity: 0.2; | ||||||
|  |   content: "\e150"; | ||||||
|  |   /* sort */ | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc:after { | ||||||
|  |   content: "\e155"; | ||||||
|  |   /* sort-by-attributes */ | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_desc:after { | ||||||
|  |   content: "\e156"; | ||||||
|  |   /* sort-by-attributes-alt */ | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc_disabled:after, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:after { | ||||||
|  |   color: #eee; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollHead table.dataTable { | ||||||
|  |   margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollBody table { | ||||||
|  |   border-top: none; | ||||||
|  |   margin-top: 0 !important; | ||||||
|  |   margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  | div.dataTables_scrollBody table thead .sorting:after, | ||||||
|  | div.dataTables_scrollBody table thead .sorting_asc:after, | ||||||
|  | div.dataTables_scrollBody table thead .sorting_desc:after { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | div.dataTables_scrollBody table tbody tr:first-child th, | ||||||
|  | div.dataTables_scrollBody table tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollFoot table { | ||||||
|  |   margin-top: 0 !important; | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @media screen and (max-width: 767px) { | ||||||
|  |   div.dataTables_wrapper div.dataTables_length, | ||||||
|  |   div.dataTables_wrapper div.dataTables_filter, | ||||||
|  |   div.dataTables_wrapper div.dataTables_info, | ||||||
|  |   div.dataTables_wrapper div.dataTables_paginate { | ||||||
|  |     text-align: center; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | table.dataTable.table-condensed > thead > tr > th { | ||||||
|  |   padding-right: 20px; | ||||||
|  | } | ||||||
|  | table.dataTable.table-condensed .sorting:after, | ||||||
|  | table.dataTable.table-condensed .sorting_asc:after, | ||||||
|  | table.dataTable.table-condensed .sorting_desc:after { | ||||||
|  |   top: 6px; | ||||||
|  |   right: 6px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.table-bordered.dataTable th, | ||||||
|  | table.table-bordered.dataTable td { | ||||||
|  |   border-left-width: 0; | ||||||
|  | } | ||||||
|  | table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, | ||||||
|  | table.table-bordered.dataTable td:last-child, | ||||||
|  | table.table-bordered.dataTable td:last-child { | ||||||
|  |   border-right-width: 0; | ||||||
|  | } | ||||||
|  | table.table-bordered.dataTable tbody th, | ||||||
|  | table.table-bordered.dataTable tbody td { | ||||||
|  |   border-bottom-width: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollHead table.table-bordered { | ||||||
|  |   border-bottom-width: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.table-responsive > div.dataTables_wrapper > div.row { | ||||||
|  |   margin: 0; | ||||||
|  | } | ||||||
|  | div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child { | ||||||
|  |   padding-left: 0; | ||||||
|  | } | ||||||
|  | div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child { | ||||||
|  |   padding-right: 0; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								static/vendor/datatables/css/dataTables.bootstrap.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0} | ||||||
							
								
								
									
										193
									
								
								static/vendor/datatables/css/dataTables.bootstrap4.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,193 @@ | |||||||
|  | table.dataTable { | ||||||
|  |   clear: both; | ||||||
|  |   margin-top: 6px !important; | ||||||
|  |   margin-bottom: 6px !important; | ||||||
|  |   max-width: none !important; | ||||||
|  |   border-collapse: separate !important; | ||||||
|  | } | ||||||
|  | table.dataTable td, | ||||||
|  | table.dataTable th { | ||||||
|  |   -webkit-box-sizing: content-box; | ||||||
|  |   box-sizing: content-box; | ||||||
|  | } | ||||||
|  | table.dataTable td.dataTables_empty, | ||||||
|  | table.dataTable th.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable.nowrap th, | ||||||
|  | table.dataTable.nowrap td { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_wrapper div.dataTables_length label { | ||||||
|  |   font-weight: normal; | ||||||
|  |   text-align: left; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_length select { | ||||||
|  |   width: 75px; | ||||||
|  |   display: inline-block; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter label { | ||||||
|  |   font-weight: normal; | ||||||
|  |   white-space: nowrap; | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter input { | ||||||
|  |   margin-left: 0.5em; | ||||||
|  |   display: inline-block; | ||||||
|  |   width: auto; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_info { | ||||||
|  |   padding-top: 0.85em; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_paginate { | ||||||
|  |   margin: 0; | ||||||
|  |   white-space: nowrap; | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_paginate ul.pagination { | ||||||
|  |   margin: 2px 0; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 200px; | ||||||
|  |   margin-left: -100px; | ||||||
|  |   margin-top: -26px; | ||||||
|  |   text-align: center; | ||||||
|  |   padding: 1em 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, | ||||||
|  | table.dataTable thead > tr > td.sorting_asc, | ||||||
|  | table.dataTable thead > tr > td.sorting_desc, | ||||||
|  | table.dataTable thead > tr > td.sorting { | ||||||
|  |   padding-right: 30px; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th:active, | ||||||
|  | table.dataTable thead > tr > td:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc, | ||||||
|  | table.dataTable thead .sorting_asc_disabled, | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  |   cursor: pointer; | ||||||
|  |   position: relative; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:before, table.dataTable thead .sorting:after, | ||||||
|  | table.dataTable thead .sorting_asc:before, | ||||||
|  | table.dataTable thead .sorting_asc:after, | ||||||
|  | table.dataTable thead .sorting_desc:before, | ||||||
|  | table.dataTable thead .sorting_desc:after, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:before, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:after, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:before, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:after { | ||||||
|  |   position: absolute; | ||||||
|  |   bottom: 0.9em; | ||||||
|  |   display: block; | ||||||
|  |   opacity: 0.3; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:before, | ||||||
|  | table.dataTable thead .sorting_asc:before, | ||||||
|  | table.dataTable thead .sorting_desc:before, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:before, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:before { | ||||||
|  |   right: 1em; | ||||||
|  |   content: "\2191"; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:after, | ||||||
|  | table.dataTable thead .sorting_asc:after, | ||||||
|  | table.dataTable thead .sorting_desc:after, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:after, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:after { | ||||||
|  |   right: 0.5em; | ||||||
|  |   content: "\2193"; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc:before, | ||||||
|  | table.dataTable thead .sorting_desc:after { | ||||||
|  |   opacity: 1; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc_disabled:before, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:after { | ||||||
|  |   opacity: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollHead table.dataTable { | ||||||
|  |   margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollBody table { | ||||||
|  |   border-top: none; | ||||||
|  |   margin-top: 0 !important; | ||||||
|  |   margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  | div.dataTables_scrollBody table thead .sorting:after, | ||||||
|  | div.dataTables_scrollBody table thead .sorting_asc:after, | ||||||
|  | div.dataTables_scrollBody table thead .sorting_desc:after { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | div.dataTables_scrollBody table tbody tr:first-child th, | ||||||
|  | div.dataTables_scrollBody table tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollFoot table { | ||||||
|  |   margin-top: 0 !important; | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @media screen and (max-width: 767px) { | ||||||
|  |   div.dataTables_wrapper div.dataTables_length, | ||||||
|  |   div.dataTables_wrapper div.dataTables_filter, | ||||||
|  |   div.dataTables_wrapper div.dataTables_info, | ||||||
|  |   div.dataTables_wrapper div.dataTables_paginate { | ||||||
|  |     text-align: center; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | table.dataTable.table-condensed > thead > tr > th { | ||||||
|  |   padding-right: 20px; | ||||||
|  | } | ||||||
|  | table.dataTable.table-condensed .sorting:after, | ||||||
|  | table.dataTable.table-condensed .sorting_asc:after, | ||||||
|  | table.dataTable.table-condensed .sorting_desc:after { | ||||||
|  |   top: 6px; | ||||||
|  |   right: 6px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.table-bordered.dataTable th, | ||||||
|  | table.table-bordered.dataTable td { | ||||||
|  |   border-left-width: 0; | ||||||
|  | } | ||||||
|  | table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, | ||||||
|  | table.table-bordered.dataTable td:last-child, | ||||||
|  | table.table-bordered.dataTable td:last-child { | ||||||
|  |   border-right-width: 0; | ||||||
|  | } | ||||||
|  | table.table-bordered.dataTable tbody th, | ||||||
|  | table.table-bordered.dataTable tbody td { | ||||||
|  |   border-bottom-width: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollHead table.table-bordered { | ||||||
|  |   border-bottom-width: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.table-responsive > div.dataTables_wrapper > div.row { | ||||||
|  |   margin: 0; | ||||||
|  | } | ||||||
|  | div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child { | ||||||
|  |   padding-left: 0; | ||||||
|  | } | ||||||
|  | div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child { | ||||||
|  |   padding-right: 0; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								static/vendor/datatables/css/dataTables.bootstrap4.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0} | ||||||
							
								
								
									
										116
									
								
								static/vendor/datatables/css/dataTables.foundation.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,116 @@ | |||||||
|  | table.dataTable { | ||||||
|  |   clear: both; | ||||||
|  |   margin: 0.5em 0 !important; | ||||||
|  |   max-width: none !important; | ||||||
|  |   width: 100%; | ||||||
|  | } | ||||||
|  | table.dataTable td, | ||||||
|  | table.dataTable th { | ||||||
|  |   -webkit-box-sizing: content-box; | ||||||
|  |   box-sizing: content-box; | ||||||
|  | } | ||||||
|  | table.dataTable td.dataTables_empty, | ||||||
|  | table.dataTable th.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable.nowrap th, table.dataTable.nowrap td { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_wrapper { | ||||||
|  |   position: relative; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_length label { | ||||||
|  |   float: left; | ||||||
|  |   text-align: left; | ||||||
|  |   margin-bottom: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_length select { | ||||||
|  |   width: 75px; | ||||||
|  |   margin-bottom: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter label { | ||||||
|  |   float: right; | ||||||
|  |   margin-bottom: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter input { | ||||||
|  |   display: inline-block !important; | ||||||
|  |   width: auto !important; | ||||||
|  |   margin-bottom: 0; | ||||||
|  |   margin-left: 0.5em; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_info { | ||||||
|  |   padding-top: 2px; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_paginate { | ||||||
|  |   float: right; | ||||||
|  |   margin: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 200px; | ||||||
|  |   margin-left: -100px; | ||||||
|  |   margin-top: -26px; | ||||||
|  |   text-align: center; | ||||||
|  |   padding: 1rem 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, | ||||||
|  | table.dataTable thead > tr > td.sorting_asc, | ||||||
|  | table.dataTable thead > tr > td.sorting_desc, | ||||||
|  | table.dataTable thead > tr > td.sorting { | ||||||
|  |   padding-right: 1.5rem; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th:active, | ||||||
|  | table.dataTable thead > tr > td:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc { | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc, | ||||||
|  | table.dataTable thead .sorting_asc_disabled, | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  |   background-repeat: no-repeat; | ||||||
|  |   background-position: center right; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting { | ||||||
|  |   background-image: url("../images/sort_both.png"); | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc { | ||||||
|  |   background-image: url("../images/sort_asc.png"); | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_desc { | ||||||
|  |   background-image: url("../images/sort_desc.png"); | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc_disabled { | ||||||
|  |   background-image: url("../images/sort_asc_disabled.png"); | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  |   background-image: url("../images/sort_desc_disabled.png"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollHead table { | ||||||
|  |   margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollBody table { | ||||||
|  |   border-top: none; | ||||||
|  |   margin-top: 0 !important; | ||||||
|  |   margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  | div.dataTables_scrollBody table tbody tr:first-child th, | ||||||
|  | div.dataTables_scrollBody table tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollFoot table { | ||||||
|  |   margin-top: 0 !important; | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								static/vendor/datatables/css/dataTables.foundation.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | table.dataTable{clear:both;margin:0.5em 0 !important;max-width:none !important;width:100%}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper{position:relative}div.dataTables_wrapper div.dataTables_length label{float:left;text-align:left;margin-bottom:0}div.dataTables_wrapper div.dataTables_length select{width:75px;margin-bottom:0}div.dataTables_wrapper div.dataTables_filter label{float:right;margin-bottom:0}div.dataTables_wrapper div.dataTables_filter input{display:inline-block !important;width:auto !important;margin-bottom:0;margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:2px}div.dataTables_wrapper div.dataTables_paginate{float:right;margin:0}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1rem 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:1.5rem}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}div.dataTables_scrollHead table{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none} | ||||||
							
								
								
									
										481
									
								
								static/vendor/datatables/css/dataTables.jqueryui.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,481 @@ | |||||||
|  | /* | ||||||
|  |  * Table styles | ||||||
|  |  */ | ||||||
|  | table.dataTable { | ||||||
|  |   width: 100%; | ||||||
|  |   margin: 0 auto; | ||||||
|  |   clear: both; | ||||||
|  |   border-collapse: separate; | ||||||
|  |   border-spacing: 0; | ||||||
|  |   /* | ||||||
|  |    * Header and footer styles | ||||||
|  |    */ | ||||||
|  |   /* | ||||||
|  |    * Body styles | ||||||
|  |    */ | ||||||
|  | } | ||||||
|  | table.dataTable thead th, | ||||||
|  | table.dataTable tfoot th { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | table.dataTable thead th, | ||||||
|  | table.dataTable thead td { | ||||||
|  |   padding: 10px 18px; | ||||||
|  | } | ||||||
|  | table.dataTable thead th:active, | ||||||
|  | table.dataTable thead td:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | table.dataTable tfoot th, | ||||||
|  | table.dataTable tfoot td { | ||||||
|  |   padding: 10px 18px 6px 18px; | ||||||
|  | } | ||||||
|  | table.dataTable tbody tr { | ||||||
|  |   background-color: #ffffff; | ||||||
|  | } | ||||||
|  | table.dataTable tbody tr.selected { | ||||||
|  |   background-color: #B0BED9; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th, | ||||||
|  | table.dataTable tbody td { | ||||||
|  |   padding: 8px 10px; | ||||||
|  | } | ||||||
|  | table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { | ||||||
|  |   border-top: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.row-border tbody tr:first-child th, | ||||||
|  | table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, | ||||||
|  | table.dataTable.display tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { | ||||||
|  |   border-top: 1px solid #ddd; | ||||||
|  |   border-right: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody tr th:first-child, | ||||||
|  | table.dataTable.cell-border tbody tr td:first-child { | ||||||
|  |   border-left: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody tr:first-child th, | ||||||
|  | table.dataTable.cell-border tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  | table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { | ||||||
|  |   background-color: #f9f9f9; | ||||||
|  | } | ||||||
|  | table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { | ||||||
|  |   background-color: #acbad4; | ||||||
|  | } | ||||||
|  | table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { | ||||||
|  |   background-color: #f6f6f6; | ||||||
|  | } | ||||||
|  | table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { | ||||||
|  |   background-color: #aab7d1; | ||||||
|  | } | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_1, | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_2, | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr > .sorting_3 { | ||||||
|  |   background-color: #fafafa; | ||||||
|  | } | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_1, | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_2, | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr.selected > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr.selected > .sorting_3 { | ||||||
|  |   background-color: #acbad5; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { | ||||||
|  |   background-color: #f1f1f1; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { | ||||||
|  |   background-color: #f3f3f3; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { | ||||||
|  |   background-color: whitesmoke; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { | ||||||
|  |   background-color: #a6b4cd; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { | ||||||
|  |   background-color: #a8b5cf; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { | ||||||
|  |   background-color: #a9b7d1; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { | ||||||
|  |   background-color: #fafafa; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { | ||||||
|  |   background-color: #fcfcfc; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { | ||||||
|  |   background-color: #fefefe; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { | ||||||
|  |   background-color: #acbad5; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { | ||||||
|  |   background-color: #aebcd6; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { | ||||||
|  |   background-color: #afbdd8; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { | ||||||
|  |   background-color: #eaeaea; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { | ||||||
|  |   background-color: #ececec; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { | ||||||
|  |   background-color: #efefef; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { | ||||||
|  |   background-color: #a2aec7; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { | ||||||
|  |   background-color: #a3b0c9; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { | ||||||
|  |   background-color: #a5b2cb; | ||||||
|  | } | ||||||
|  | table.dataTable.no-footer { | ||||||
|  |   border-bottom: 1px solid #111; | ||||||
|  | } | ||||||
|  | table.dataTable.nowrap th, table.dataTable.nowrap td { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable.compact thead th, | ||||||
|  | table.dataTable.compact thead td { | ||||||
|  |   padding: 4px 17px 4px 4px; | ||||||
|  | } | ||||||
|  | table.dataTable.compact tfoot th, | ||||||
|  | table.dataTable.compact tfoot td { | ||||||
|  |   padding: 4px; | ||||||
|  | } | ||||||
|  | table.dataTable.compact tbody th, | ||||||
|  | table.dataTable.compact tbody td { | ||||||
|  |   padding: 4px; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-left, | ||||||
|  | table.dataTable td.dt-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-center, | ||||||
|  | table.dataTable td.dt-center, | ||||||
|  | table.dataTable td.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-right, | ||||||
|  | table.dataTable td.dt-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-justify, | ||||||
|  | table.dataTable td.dt-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-nowrap, | ||||||
|  | table.dataTable td.dt-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-left, | ||||||
|  | table.dataTable thead td.dt-head-left, | ||||||
|  | table.dataTable tfoot th.dt-head-left, | ||||||
|  | table.dataTable tfoot td.dt-head-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-center, | ||||||
|  | table.dataTable thead td.dt-head-center, | ||||||
|  | table.dataTable tfoot th.dt-head-center, | ||||||
|  | table.dataTable tfoot td.dt-head-center { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-right, | ||||||
|  | table.dataTable thead td.dt-head-right, | ||||||
|  | table.dataTable tfoot th.dt-head-right, | ||||||
|  | table.dataTable tfoot td.dt-head-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-justify, | ||||||
|  | table.dataTable thead td.dt-head-justify, | ||||||
|  | table.dataTable tfoot th.dt-head-justify, | ||||||
|  | table.dataTable tfoot td.dt-head-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-nowrap, | ||||||
|  | table.dataTable thead td.dt-head-nowrap, | ||||||
|  | table.dataTable tfoot th.dt-head-nowrap, | ||||||
|  | table.dataTable tfoot td.dt-head-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-left, | ||||||
|  | table.dataTable tbody td.dt-body-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-center, | ||||||
|  | table.dataTable tbody td.dt-body-center { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-right, | ||||||
|  | table.dataTable tbody td.dt-body-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-justify, | ||||||
|  | table.dataTable tbody td.dt-body-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-nowrap, | ||||||
|  | table.dataTable tbody td.dt-body-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable, | ||||||
|  | table.dataTable th, | ||||||
|  | table.dataTable td { | ||||||
|  |   -webkit-box-sizing: content-box; | ||||||
|  |   box-sizing: content-box; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Control feature layout | ||||||
|  |  */ | ||||||
|  | .dataTables_wrapper { | ||||||
|  |   position: relative; | ||||||
|  |   clear: both; | ||||||
|  |   *zoom: 1; | ||||||
|  |   zoom: 1; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_length { | ||||||
|  |   float: left; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_filter { | ||||||
|  |   float: right; | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_filter input { | ||||||
|  |   margin-left: 0.5em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_info { | ||||||
|  |   clear: both; | ||||||
|  |   float: left; | ||||||
|  |   padding-top: 0.755em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate { | ||||||
|  |   float: right; | ||||||
|  |   text-align: right; | ||||||
|  |   padding-top: 0.25em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button { | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   display: inline-block; | ||||||
|  |   min-width: 1.5em; | ||||||
|  |   padding: 0.5em 1em; | ||||||
|  |   margin-left: 2px; | ||||||
|  |   text-align: center; | ||||||
|  |   text-decoration: none !important; | ||||||
|  |   cursor: pointer; | ||||||
|  |   *cursor: hand; | ||||||
|  |   color: #333 !important; | ||||||
|  |   border: 1px solid transparent; | ||||||
|  |   border-radius: 2px; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { | ||||||
|  |   color: #333 !important; | ||||||
|  |   border: 1px solid #979797; | ||||||
|  |   background-color: white; | ||||||
|  |   background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); | ||||||
|  |   /* Chrome,Safari4+ */ | ||||||
|  |   background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); | ||||||
|  |   /* Chrome10+,Safari5.1+ */ | ||||||
|  |   background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); | ||||||
|  |   /* FF3.6+ */ | ||||||
|  |   background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); | ||||||
|  |   /* IE10+ */ | ||||||
|  |   background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); | ||||||
|  |   /* Opera 11.10+ */ | ||||||
|  |   background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); | ||||||
|  |   /* W3C */ | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { | ||||||
|  |   cursor: default; | ||||||
|  |   color: #666 !important; | ||||||
|  |   border: 1px solid transparent; | ||||||
|  |   background: transparent; | ||||||
|  |   box-shadow: none; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button:hover { | ||||||
|  |   color: white !important; | ||||||
|  |   border: 1px solid #111; | ||||||
|  |   background-color: #585858; | ||||||
|  |   background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); | ||||||
|  |   /* Chrome,Safari4+ */ | ||||||
|  |   background: -webkit-linear-gradient(top, #585858 0%, #111 100%); | ||||||
|  |   /* Chrome10+,Safari5.1+ */ | ||||||
|  |   background: -moz-linear-gradient(top, #585858 0%, #111 100%); | ||||||
|  |   /* FF3.6+ */ | ||||||
|  |   background: -ms-linear-gradient(top, #585858 0%, #111 100%); | ||||||
|  |   /* IE10+ */ | ||||||
|  |   background: -o-linear-gradient(top, #585858 0%, #111 100%); | ||||||
|  |   /* Opera 11.10+ */ | ||||||
|  |   background: linear-gradient(to bottom, #585858 0%, #111 100%); | ||||||
|  |   /* W3C */ | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button:active { | ||||||
|  |   outline: none; | ||||||
|  |   background-color: #2b2b2b; | ||||||
|  |   background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); | ||||||
|  |   /* Chrome,Safari4+ */ | ||||||
|  |   background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* Chrome10+,Safari5.1+ */ | ||||||
|  |   background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* FF3.6+ */ | ||||||
|  |   background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* IE10+ */ | ||||||
|  |   background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* Opera 11.10+ */ | ||||||
|  |   background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* W3C */ | ||||||
|  |   box-shadow: inset 0 0 3px #111; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .ellipsis { | ||||||
|  |   padding: 0 1em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 100%; | ||||||
|  |   height: 40px; | ||||||
|  |   margin-left: -50%; | ||||||
|  |   margin-top: -25px; | ||||||
|  |   padding-top: 20px; | ||||||
|  |   text-align: center; | ||||||
|  |   font-size: 1.2em; | ||||||
|  |   background-color: white; | ||||||
|  |   background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); | ||||||
|  |   background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_length, | ||||||
|  | .dataTables_wrapper .dataTables_filter, | ||||||
|  | .dataTables_wrapper .dataTables_info, | ||||||
|  | .dataTables_wrapper .dataTables_processing, | ||||||
|  | .dataTables_wrapper .dataTables_paginate { | ||||||
|  |   color: #333; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll { | ||||||
|  |   clear: both; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { | ||||||
|  |   *margin-top: -1px; | ||||||
|  |   -webkit-overflow-scrolling: touch; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td { | ||||||
|  |   vertical-align: middle; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing, | ||||||
|  | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing { | ||||||
|  |   height: 0; | ||||||
|  |   overflow: hidden; | ||||||
|  |   margin: 0 !important; | ||||||
|  |   padding: 0 !important; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper.no-footer .dataTables_scrollBody { | ||||||
|  |   border-bottom: 1px solid #111; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper.no-footer div.dataTables_scrollHead table, | ||||||
|  | .dataTables_wrapper.no-footer div.dataTables_scrollBody table { | ||||||
|  |   border-bottom: none; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper:after { | ||||||
|  |   visibility: hidden; | ||||||
|  |   display: block; | ||||||
|  |   content: ""; | ||||||
|  |   clear: both; | ||||||
|  |   height: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @media screen and (max-width: 767px) { | ||||||
|  |   .dataTables_wrapper .dataTables_info, | ||||||
|  |   .dataTables_wrapper .dataTables_paginate { | ||||||
|  |     float: none; | ||||||
|  |     text-align: center; | ||||||
|  |   } | ||||||
|  |   .dataTables_wrapper .dataTables_paginate { | ||||||
|  |     margin-top: 0.5em; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @media screen and (max-width: 640px) { | ||||||
|  |   .dataTables_wrapper .dataTables_length, | ||||||
|  |   .dataTables_wrapper .dataTables_filter { | ||||||
|  |     float: none; | ||||||
|  |     text-align: center; | ||||||
|  |   } | ||||||
|  |   .dataTables_wrapper .dataTables_filter { | ||||||
|  |     margin-top: 0.5em; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | table.dataTable thead th div.DataTables_sort_wrapper { | ||||||
|  |   position: relative; | ||||||
|  | } | ||||||
|  | table.dataTable thead th div.DataTables_sort_wrapper span { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   margin-top: -8px; | ||||||
|  |   right: -18px; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.ui-state-default, | ||||||
|  | table.dataTable tfoot th.ui-state-default { | ||||||
|  |   border-left-width: 0; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.ui-state-default:first-child, | ||||||
|  | table.dataTable tfoot th.ui-state-default:first-child { | ||||||
|  |   border-left-width: 1px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Control feature layout | ||||||
|  |  */ | ||||||
|  | .dataTables_wrapper .dataTables_paginate .fg-button { | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   display: inline-block; | ||||||
|  |   min-width: 1.5em; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   margin-left: 2px; | ||||||
|  |   text-align: center; | ||||||
|  |   text-decoration: none !important; | ||||||
|  |   cursor: pointer; | ||||||
|  |   *cursor: hand; | ||||||
|  |   border: 1px solid transparent; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .fg-button:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .fg-button:first-child { | ||||||
|  |   border-top-left-radius: 3px; | ||||||
|  |   border-bottom-left-radius: 3px; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .fg-button:last-child { | ||||||
|  |   border-top-right-radius: 3px; | ||||||
|  |   border-bottom-right-radius: 3px; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .ui-widget-header { | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .ui-toolbar { | ||||||
|  |   padding: 8px; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper.no-footer .dataTables_scrollBody { | ||||||
|  |   border-bottom: none; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_length, | ||||||
|  | .dataTables_wrapper .dataTables_filter, | ||||||
|  | .dataTables_wrapper .dataTables_info, | ||||||
|  | .dataTables_wrapper .dataTables_processing, | ||||||
|  | .dataTables_wrapper .dataTables_paginate { | ||||||
|  |   color: inherit; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								static/vendor/datatables/css/dataTables.jqueryui.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										87
									
								
								static/vendor/datatables/css/dataTables.material.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,87 @@ | |||||||
|  | div.dataTables_wrapper div.dataTables_filter { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter input { | ||||||
|  |   margin-left: 0.5em; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_info { | ||||||
|  |   padding-top: 10px; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 200px; | ||||||
|  |   margin-left: -100px; | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_paginate { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.mdl-grid.dt-table { | ||||||
|  |   padding-top: 0; | ||||||
|  |   padding-bottom: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.mdl-grid.dt-table > div.mdl-cell { | ||||||
|  |   margin-top: 0; | ||||||
|  |   margin-bottom: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, | ||||||
|  | table.dataTable thead > tr > td.sorting_asc, | ||||||
|  | table.dataTable thead > tr > td.sorting_desc, | ||||||
|  | table.dataTable thead > tr > td.sorting { | ||||||
|  |   padding-right: 30px; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th:active, | ||||||
|  | table.dataTable thead > tr > td:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc, | ||||||
|  | table.dataTable thead .sorting_asc_disabled, | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  |   cursor: pointer; | ||||||
|  |   position: relative; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:before, table.dataTable thead .sorting:after, | ||||||
|  | table.dataTable thead .sorting_asc:before, | ||||||
|  | table.dataTable thead .sorting_asc:after, | ||||||
|  | table.dataTable thead .sorting_desc:before, | ||||||
|  | table.dataTable thead .sorting_desc:after, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:before, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:after, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:before, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:after { | ||||||
|  |   position: absolute; | ||||||
|  |   bottom: 11px; | ||||||
|  |   display: block; | ||||||
|  |   opacity: 0.3; | ||||||
|  |   font-size: 1.3em; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:before, | ||||||
|  | table.dataTable thead .sorting_asc:before, | ||||||
|  | table.dataTable thead .sorting_desc:before, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:before, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:before { | ||||||
|  |   right: 1em; | ||||||
|  |   content: "\2191"; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting:after, | ||||||
|  | table.dataTable thead .sorting_asc:after, | ||||||
|  | table.dataTable thead .sorting_desc:after, | ||||||
|  | table.dataTable thead .sorting_asc_disabled:after, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:after { | ||||||
|  |   right: 0.5em; | ||||||
|  |   content: "\2193"; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc:before, | ||||||
|  | table.dataTable thead .sorting_desc:after { | ||||||
|  |   opacity: 1; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc_disabled:before, | ||||||
|  | table.dataTable thead .sorting_desc_disabled:after { | ||||||
|  |   opacity: 0; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								static/vendor/datatables/css/dataTables.material.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:10px;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;text-align:center}div.dataTables_wrapper div.dataTables_paginate{text-align:right}div.dataTables_wrapper div.mdl-grid.dt-table{padding-top:0;padding-bottom:0}div.dataTables_wrapper div.mdl-grid.dt-table>div.mdl-cell{margin-top:0;margin-bottom:0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:11px;display:block;opacity:0.3;font-size:1.3em}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0} | ||||||
							
								
								
									
										103
									
								
								static/vendor/datatables/css/dataTables.semanticui.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,103 @@ | |||||||
|  | /* | ||||||
|  |  * Styling for DataTables with Semantic UI | ||||||
|  |  */ | ||||||
|  | table.dataTable.table { | ||||||
|  |   margin: 0; | ||||||
|  | } | ||||||
|  | table.dataTable.table thead th, | ||||||
|  | table.dataTable.table thead td { | ||||||
|  |   position: relative; | ||||||
|  | } | ||||||
|  | table.dataTable.table thead th.sorting, table.dataTable.table thead th.sorting_asc, table.dataTable.table thead th.sorting_desc, | ||||||
|  | table.dataTable.table thead td.sorting, | ||||||
|  | table.dataTable.table thead td.sorting_asc, | ||||||
|  | table.dataTable.table thead td.sorting_desc { | ||||||
|  |   padding-right: 20px; | ||||||
|  | } | ||||||
|  | table.dataTable.table thead th.sorting:after, table.dataTable.table thead th.sorting_asc:after, table.dataTable.table thead th.sorting_desc:after, | ||||||
|  | table.dataTable.table thead td.sorting:after, | ||||||
|  | table.dataTable.table thead td.sorting_asc:after, | ||||||
|  | table.dataTable.table thead td.sorting_desc:after { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 12px; | ||||||
|  |   right: 8px; | ||||||
|  |   display: block; | ||||||
|  |   font-family: Icons; | ||||||
|  | } | ||||||
|  | table.dataTable.table thead th.sorting:after, | ||||||
|  | table.dataTable.table thead td.sorting:after { | ||||||
|  |   content: "\f0dc"; | ||||||
|  |   color: #ddd; | ||||||
|  |   font-size: 0.8em; | ||||||
|  | } | ||||||
|  | table.dataTable.table thead th.sorting_asc:after, | ||||||
|  | table.dataTable.table thead td.sorting_asc:after { | ||||||
|  |   content: "\f0de"; | ||||||
|  | } | ||||||
|  | table.dataTable.table thead th.sorting_desc:after, | ||||||
|  | table.dataTable.table thead td.sorting_desc:after { | ||||||
|  |   content: "\f0dd"; | ||||||
|  | } | ||||||
|  | table.dataTable.table td, | ||||||
|  | table.dataTable.table th { | ||||||
|  |   -webkit-box-sizing: content-box; | ||||||
|  |   -moz-box-sizing: content-box; | ||||||
|  |   box-sizing: content-box; | ||||||
|  | } | ||||||
|  | table.dataTable.table td.dataTables_empty, | ||||||
|  | table.dataTable.table th.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable.table.nowrap th, | ||||||
|  | table.dataTable.table.nowrap td { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_wrapper div.dataTables_length select { | ||||||
|  |   vertical-align: middle; | ||||||
|  |   min-height: 2.7142em; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_length .ui.selection.dropdown { | ||||||
|  |   min-width: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter input { | ||||||
|  |   margin-left: 0.5em; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_info { | ||||||
|  |   padding-top: 13px; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 200px; | ||||||
|  |   margin-left: -100px; | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.row.dt-table { | ||||||
|  |   padding: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_scrollHead table.dataTable { | ||||||
|  |   border-bottom-right-radius: 0; | ||||||
|  |   border-bottom-left-radius: 0; | ||||||
|  |   border-bottom: none; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_scrollBody thead .sorting:after, | ||||||
|  | div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_asc:after, | ||||||
|  | div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_desc:after { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_scrollBody table.dataTable { | ||||||
|  |   border-radius: 0; | ||||||
|  |   border-top: none; | ||||||
|  |   border-bottom-width: 0; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_scrollBody table.dataTable.no-footer { | ||||||
|  |   border-bottom-width: 1px; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_scrollFoot table.dataTable { | ||||||
|  |   border-top-right-radius: 0; | ||||||
|  |   border-top-left-radius: 0; | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								static/vendor/datatables/css/dataTables.semanticui.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | table.dataTable.table{margin:0}table.dataTable.table thead th,table.dataTable.table thead td{position:relative}table.dataTable.table thead th.sorting,table.dataTable.table thead th.sorting_asc,table.dataTable.table thead th.sorting_desc,table.dataTable.table thead td.sorting,table.dataTable.table thead td.sorting_asc,table.dataTable.table thead td.sorting_desc{padding-right:20px}table.dataTable.table thead th.sorting:after,table.dataTable.table thead th.sorting_asc:after,table.dataTable.table thead th.sorting_desc:after,table.dataTable.table thead td.sorting:after,table.dataTable.table thead td.sorting_asc:after,table.dataTable.table thead td.sorting_desc:after{position:absolute;top:12px;right:8px;display:block;font-family:Icons}table.dataTable.table thead th.sorting:after,table.dataTable.table thead td.sorting:after{content:"\f0dc";color:#ddd;font-size:0.8em}table.dataTable.table thead th.sorting_asc:after,table.dataTable.table thead td.sorting_asc:after{content:"\f0de"}table.dataTable.table thead th.sorting_desc:after,table.dataTable.table thead td.sorting_desc:after{content:"\f0dd"}table.dataTable.table td,table.dataTable.table th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable.table td.dataTables_empty,table.dataTable.table th.dataTables_empty{text-align:center}table.dataTable.table.nowrap th,table.dataTable.table.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{vertical-align:middle;min-height:2.7142em}div.dataTables_wrapper div.dataTables_length .ui.selection.dropdown{min-width:0}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:13px;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;text-align:center}div.dataTables_wrapper div.row.dt-table{padding:0}div.dataTables_wrapper div.dataTables_scrollHead table.dataTable{border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom:none}div.dataTables_wrapper div.dataTables_scrollBody thead .sorting:after,div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_asc:after,div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_desc:after{display:none}div.dataTables_wrapper div.dataTables_scrollBody table.dataTable{border-radius:0;border-top:none;border-bottom-width:0}div.dataTables_wrapper div.dataTables_scrollBody table.dataTable.no-footer{border-bottom-width:1px}div.dataTables_wrapper div.dataTables_scrollFoot table.dataTable{border-top-right-radius:0;border-top-left-radius:0;border-top:none} | ||||||
							
								
								
									
										146
									
								
								static/vendor/datatables/css/dataTables.uikit.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,146 @@ | |||||||
|  | table.dataTable { | ||||||
|  |   clear: both; | ||||||
|  |   margin-top: 6px !important; | ||||||
|  |   margin-bottom: 6px !important; | ||||||
|  |   max-width: none !important; | ||||||
|  | } | ||||||
|  | table.dataTable td, | ||||||
|  | table.dataTable th { | ||||||
|  |   -webkit-box-sizing: content-box; | ||||||
|  |   box-sizing: content-box; | ||||||
|  | } | ||||||
|  | table.dataTable td.dataTables_empty, | ||||||
|  | table.dataTable th.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable.nowrap th, | ||||||
|  | table.dataTable.nowrap td { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_wrapper div.row.uk-grid.dt-merge-grid { | ||||||
|  |   margin-top: 5px; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_length label { | ||||||
|  |   font-weight: normal; | ||||||
|  |   text-align: left; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_length select { | ||||||
|  |   width: 75px; | ||||||
|  |   display: inline-block; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter label { | ||||||
|  |   font-weight: normal; | ||||||
|  |   white-space: nowrap; | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_filter input { | ||||||
|  |   margin-left: 0.5em; | ||||||
|  |   display: inline-block; | ||||||
|  |   width: auto; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_info { | ||||||
|  |   padding-top: 8px; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_paginate { | ||||||
|  |   margin: 0; | ||||||
|  |   white-space: nowrap; | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_paginate ul.pagination { | ||||||
|  |   margin: 2px 0; | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | div.dataTables_wrapper div.dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 200px; | ||||||
|  |   margin-left: -100px; | ||||||
|  |   margin-top: -26px; | ||||||
|  |   text-align: center; | ||||||
|  |   padding: 1em 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable thead > tr > th, | ||||||
|  | table.dataTable thead > tr > td { | ||||||
|  |   position: relative; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, | ||||||
|  | table.dataTable thead > tr > td.sorting_asc, | ||||||
|  | table.dataTable thead > tr > td.sorting_desc, | ||||||
|  | table.dataTable thead > tr > td.sorting { | ||||||
|  |   padding-right: 30px; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, | ||||||
|  | table.dataTable thead > tr > td.sorting:after, | ||||||
|  | table.dataTable thead > tr > td.sorting_asc:after, | ||||||
|  | table.dataTable thead > tr > td.sorting_desc:after { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 7px; | ||||||
|  |   right: 8px; | ||||||
|  |   display: block; | ||||||
|  |   font-family: 'FontAwesome'; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th.sorting:after, | ||||||
|  | table.dataTable thead > tr > td.sorting:after { | ||||||
|  |   content: "\f0dc"; | ||||||
|  |   color: #ddd; | ||||||
|  |   font-size: 0.8em; | ||||||
|  |   padding-top: 0.12em; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th.sorting_asc:after, | ||||||
|  | table.dataTable thead > tr > td.sorting_asc:after { | ||||||
|  |   content: "\f0de"; | ||||||
|  | } | ||||||
|  | table.dataTable thead > tr > th.sorting_desc:after, | ||||||
|  | table.dataTable thead > tr > td.sorting_desc:after { | ||||||
|  |   content: "\f0dd"; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollHead table.dataTable { | ||||||
|  |   margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollBody table { | ||||||
|  |   border-top: none; | ||||||
|  |   margin-top: 0 !important; | ||||||
|  |   margin-bottom: 0 !important; | ||||||
|  | } | ||||||
|  | div.dataTables_scrollBody table thead .sorting:after, | ||||||
|  | div.dataTables_scrollBody table thead .sorting_asc:after, | ||||||
|  | div.dataTables_scrollBody table thead .sorting_desc:after { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | div.dataTables_scrollBody table tbody tr:first-child th, | ||||||
|  | div.dataTables_scrollBody table tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | div.dataTables_scrollFoot table { | ||||||
|  |   margin-top: 0 !important; | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @media screen and (max-width: 767px) { | ||||||
|  |   div.dataTables_wrapper div.dataTables_length, | ||||||
|  |   div.dataTables_wrapper div.dataTables_filter, | ||||||
|  |   div.dataTables_wrapper div.dataTables_info, | ||||||
|  |   div.dataTables_wrapper div.dataTables_paginate { | ||||||
|  |     text-align: center; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | table.dataTable.uk-table-condensed > thead > tr > th { | ||||||
|  |   padding-right: 20px; | ||||||
|  | } | ||||||
|  | table.dataTable.uk-table-condensed .sorting:after, | ||||||
|  | table.dataTable.uk-table-condensed .sorting_asc:after, | ||||||
|  | table.dataTable.uk-table-condensed .sorting_desc:after { | ||||||
|  |   top: 6px; | ||||||
|  |   right: 6px; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								static/vendor/datatables/css/dataTables.uikit.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.row.uk-grid.dt-merge-grid{margin-top:5px}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th,table.dataTable thead>tr>td{position:relative}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:after{position:absolute;top:7px;right:8px;display:block;font-family:'FontAwesome'}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>td.sorting:after{content:"\f0dc";color:#ddd;font-size:0.8em;padding-top:0.12em}table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>td.sorting_asc:after{content:"\f0de"}table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting_desc:after{content:"\f0dd"}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.uk-table-condensed>thead>tr>th{padding-right:20px}table.dataTable.uk-table-condensed .sorting:after,table.dataTable.uk-table-condensed .sorting_asc:after,table.dataTable.uk-table-condensed .sorting_desc:after{top:6px;right:6px} | ||||||
							
								
								
									
										452
									
								
								static/vendor/datatables/css/jquery.dataTables.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,452 @@ | |||||||
|  | /* | ||||||
|  |  * Table styles | ||||||
|  |  */ | ||||||
|  | table.dataTable { | ||||||
|  |   width: 100%; | ||||||
|  |   margin: 0 auto; | ||||||
|  |   clear: both; | ||||||
|  |   border-collapse: separate; | ||||||
|  |   border-spacing: 0; | ||||||
|  |   /* | ||||||
|  |    * Header and footer styles | ||||||
|  |    */ | ||||||
|  |   /* | ||||||
|  |    * Body styles | ||||||
|  |    */ | ||||||
|  | } | ||||||
|  | table.dataTable thead th, | ||||||
|  | table.dataTable tfoot th { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | table.dataTable thead th, | ||||||
|  | table.dataTable thead td { | ||||||
|  |   padding: 10px 18px; | ||||||
|  |   border-bottom: 1px solid #111; | ||||||
|  | } | ||||||
|  | table.dataTable thead th:active, | ||||||
|  | table.dataTable thead td:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | table.dataTable tfoot th, | ||||||
|  | table.dataTable tfoot td { | ||||||
|  |   padding: 10px 18px 6px 18px; | ||||||
|  |   border-top: 1px solid #111; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc { | ||||||
|  |   cursor: pointer; | ||||||
|  |   *cursor: hand; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting, | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc, | ||||||
|  | table.dataTable thead .sorting_asc_disabled, | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  |   background-repeat: no-repeat; | ||||||
|  |   background-position: center right; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting { | ||||||
|  |   background-image: url("../images/sort_both.png"); | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc { | ||||||
|  |   background-image: url("../images/sort_asc.png"); | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_desc { | ||||||
|  |   background-image: url("../images/sort_desc.png"); | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc_disabled { | ||||||
|  |   background-image: url("../images/sort_asc_disabled.png"); | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_desc_disabled { | ||||||
|  |   background-image: url("../images/sort_desc_disabled.png"); | ||||||
|  | } | ||||||
|  | table.dataTable tbody tr { | ||||||
|  |   background-color: #ffffff; | ||||||
|  | } | ||||||
|  | table.dataTable tbody tr.selected { | ||||||
|  |   background-color: #B0BED9; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th, | ||||||
|  | table.dataTable tbody td { | ||||||
|  |   padding: 8px 10px; | ||||||
|  | } | ||||||
|  | table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { | ||||||
|  |   border-top: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.row-border tbody tr:first-child th, | ||||||
|  | table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, | ||||||
|  | table.dataTable.display tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { | ||||||
|  |   border-top: 1px solid #ddd; | ||||||
|  |   border-right: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody tr th:first-child, | ||||||
|  | table.dataTable.cell-border tbody tr td:first-child { | ||||||
|  |   border-left: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody tr:first-child th, | ||||||
|  | table.dataTable.cell-border tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  | table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { | ||||||
|  |   background-color: #f9f9f9; | ||||||
|  | } | ||||||
|  | table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { | ||||||
|  |   background-color: #acbad4; | ||||||
|  | } | ||||||
|  | table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { | ||||||
|  |   background-color: #f6f6f6; | ||||||
|  | } | ||||||
|  | table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { | ||||||
|  |   background-color: #aab7d1; | ||||||
|  | } | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_1, | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_2, | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr > .sorting_3 { | ||||||
|  |   background-color: #fafafa; | ||||||
|  | } | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_1, | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_2, | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr.selected > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr.selected > .sorting_3 { | ||||||
|  |   background-color: #acbad5; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { | ||||||
|  |   background-color: #f1f1f1; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { | ||||||
|  |   background-color: #f3f3f3; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { | ||||||
|  |   background-color: whitesmoke; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { | ||||||
|  |   background-color: #a6b4cd; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { | ||||||
|  |   background-color: #a8b5cf; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { | ||||||
|  |   background-color: #a9b7d1; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { | ||||||
|  |   background-color: #fafafa; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { | ||||||
|  |   background-color: #fcfcfc; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { | ||||||
|  |   background-color: #fefefe; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { | ||||||
|  |   background-color: #acbad5; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { | ||||||
|  |   background-color: #aebcd6; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { | ||||||
|  |   background-color: #afbdd8; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { | ||||||
|  |   background-color: #eaeaea; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { | ||||||
|  |   background-color: #ececec; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { | ||||||
|  |   background-color: #efefef; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { | ||||||
|  |   background-color: #a2aec7; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { | ||||||
|  |   background-color: #a3b0c9; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { | ||||||
|  |   background-color: #a5b2cb; | ||||||
|  | } | ||||||
|  | table.dataTable.no-footer { | ||||||
|  |   border-bottom: 1px solid #111; | ||||||
|  | } | ||||||
|  | table.dataTable.nowrap th, table.dataTable.nowrap td { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable.compact thead th, | ||||||
|  | table.dataTable.compact thead td { | ||||||
|  |   padding: 4px 17px 4px 4px; | ||||||
|  | } | ||||||
|  | table.dataTable.compact tfoot th, | ||||||
|  | table.dataTable.compact tfoot td { | ||||||
|  |   padding: 4px; | ||||||
|  | } | ||||||
|  | table.dataTable.compact tbody th, | ||||||
|  | table.dataTable.compact tbody td { | ||||||
|  |   padding: 4px; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-left, | ||||||
|  | table.dataTable td.dt-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-center, | ||||||
|  | table.dataTable td.dt-center, | ||||||
|  | table.dataTable td.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-right, | ||||||
|  | table.dataTable td.dt-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-justify, | ||||||
|  | table.dataTable td.dt-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-nowrap, | ||||||
|  | table.dataTable td.dt-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-left, | ||||||
|  | table.dataTable thead td.dt-head-left, | ||||||
|  | table.dataTable tfoot th.dt-head-left, | ||||||
|  | table.dataTable tfoot td.dt-head-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-center, | ||||||
|  | table.dataTable thead td.dt-head-center, | ||||||
|  | table.dataTable tfoot th.dt-head-center, | ||||||
|  | table.dataTable tfoot td.dt-head-center { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-right, | ||||||
|  | table.dataTable thead td.dt-head-right, | ||||||
|  | table.dataTable tfoot th.dt-head-right, | ||||||
|  | table.dataTable tfoot td.dt-head-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-justify, | ||||||
|  | table.dataTable thead td.dt-head-justify, | ||||||
|  | table.dataTable tfoot th.dt-head-justify, | ||||||
|  | table.dataTable tfoot td.dt-head-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-nowrap, | ||||||
|  | table.dataTable thead td.dt-head-nowrap, | ||||||
|  | table.dataTable tfoot th.dt-head-nowrap, | ||||||
|  | table.dataTable tfoot td.dt-head-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-left, | ||||||
|  | table.dataTable tbody td.dt-body-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-center, | ||||||
|  | table.dataTable tbody td.dt-body-center { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-right, | ||||||
|  | table.dataTable tbody td.dt-body-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-justify, | ||||||
|  | table.dataTable tbody td.dt-body-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-nowrap, | ||||||
|  | table.dataTable tbody td.dt-body-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable, | ||||||
|  | table.dataTable th, | ||||||
|  | table.dataTable td { | ||||||
|  |   -webkit-box-sizing: content-box; | ||||||
|  |   box-sizing: content-box; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Control feature layout | ||||||
|  |  */ | ||||||
|  | .dataTables_wrapper { | ||||||
|  |   position: relative; | ||||||
|  |   clear: both; | ||||||
|  |   *zoom: 1; | ||||||
|  |   zoom: 1; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_length { | ||||||
|  |   float: left; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_filter { | ||||||
|  |   float: right; | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_filter input { | ||||||
|  |   margin-left: 0.5em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_info { | ||||||
|  |   clear: both; | ||||||
|  |   float: left; | ||||||
|  |   padding-top: 0.755em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate { | ||||||
|  |   float: right; | ||||||
|  |   text-align: right; | ||||||
|  |   padding-top: 0.25em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button { | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   display: inline-block; | ||||||
|  |   min-width: 1.5em; | ||||||
|  |   padding: 0.5em 1em; | ||||||
|  |   margin-left: 2px; | ||||||
|  |   text-align: center; | ||||||
|  |   text-decoration: none !important; | ||||||
|  |   cursor: pointer; | ||||||
|  |   *cursor: hand; | ||||||
|  |   color: #333 !important; | ||||||
|  |   border: 1px solid transparent; | ||||||
|  |   border-radius: 2px; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { | ||||||
|  |   color: #333 !important; | ||||||
|  |   border: 1px solid #979797; | ||||||
|  |   background-color: white; | ||||||
|  |   background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); | ||||||
|  |   /* Chrome,Safari4+ */ | ||||||
|  |   background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); | ||||||
|  |   /* Chrome10+,Safari5.1+ */ | ||||||
|  |   background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); | ||||||
|  |   /* FF3.6+ */ | ||||||
|  |   background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); | ||||||
|  |   /* IE10+ */ | ||||||
|  |   background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); | ||||||
|  |   /* Opera 11.10+ */ | ||||||
|  |   background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); | ||||||
|  |   /* W3C */ | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { | ||||||
|  |   cursor: default; | ||||||
|  |   color: #666 !important; | ||||||
|  |   border: 1px solid transparent; | ||||||
|  |   background: transparent; | ||||||
|  |   box-shadow: none; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button:hover { | ||||||
|  |   color: white !important; | ||||||
|  |   border: 1px solid #111; | ||||||
|  |   background-color: #585858; | ||||||
|  |   background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); | ||||||
|  |   /* Chrome,Safari4+ */ | ||||||
|  |   background: -webkit-linear-gradient(top, #585858 0%, #111 100%); | ||||||
|  |   /* Chrome10+,Safari5.1+ */ | ||||||
|  |   background: -moz-linear-gradient(top, #585858 0%, #111 100%); | ||||||
|  |   /* FF3.6+ */ | ||||||
|  |   background: -ms-linear-gradient(top, #585858 0%, #111 100%); | ||||||
|  |   /* IE10+ */ | ||||||
|  |   background: -o-linear-gradient(top, #585858 0%, #111 100%); | ||||||
|  |   /* Opera 11.10+ */ | ||||||
|  |   background: linear-gradient(to bottom, #585858 0%, #111 100%); | ||||||
|  |   /* W3C */ | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .paginate_button:active { | ||||||
|  |   outline: none; | ||||||
|  |   background-color: #2b2b2b; | ||||||
|  |   background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); | ||||||
|  |   /* Chrome,Safari4+ */ | ||||||
|  |   background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* Chrome10+,Safari5.1+ */ | ||||||
|  |   background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* FF3.6+ */ | ||||||
|  |   background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* IE10+ */ | ||||||
|  |   background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* Opera 11.10+ */ | ||||||
|  |   background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); | ||||||
|  |   /* W3C */ | ||||||
|  |   box-shadow: inset 0 0 3px #111; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .ellipsis { | ||||||
|  |   padding: 0 1em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 100%; | ||||||
|  |   height: 40px; | ||||||
|  |   margin-left: -50%; | ||||||
|  |   margin-top: -25px; | ||||||
|  |   padding-top: 20px; | ||||||
|  |   text-align: center; | ||||||
|  |   font-size: 1.2em; | ||||||
|  |   background-color: white; | ||||||
|  |   background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); | ||||||
|  |   background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_length, | ||||||
|  | .dataTables_wrapper .dataTables_filter, | ||||||
|  | .dataTables_wrapper .dataTables_info, | ||||||
|  | .dataTables_wrapper .dataTables_processing, | ||||||
|  | .dataTables_wrapper .dataTables_paginate { | ||||||
|  |   color: #333; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll { | ||||||
|  |   clear: both; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { | ||||||
|  |   *margin-top: -1px; | ||||||
|  |   -webkit-overflow-scrolling: touch; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td { | ||||||
|  |   vertical-align: middle; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing, | ||||||
|  | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing { | ||||||
|  |   height: 0; | ||||||
|  |   overflow: hidden; | ||||||
|  |   margin: 0 !important; | ||||||
|  |   padding: 0 !important; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper.no-footer .dataTables_scrollBody { | ||||||
|  |   border-bottom: 1px solid #111; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper.no-footer div.dataTables_scrollHead table, | ||||||
|  | .dataTables_wrapper.no-footer div.dataTables_scrollBody table { | ||||||
|  |   border-bottom: none; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper:after { | ||||||
|  |   visibility: hidden; | ||||||
|  |   display: block; | ||||||
|  |   content: ""; | ||||||
|  |   clear: both; | ||||||
|  |   height: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @media screen and (max-width: 767px) { | ||||||
|  |   .dataTables_wrapper .dataTables_info, | ||||||
|  |   .dataTables_wrapper .dataTables_paginate { | ||||||
|  |     float: none; | ||||||
|  |     text-align: center; | ||||||
|  |   } | ||||||
|  |   .dataTables_wrapper .dataTables_paginate { | ||||||
|  |     margin-top: 0.5em; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @media screen and (max-width: 640px) { | ||||||
|  |   .dataTables_wrapper .dataTables_length, | ||||||
|  |   .dataTables_wrapper .dataTables_filter { | ||||||
|  |     float: none; | ||||||
|  |     text-align: center; | ||||||
|  |   } | ||||||
|  |   .dataTables_wrapper .dataTables_filter { | ||||||
|  |     margin-top: 0.5em; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								static/vendor/datatables/css/jquery.dataTables.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										416
									
								
								static/vendor/datatables/css/jquery.dataTables_themeroller.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,416 @@ | |||||||
|  | /* | ||||||
|  |  * Table styles | ||||||
|  |  */ | ||||||
|  | table.dataTable { | ||||||
|  |   width: 100%; | ||||||
|  |   margin: 0 auto; | ||||||
|  |   clear: both; | ||||||
|  |   border-collapse: separate; | ||||||
|  |   border-spacing: 0; | ||||||
|  |   /* | ||||||
|  |    * Header and footer styles | ||||||
|  |    */ | ||||||
|  |   /* | ||||||
|  |    * Body styles | ||||||
|  |    */ | ||||||
|  | } | ||||||
|  | table.dataTable thead th, | ||||||
|  | table.dataTable thead td, | ||||||
|  | table.dataTable tfoot th, | ||||||
|  | table.dataTable tfoot td { | ||||||
|  |   padding: 4px 10px; | ||||||
|  | } | ||||||
|  | table.dataTable thead th, | ||||||
|  | table.dataTable tfoot th { | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | table.dataTable thead th:active, | ||||||
|  | table.dataTable thead td:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | table.dataTable thead .sorting_asc, | ||||||
|  | table.dataTable thead .sorting_desc, | ||||||
|  | table.dataTable thead .sorting { | ||||||
|  |   cursor: pointer; | ||||||
|  |   *cursor: hand; | ||||||
|  | } | ||||||
|  | table.dataTable thead th div.DataTables_sort_wrapper { | ||||||
|  |   position: relative; | ||||||
|  |   padding-right: 10px; | ||||||
|  | } | ||||||
|  | table.dataTable thead th div.DataTables_sort_wrapper span { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   margin-top: -8px; | ||||||
|  |   right: -5px; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.ui-state-default { | ||||||
|  |   border-right-width: 0; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.ui-state-default:last-child { | ||||||
|  |   border-right-width: 1px; | ||||||
|  | } | ||||||
|  | table.dataTable tbody tr { | ||||||
|  |   background-color: #ffffff; | ||||||
|  | } | ||||||
|  | table.dataTable tbody tr.selected { | ||||||
|  |   background-color: #B0BED9; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th, | ||||||
|  | table.dataTable tbody td { | ||||||
|  |   padding: 8px 10px; | ||||||
|  | } | ||||||
|  | table.dataTable th.center, | ||||||
|  | table.dataTable td.center, | ||||||
|  | table.dataTable td.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable th.right, | ||||||
|  | table.dataTable td.right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { | ||||||
|  |   border-top: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.row-border tbody tr:first-child th, | ||||||
|  | table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, | ||||||
|  | table.dataTable.display tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { | ||||||
|  |   border-top: 1px solid #ddd; | ||||||
|  |   border-right: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody tr th:first-child, | ||||||
|  | table.dataTable.cell-border tbody tr td:first-child { | ||||||
|  |   border-left: 1px solid #ddd; | ||||||
|  | } | ||||||
|  | table.dataTable.cell-border tbody tr:first-child th, | ||||||
|  | table.dataTable.cell-border tbody tr:first-child td { | ||||||
|  |   border-top: none; | ||||||
|  | } | ||||||
|  | table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { | ||||||
|  |   background-color: #f9f9f9; | ||||||
|  | } | ||||||
|  | table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { | ||||||
|  |   background-color: #abb9d3; | ||||||
|  | } | ||||||
|  | table.dataTable.hover tbody tr:hover, | ||||||
|  | table.dataTable.hover tbody tr.odd:hover, | ||||||
|  | table.dataTable.hover tbody tr.even:hover, table.dataTable.display tbody tr:hover, | ||||||
|  | table.dataTable.display tbody tr.odd:hover, | ||||||
|  | table.dataTable.display tbody tr.even:hover { | ||||||
|  |   background-color: whitesmoke; | ||||||
|  | } | ||||||
|  | table.dataTable.hover tbody tr:hover.selected, | ||||||
|  | table.dataTable.hover tbody tr.odd:hover.selected, | ||||||
|  | table.dataTable.hover tbody tr.even:hover.selected, table.dataTable.display tbody tr:hover.selected, | ||||||
|  | table.dataTable.display tbody tr.odd:hover.selected, | ||||||
|  | table.dataTable.display tbody tr.even:hover.selected { | ||||||
|  |   background-color: #a9b7d1; | ||||||
|  | } | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_1, | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_2, | ||||||
|  | table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr > .sorting_3 { | ||||||
|  |   background-color: #f9f9f9; | ||||||
|  | } | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_1, | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_2, | ||||||
|  | table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr.selected > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr.selected > .sorting_3 { | ||||||
|  |   background-color: #acbad4; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { | ||||||
|  |   background-color: #f1f1f1; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { | ||||||
|  |   background-color: #f3f3f3; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { | ||||||
|  |   background-color: whitesmoke; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { | ||||||
|  |   background-color: #a6b3cd; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { | ||||||
|  |   background-color: #a7b5ce; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { | ||||||
|  |   background-color: #a9b6d0; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { | ||||||
|  |   background-color: #f9f9f9; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { | ||||||
|  |   background-color: #fbfbfb; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { | ||||||
|  |   background-color: #fdfdfd; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { | ||||||
|  |   background-color: #acbad4; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { | ||||||
|  |   background-color: #adbbd6; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { | ||||||
|  |   background-color: #afbdd8; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr.odd:hover > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr.even:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1, | ||||||
|  | table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1, | ||||||
|  | table.dataTable.order-column.hover tbody tr.even:hover > .sorting_1 { | ||||||
|  |   background-color: #eaeaea; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr.odd:hover > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr.even:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2, | ||||||
|  | table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2, | ||||||
|  | table.dataTable.order-column.hover tbody tr.even:hover > .sorting_2 { | ||||||
|  |   background-color: #ebebeb; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover > .sorting_3, | ||||||
|  | table.dataTable.display tbody tr.odd:hover > .sorting_3, | ||||||
|  | table.dataTable.display tbody tr.even:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3, | ||||||
|  | table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3, | ||||||
|  | table.dataTable.order-column.hover tbody tr.even:hover > .sorting_3 { | ||||||
|  |   background-color: #eeeeee; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr.odd:hover.selected > .sorting_1, | ||||||
|  | table.dataTable.display tbody tr.even:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1, | ||||||
|  | table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1, | ||||||
|  | table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1 { | ||||||
|  |   background-color: #a1aec7; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr.odd:hover.selected > .sorting_2, | ||||||
|  | table.dataTable.display tbody tr.even:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2, | ||||||
|  | table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2, | ||||||
|  | table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2 { | ||||||
|  |   background-color: #a2afc8; | ||||||
|  | } | ||||||
|  | table.dataTable.display tbody tr:hover.selected > .sorting_3, | ||||||
|  | table.dataTable.display tbody tr.odd:hover.selected > .sorting_3, | ||||||
|  | table.dataTable.display tbody tr.even:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3, | ||||||
|  | table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3, | ||||||
|  | table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 { | ||||||
|  |   background-color: #a4b2cb; | ||||||
|  | } | ||||||
|  | table.dataTable.nowrap th, table.dataTable.nowrap td { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable.compact thead th, | ||||||
|  | table.dataTable.compact thead td { | ||||||
|  |   padding: 5px 9px; | ||||||
|  | } | ||||||
|  | table.dataTable.compact tfoot th, | ||||||
|  | table.dataTable.compact tfoot td { | ||||||
|  |   padding: 5px 9px 3px 9px; | ||||||
|  | } | ||||||
|  | table.dataTable.compact tbody th, | ||||||
|  | table.dataTable.compact tbody td { | ||||||
|  |   padding: 4px 5px; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-left, | ||||||
|  | table.dataTable td.dt-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-center, | ||||||
|  | table.dataTable td.dt-center, | ||||||
|  | table.dataTable td.dataTables_empty { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-right, | ||||||
|  | table.dataTable td.dt-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-justify, | ||||||
|  | table.dataTable td.dt-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable th.dt-nowrap, | ||||||
|  | table.dataTable td.dt-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-left, | ||||||
|  | table.dataTable thead td.dt-head-left, | ||||||
|  | table.dataTable tfoot th.dt-head-left, | ||||||
|  | table.dataTable tfoot td.dt-head-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-center, | ||||||
|  | table.dataTable thead td.dt-head-center, | ||||||
|  | table.dataTable tfoot th.dt-head-center, | ||||||
|  | table.dataTable tfoot td.dt-head-center { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-right, | ||||||
|  | table.dataTable thead td.dt-head-right, | ||||||
|  | table.dataTable tfoot th.dt-head-right, | ||||||
|  | table.dataTable tfoot td.dt-head-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-justify, | ||||||
|  | table.dataTable thead td.dt-head-justify, | ||||||
|  | table.dataTable tfoot th.dt-head-justify, | ||||||
|  | table.dataTable tfoot td.dt-head-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable thead th.dt-head-nowrap, | ||||||
|  | table.dataTable thead td.dt-head-nowrap, | ||||||
|  | table.dataTable tfoot th.dt-head-nowrap, | ||||||
|  | table.dataTable tfoot td.dt-head-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-left, | ||||||
|  | table.dataTable tbody td.dt-body-left { | ||||||
|  |   text-align: left; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-center, | ||||||
|  | table.dataTable tbody td.dt-body-center { | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-right, | ||||||
|  | table.dataTable tbody td.dt-body-right { | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-justify, | ||||||
|  | table.dataTable tbody td.dt-body-justify { | ||||||
|  |   text-align: justify; | ||||||
|  | } | ||||||
|  | table.dataTable tbody th.dt-body-nowrap, | ||||||
|  | table.dataTable tbody td.dt-body-nowrap { | ||||||
|  |   white-space: nowrap; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | table.dataTable, | ||||||
|  | table.dataTable th, | ||||||
|  | table.dataTable td { | ||||||
|  |   -webkit-box-sizing: content-box; | ||||||
|  |   -moz-box-sizing: content-box; | ||||||
|  |   box-sizing: content-box; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Control feature layout | ||||||
|  |  */ | ||||||
|  | .dataTables_wrapper { | ||||||
|  |   position: relative; | ||||||
|  |   clear: both; | ||||||
|  |   *zoom: 1; | ||||||
|  |   zoom: 1; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_length { | ||||||
|  |   float: left; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_filter { | ||||||
|  |   float: right; | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_filter input { | ||||||
|  |   margin-left: 0.5em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_info { | ||||||
|  |   clear: both; | ||||||
|  |   float: left; | ||||||
|  |   padding-top: 0.55em; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate { | ||||||
|  |   float: right; | ||||||
|  |   text-align: right; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .fg-button { | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   display: inline-block; | ||||||
|  |   min-width: 1.5em; | ||||||
|  |   padding: 0.5em; | ||||||
|  |   margin-left: 2px; | ||||||
|  |   text-align: center; | ||||||
|  |   text-decoration: none !important; | ||||||
|  |   cursor: pointer; | ||||||
|  |   *cursor: hand; | ||||||
|  |   color: #333 !important; | ||||||
|  |   border: 1px solid transparent; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .fg-button:active { | ||||||
|  |   outline: none; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .fg-button:first-child { | ||||||
|  |   border-top-left-radius: 3px; | ||||||
|  |   border-bottom-left-radius: 3px; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_paginate .fg-button:last-child { | ||||||
|  |   border-top-right-radius: 3px; | ||||||
|  |   border-bottom-right-radius: 3px; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_processing { | ||||||
|  |   position: absolute; | ||||||
|  |   top: 50%; | ||||||
|  |   left: 50%; | ||||||
|  |   width: 100%; | ||||||
|  |   height: 40px; | ||||||
|  |   margin-left: -50%; | ||||||
|  |   margin-top: -25px; | ||||||
|  |   padding-top: 20px; | ||||||
|  |   text-align: center; | ||||||
|  |   font-size: 1.2em; | ||||||
|  |   background-color: white; | ||||||
|  |   background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); | ||||||
|  |   /* Chrome,Safari4+ */ | ||||||
|  |   background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   /* Chrome10+,Safari5.1+ */ | ||||||
|  |   background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   /* FF3.6+ */ | ||||||
|  |   background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   /* IE10+ */ | ||||||
|  |   background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   /* Opera 11.10+ */ | ||||||
|  |   background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); | ||||||
|  |   /* W3C */ | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_length, | ||||||
|  | .dataTables_wrapper .dataTables_filter, | ||||||
|  | .dataTables_wrapper .dataTables_info, | ||||||
|  | .dataTables_wrapper .dataTables_processing, | ||||||
|  | .dataTables_wrapper .dataTables_paginate { | ||||||
|  |   color: #333; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scroll { | ||||||
|  |   clear: both; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .dataTables_scrollBody { | ||||||
|  |   *margin-top: -1px; | ||||||
|  |   -webkit-overflow-scrolling: touch; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .ui-widget-header { | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper .ui-toolbar { | ||||||
|  |   padding: 8px; | ||||||
|  | } | ||||||
|  | .dataTables_wrapper:after { | ||||||
|  |   visibility: hidden; | ||||||
|  |   display: block; | ||||||
|  |   content: ""; | ||||||
|  |   clear: both; | ||||||
|  |   height: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @media screen and (max-width: 767px) { | ||||||
|  |   .dataTables_wrapper .dataTables_length, | ||||||
|  |   .dataTables_wrapper .dataTables_filter, | ||||||
|  |   .dataTables_wrapper .dataTables_info, | ||||||
|  |   .dataTables_wrapper .dataTables_paginate { | ||||||
|  |     float: none; | ||||||
|  |     text-align: center; | ||||||
|  |   } | ||||||
|  |   .dataTables_wrapper .dataTables_filter, | ||||||
|  |   .dataTables_wrapper .dataTables_paginate { | ||||||
|  |     margin-top: 0.5em; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								static/vendor/datatables/images/Sorting icons.psd
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								static/vendor/datatables/images/favicon.ico
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 894 B | 
							
								
								
									
										
											BIN
										
									
								
								static/vendor/datatables/images/sort_asc.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 160 B | 
							
								
								
									
										
											BIN
										
									
								
								static/vendor/datatables/images/sort_asc_disabled.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 148 B | 
							
								
								
									
										
											BIN
										
									
								
								static/vendor/datatables/images/sort_both.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 201 B | 
							
								
								
									
										
											BIN
										
									
								
								static/vendor/datatables/images/sort_desc.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 158 B | 
							
								
								
									
										
											BIN
										
									
								
								static/vendor/datatables/images/sort_desc_disabled.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 146 B | 
							
								
								
									
										182
									
								
								static/vendor/datatables/js/dataTables.bootstrap.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,182 @@ | |||||||
|  | /*! DataTables Bootstrap 3 integration | ||||||
|  |  * ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and | ||||||
|  |  * DataTables 1.10 or newer. | ||||||
|  |  * | ||||||
|  |  * This file sets the defaults and adds options to DataTables to style its | ||||||
|  |  * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap | ||||||
|  |  * for further information. | ||||||
|  |  */ | ||||||
|  | (function( factory ){ | ||||||
|  | 	if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 		// AMD | ||||||
|  | 		define( ['jquery', 'datatables.net'], function ( $ ) { | ||||||
|  | 			return factory( $, window, document ); | ||||||
|  | 		} ); | ||||||
|  | 	} | ||||||
|  | 	else if ( typeof exports === 'object' ) { | ||||||
|  | 		// CommonJS | ||||||
|  | 		module.exports = function (root, $) { | ||||||
|  | 			if ( ! root ) { | ||||||
|  | 				root = window; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if ( ! $ || ! $.fn.dataTable ) { | ||||||
|  | 				// Require DataTables, which attaches to jQuery, including | ||||||
|  | 				// jQuery if needed and have a $ property so we can access the | ||||||
|  | 				// jQuery object that is used | ||||||
|  | 				$ = require('datatables.net')(root, $).$; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return factory( $, root, root.document ); | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		// Browser | ||||||
|  | 		factory( jQuery, window, document ); | ||||||
|  | 	} | ||||||
|  | }(function( $, window, document, undefined ) { | ||||||
|  | 'use strict'; | ||||||
|  | var DataTable = $.fn.dataTable; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Set the defaults for DataTables initialisation */ | ||||||
|  | $.extend( true, DataTable.defaults, { | ||||||
|  | 	dom: | ||||||
|  | 		"<'row'<'col-sm-6'l><'col-sm-6'f>>" + | ||||||
|  | 		"<'row'<'col-sm-12'tr>>" + | ||||||
|  | 		"<'row'<'col-sm-5'i><'col-sm-7'p>>", | ||||||
|  | 	renderer: 'bootstrap' | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Default class modification */ | ||||||
|  | $.extend( DataTable.ext.classes, { | ||||||
|  | 	sWrapper:      "dataTables_wrapper form-inline dt-bootstrap", | ||||||
|  | 	sFilterInput:  "form-control input-sm", | ||||||
|  | 	sLengthSelect: "form-control input-sm", | ||||||
|  | 	sProcessing:   "dataTables_processing panel panel-default" | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Bootstrap paging button renderer */ | ||||||
|  | DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { | ||||||
|  | 	var api     = new DataTable.Api( settings ); | ||||||
|  | 	var classes = settings.oClasses; | ||||||
|  | 	var lang    = settings.oLanguage.oPaginate; | ||||||
|  | 	var aria = settings.oLanguage.oAria.paginate || {}; | ||||||
|  | 	var btnDisplay, btnClass, counter=0; | ||||||
|  |  | ||||||
|  | 	var attach = function( container, buttons ) { | ||||||
|  | 		var i, ien, node, button; | ||||||
|  | 		var clickHandler = function ( e ) { | ||||||
|  | 			e.preventDefault(); | ||||||
|  | 			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { | ||||||
|  | 				api.page( e.data.action ).draw( 'page' ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) { | ||||||
|  | 			button = buttons[i]; | ||||||
|  |  | ||||||
|  | 			if ( $.isArray( button ) ) { | ||||||
|  | 				attach( container, button ); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				btnDisplay = ''; | ||||||
|  | 				btnClass = ''; | ||||||
|  |  | ||||||
|  | 				switch ( button ) { | ||||||
|  | 					case 'ellipsis': | ||||||
|  | 						btnDisplay = '…'; | ||||||
|  | 						btnClass = 'disabled'; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'first': | ||||||
|  | 						btnDisplay = lang.sFirst; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'previous': | ||||||
|  | 						btnDisplay = lang.sPrevious; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'next': | ||||||
|  | 						btnDisplay = lang.sNext; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'last': | ||||||
|  | 						btnDisplay = lang.sLast; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					default: | ||||||
|  | 						btnDisplay = button + 1; | ||||||
|  | 						btnClass = page === button ? | ||||||
|  | 							'active' : ''; | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ( btnDisplay ) { | ||||||
|  | 					node = $('<li>', { | ||||||
|  | 							'class': classes.sPageButton+' '+btnClass, | ||||||
|  | 							'id': idx === 0 && typeof button === 'string' ? | ||||||
|  | 								settings.sTableId +'_'+ button : | ||||||
|  | 								null | ||||||
|  | 						} ) | ||||||
|  | 						.append( $('<a>', { | ||||||
|  | 								'href': '#', | ||||||
|  | 								'aria-controls': settings.sTableId, | ||||||
|  | 								'aria-label': aria[ button ], | ||||||
|  | 								'data-dt-idx': counter, | ||||||
|  | 								'tabindex': settings.iTabIndex | ||||||
|  | 							} ) | ||||||
|  | 							.html( btnDisplay ) | ||||||
|  | 						) | ||||||
|  | 						.appendTo( container ); | ||||||
|  |  | ||||||
|  | 					settings.oApi._fnBindAction( | ||||||
|  | 						node, {action: button}, clickHandler | ||||||
|  | 					); | ||||||
|  |  | ||||||
|  | 					counter++; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// IE9 throws an 'unknown error' if document.activeElement is used | ||||||
|  | 	// inside an iframe or frame.  | ||||||
|  | 	var activeEl; | ||||||
|  |  | ||||||
|  | 	try { | ||||||
|  | 		// Because this approach is destroying and recreating the paging | ||||||
|  | 		// elements, focus is lost on the select button which is bad for | ||||||
|  | 		// accessibility. So we want to restore focus once the draw has | ||||||
|  | 		// completed | ||||||
|  | 		activeEl = $(host).find(document.activeElement).data('dt-idx'); | ||||||
|  | 	} | ||||||
|  | 	catch (e) {} | ||||||
|  |  | ||||||
|  | 	attach( | ||||||
|  | 		$(host).empty().html('<ul class="pagination"/>').children('ul'), | ||||||
|  | 		buttons | ||||||
|  | 	); | ||||||
|  |  | ||||||
|  | 	if ( activeEl ) { | ||||||
|  | 		$(host).find( '[data-dt-idx='+activeEl+']' ).focus(); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | return DataTable; | ||||||
|  | })); | ||||||
							
								
								
									
										8
									
								
								static/vendor/datatables/js/dataTables.bootstrap.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables Bootstrap 3 integration | ||||||
|  |  ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  | */ | ||||||
|  | (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(f.ext.classes, | ||||||
|  | {sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,m,j,n){var o=new f.Api(a),s=a.oClasses,k=a.oLanguage.oPaginate,t=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")}; | ||||||
|  | l=0;for(h=f.length;l<h;l++)if(c=f[l],b.isArray(c))q(d,c);else{g=e="";switch(c){case "ellipsis":e="…";g="disabled";break;case "first":e=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":e=k.sNext;g=c+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=c+(j<n-1?"":" disabled");break;default:e=c+1,g=j===c?"active":""}e&&(i=b("<li>",{"class":s.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("<a>",{href:"#", | ||||||
|  | "aria-controls":a.sTableId,"aria-label":t[c],"data-dt-idx":p,tabindex:a.iTabIndex}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(u){}q(b(h).empty().html('<ul class="pagination"/>').children("ul"),m);i&&b(h).find("[data-dt-idx="+i+"]").focus()};return f}); | ||||||
							
								
								
									
										184
									
								
								static/vendor/datatables/js/dataTables.bootstrap4.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,184 @@ | |||||||
|  | /*! DataTables Bootstrap 3 integration | ||||||
|  |  * ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and | ||||||
|  |  * DataTables 1.10 or newer. | ||||||
|  |  * | ||||||
|  |  * This file sets the defaults and adds options to DataTables to style its | ||||||
|  |  * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap | ||||||
|  |  * for further information. | ||||||
|  |  */ | ||||||
|  | (function( factory ){ | ||||||
|  | 	if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 		// AMD | ||||||
|  | 		define( ['jquery', 'datatables.net'], function ( $ ) { | ||||||
|  | 			return factory( $, window, document ); | ||||||
|  | 		} ); | ||||||
|  | 	} | ||||||
|  | 	else if ( typeof exports === 'object' ) { | ||||||
|  | 		// CommonJS | ||||||
|  | 		module.exports = function (root, $) { | ||||||
|  | 			if ( ! root ) { | ||||||
|  | 				root = window; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if ( ! $ || ! $.fn.dataTable ) { | ||||||
|  | 				// Require DataTables, which attaches to jQuery, including | ||||||
|  | 				// jQuery if needed and have a $ property so we can access the | ||||||
|  | 				// jQuery object that is used | ||||||
|  | 				$ = require('datatables.net')(root, $).$; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return factory( $, root, root.document ); | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		// Browser | ||||||
|  | 		factory( jQuery, window, document ); | ||||||
|  | 	} | ||||||
|  | }(function( $, window, document, undefined ) { | ||||||
|  | 'use strict'; | ||||||
|  | var DataTable = $.fn.dataTable; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Set the defaults for DataTables initialisation */ | ||||||
|  | $.extend( true, DataTable.defaults, { | ||||||
|  | 	dom: | ||||||
|  | 		"<'row'<'col-md-6'l><'col-md-6'f>>" + | ||||||
|  | 		"<'row'<'col-md-12'tr>>" + | ||||||
|  | 		"<'row'<'col-md-5'i><'col-md-7'p>>", | ||||||
|  | 	renderer: 'bootstrap' | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Default class modification */ | ||||||
|  | $.extend( DataTable.ext.classes, { | ||||||
|  | 	sWrapper:      "dataTables_wrapper form-inline dt-bootstrap4", | ||||||
|  | 	sFilterInput:  "form-control input-sm", | ||||||
|  | 	sLengthSelect: "form-control input-sm", | ||||||
|  | 	sProcessing:   "dataTables_processing panel panel-default", | ||||||
|  | 	sPageButton:   "paginate_button page-item" | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Bootstrap paging button renderer */ | ||||||
|  | DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { | ||||||
|  | 	var api     = new DataTable.Api( settings ); | ||||||
|  | 	var classes = settings.oClasses; | ||||||
|  | 	var lang    = settings.oLanguage.oPaginate; | ||||||
|  | 	var aria = settings.oLanguage.oAria.paginate || {}; | ||||||
|  | 	var btnDisplay, btnClass, counter=0; | ||||||
|  |  | ||||||
|  | 	var attach = function( container, buttons ) { | ||||||
|  | 		var i, ien, node, button; | ||||||
|  | 		var clickHandler = function ( e ) { | ||||||
|  | 			e.preventDefault(); | ||||||
|  | 			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { | ||||||
|  | 				api.page( e.data.action ).draw( 'page' ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) { | ||||||
|  | 			button = buttons[i]; | ||||||
|  |  | ||||||
|  | 			if ( $.isArray( button ) ) { | ||||||
|  | 				attach( container, button ); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				btnDisplay = ''; | ||||||
|  | 				btnClass = ''; | ||||||
|  |  | ||||||
|  | 				switch ( button ) { | ||||||
|  | 					case 'ellipsis': | ||||||
|  | 						btnDisplay = '…'; | ||||||
|  | 						btnClass = 'disabled'; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'first': | ||||||
|  | 						btnDisplay = lang.sFirst; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'previous': | ||||||
|  | 						btnDisplay = lang.sPrevious; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'next': | ||||||
|  | 						btnDisplay = lang.sNext; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'last': | ||||||
|  | 						btnDisplay = lang.sLast; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					default: | ||||||
|  | 						btnDisplay = button + 1; | ||||||
|  | 						btnClass = page === button ? | ||||||
|  | 							'active' : ''; | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ( btnDisplay ) { | ||||||
|  | 					node = $('<li>', { | ||||||
|  | 							'class': classes.sPageButton+' '+btnClass, | ||||||
|  | 							'id': idx === 0 && typeof button === 'string' ? | ||||||
|  | 								settings.sTableId +'_'+ button : | ||||||
|  | 								null | ||||||
|  | 						} ) | ||||||
|  | 						.append( $('<a>', { | ||||||
|  | 								'href': '#', | ||||||
|  | 								'aria-controls': settings.sTableId, | ||||||
|  | 								'aria-label': aria[ button ], | ||||||
|  | 								'data-dt-idx': counter, | ||||||
|  | 								'tabindex': settings.iTabIndex, | ||||||
|  | 								'class': 'page-link' | ||||||
|  | 							} ) | ||||||
|  | 							.html( btnDisplay ) | ||||||
|  | 						) | ||||||
|  | 						.appendTo( container ); | ||||||
|  |  | ||||||
|  | 					settings.oApi._fnBindAction( | ||||||
|  | 						node, {action: button}, clickHandler | ||||||
|  | 					); | ||||||
|  |  | ||||||
|  | 					counter++; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// IE9 throws an 'unknown error' if document.activeElement is used | ||||||
|  | 	// inside an iframe or frame.  | ||||||
|  | 	var activeEl; | ||||||
|  |  | ||||||
|  | 	try { | ||||||
|  | 		// Because this approach is destroying and recreating the paging | ||||||
|  | 		// elements, focus is lost on the select button which is bad for | ||||||
|  | 		// accessibility. So we want to restore focus once the draw has | ||||||
|  | 		// completed | ||||||
|  | 		activeEl = $(host).find(document.activeElement).data('dt-idx'); | ||||||
|  | 	} | ||||||
|  | 	catch (e) {} | ||||||
|  |  | ||||||
|  | 	attach( | ||||||
|  | 		$(host).empty().html('<ul class="pagination"/>').children('ul'), | ||||||
|  | 		buttons | ||||||
|  | 	); | ||||||
|  |  | ||||||
|  | 	if ( activeEl ) { | ||||||
|  | 		$(host).find( '[data-dt-idx='+activeEl+']' ).focus(); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | return DataTable; | ||||||
|  | })); | ||||||
							
								
								
									
										8
									
								
								static/vendor/datatables/js/dataTables.bootstrap4.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables Bootstrap 3 integration | ||||||
|  |  ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  | */ | ||||||
|  | (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-md-6'l><'col-md-6'f>><'row'<'col-md-12'tr>><'row'<'col-md-5'i><'col-md-7'p>>",renderer:"bootstrap"});b.extend(f.ext.classes, | ||||||
|  | {sWrapper:"dataTables_wrapper form-inline dt-bootstrap4",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,m,j,n){var o=new f.Api(a),s=a.oClasses,k=a.oLanguage.oPaginate,t=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&& | ||||||
|  | o.page(a.data.action).draw("page")};l=0;for(h=f.length;l<h;l++)if(c=f[l],b.isArray(c))q(d,c);else{g=e="";switch(c){case "ellipsis":e="…";g="disabled";break;case "first":e=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":e=k.sNext;g=c+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=c+(j<n-1?"":" disabled");break;default:e=c+1,g=j===c?"active":""}e&&(i=b("<li>",{"class":s.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+ | ||||||
|  | "_"+c:null}).append(b("<a>",{href:"#","aria-controls":a.sTableId,"aria-label":t[c],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(u){}q(b(h).empty().html('<ul class="pagination"/>').children("ul"),m);i&&b(h).find("[data-dt-idx="+i+"]").focus()};return f}); | ||||||
							
								
								
									
										174
									
								
								static/vendor/datatables/js/dataTables.foundation.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,174 @@ | |||||||
|  | /*! DataTables Foundation integration | ||||||
|  |  * ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * DataTables integration for Foundation. This requires Foundation 5 and | ||||||
|  |  * DataTables 1.10 or newer. | ||||||
|  |  * | ||||||
|  |  * This file sets the defaults and adds options to DataTables to style its | ||||||
|  |  * controls using Foundation. See http://datatables.net/manual/styling/foundation | ||||||
|  |  * for further information. | ||||||
|  |  */ | ||||||
|  | (function( factory ){ | ||||||
|  | 	if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 		// AMD | ||||||
|  | 		define( ['jquery', 'datatables.net'], function ( $ ) { | ||||||
|  | 			return factory( $, window, document ); | ||||||
|  | 		} ); | ||||||
|  | 	} | ||||||
|  | 	else if ( typeof exports === 'object' ) { | ||||||
|  | 		// CommonJS | ||||||
|  | 		module.exports = function (root, $) { | ||||||
|  | 			if ( ! root ) { | ||||||
|  | 				root = window; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if ( ! $ || ! $.fn.dataTable ) { | ||||||
|  | 				$ = require('datatables.net')(root, $).$; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return factory( $, root, root.document ); | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		// Browser | ||||||
|  | 		factory( jQuery, window, document ); | ||||||
|  | 	} | ||||||
|  | }(function( $, window, document, undefined ) { | ||||||
|  | 'use strict'; | ||||||
|  | var DataTable = $.fn.dataTable; | ||||||
|  |  | ||||||
|  | // Detect Foundation 5 / 6 as they have different element and class requirements | ||||||
|  | var meta = $('<meta class="foundation-mq"/>').appendTo('head'); | ||||||
|  | DataTable.ext.foundationVersion = meta.css('font-family').match(/small|medium|large/) ? 6 : 5; | ||||||
|  | meta.remove(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | $.extend( DataTable.ext.classes, { | ||||||
|  | 	sWrapper:    "dataTables_wrapper dt-foundation", | ||||||
|  | 	sProcessing: "dataTables_processing panel" | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Set the defaults for DataTables initialisation */ | ||||||
|  | $.extend( true, DataTable.defaults, { | ||||||
|  | 	dom: | ||||||
|  | 		"<'row'<'small-6 columns'l><'small-6 columns'f>r>"+ | ||||||
|  | 		"t"+ | ||||||
|  | 		"<'row'<'small-6 columns'i><'small-6 columns'p>>", | ||||||
|  | 	renderer: 'foundation' | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Page button renderer */ | ||||||
|  | DataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, buttons, page, pages ) { | ||||||
|  | 	var api = new DataTable.Api( settings ); | ||||||
|  | 	var classes = settings.oClasses; | ||||||
|  | 	var lang = settings.oLanguage.oPaginate; | ||||||
|  | 	var aria = settings.oLanguage.oAria.paginate || {}; | ||||||
|  | 	var btnDisplay, btnClass; | ||||||
|  | 	var tag; | ||||||
|  | 	var v5 = DataTable.ext.foundationVersion === 5; | ||||||
|  |  | ||||||
|  | 	var attach = function( container, buttons ) { | ||||||
|  | 		var i, ien, node, button; | ||||||
|  | 		var clickHandler = function ( e ) { | ||||||
|  | 			e.preventDefault(); | ||||||
|  | 			if ( !$(e.currentTarget).hasClass('unavailable') && api.page() != e.data.action ) { | ||||||
|  | 				api.page( e.data.action ).draw( 'page' ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) { | ||||||
|  | 			button = buttons[i]; | ||||||
|  |  | ||||||
|  | 			if ( $.isArray( button ) ) { | ||||||
|  | 				attach( container, button ); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				btnDisplay = ''; | ||||||
|  | 				btnClass = ''; | ||||||
|  | 				tag = null; | ||||||
|  |  | ||||||
|  | 				switch ( button ) { | ||||||
|  | 					case 'ellipsis': | ||||||
|  | 						btnDisplay = '…'; | ||||||
|  | 						btnClass = 'unavailable disabled'; | ||||||
|  | 						tag = null; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'first': | ||||||
|  | 						btnDisplay = lang.sFirst; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' unavailable disabled'); | ||||||
|  | 						tag = page > 0 ? 'a' : null; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'previous': | ||||||
|  | 						btnDisplay = lang.sPrevious; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' unavailable disabled'); | ||||||
|  | 						tag = page > 0 ? 'a' : null; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'next': | ||||||
|  | 						btnDisplay = lang.sNext; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' unavailable disabled'); | ||||||
|  | 						tag = page < pages-1 ? 'a' : null; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'last': | ||||||
|  | 						btnDisplay = lang.sLast; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' unavailable disabled'); | ||||||
|  | 						tag = page < pages-1 ? 'a' : null; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					default: | ||||||
|  | 						btnDisplay = button + 1; | ||||||
|  | 						btnClass = page === button ? | ||||||
|  | 							'current' : ''; | ||||||
|  | 						tag = page === button ? | ||||||
|  | 							null : 'a'; | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ( v5 ) { | ||||||
|  | 					tag = 'a'; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ( btnDisplay ) { | ||||||
|  | 					node = $('<li>', { | ||||||
|  | 							'class': classes.sPageButton+' '+btnClass, | ||||||
|  | 							'aria-controls': settings.sTableId, | ||||||
|  | 							'aria-label': aria[ button ], | ||||||
|  | 							'tabindex': settings.iTabIndex, | ||||||
|  | 							'id': idx === 0 && typeof button === 'string' ? | ||||||
|  | 								settings.sTableId +'_'+ button : | ||||||
|  | 								null | ||||||
|  | 						} ) | ||||||
|  | 						.append( tag ? | ||||||
|  | 							$('<'+tag+'/>', {'href': '#'} ).html( btnDisplay ) : | ||||||
|  | 							btnDisplay | ||||||
|  | 						) | ||||||
|  | 						.appendTo( container ); | ||||||
|  |  | ||||||
|  | 					settings.oApi._fnBindAction( | ||||||
|  | 						node, {action: button}, clickHandler | ||||||
|  | 					); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	attach( | ||||||
|  | 		$(host).empty().html('<ul class="pagination"/>').children('ul'), | ||||||
|  | 		buttons | ||||||
|  | 	); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | return DataTable; | ||||||
|  | })); | ||||||
							
								
								
									
										8
									
								
								static/vendor/datatables/js/dataTables.foundation.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables Foundation integration | ||||||
|  |  ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  | */ | ||||||
|  | (function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return d(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net")(a,b).$;return d(b,a,a.document)}:d(jQuery,window,document)})(function(d){var a=d.fn.dataTable,b=d('<meta class="foundation-mq"/>').appendTo("head");a.ext.foundationVersion=b.css("font-family").match(/small|medium|large/)?6:5;b.remove();d.extend(a.ext.classes, | ||||||
|  | {sWrapper:"dataTables_wrapper dt-foundation",sProcessing:"dataTables_processing panel"});d.extend(!0,a.defaults,{dom:"<'row'<'small-6 columns'l><'small-6 columns'f>r>t<'row'<'small-6 columns'i><'small-6 columns'p>>",renderer:"foundation"});a.ext.renderer.pageButton.foundation=function(b,l,r,s,e,i){var m=new a.Api(b),t=b.oClasses,j=b.oLanguage.oPaginate,u=b.oLanguage.oAria.paginate||{},f,h,g,v=5===a.ext.foundationVersion,q=function(a,n){var k,o,p,c,l=function(a){a.preventDefault();!d(a.currentTarget).hasClass("unavailable")&& | ||||||
|  | m.page()!=a.data.action&&m.page(a.data.action).draw("page")};k=0;for(o=n.length;k<o;k++)if(c=n[k],d.isArray(c))q(a,c);else{h=f="";g=null;switch(c){case "ellipsis":f="…";h="unavailable disabled";g=null;break;case "first":f=j.sFirst;h=c+(0<e?"":" unavailable disabled");g=0<e?"a":null;break;case "previous":f=j.sPrevious;h=c+(0<e?"":" unavailable disabled");g=0<e?"a":null;break;case "next":f=j.sNext;h=c+(e<i-1?"":" unavailable disabled");g=e<i-1?"a":null;break;case "last":f=j.sLast;h=c+(e<i-1? | ||||||
|  | "":" unavailable disabled");g=e<i-1?"a":null;break;default:f=c+1,h=e===c?"current":"",g=e===c?null:"a"}v&&(g="a");f&&(p=d("<li>",{"class":t.sPageButton+" "+h,"aria-controls":b.sTableId,"aria-label":u[c],tabindex:b.iTabIndex,id:0===r&&"string"===typeof c?b.sTableId+"_"+c:null}).append(g?d("<"+g+"/>",{href:"#"}).html(f):f).appendTo(a),b.oApi._fnBindAction(p,{action:c},l))}};q(d(l).empty().html('<ul class="pagination"/>').children("ul"),s)};return a}); | ||||||
							
								
								
									
										164
									
								
								static/vendor/datatables/js/dataTables.jqueryui.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,164 @@ | |||||||
|  | /*! DataTables jQuery UI integration | ||||||
|  |  * ©2011-2014 SpryMedia Ltd - datatables.net/license | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * DataTables integration for jQuery UI. This requires jQuery UI and | ||||||
|  |  * DataTables 1.10 or newer. | ||||||
|  |  * | ||||||
|  |  * This file sets the defaults and adds options to DataTables to style its | ||||||
|  |  * controls using jQuery UI. See http://datatables.net/manual/styling/jqueryui | ||||||
|  |  * for further information. | ||||||
|  |  */ | ||||||
|  | (function( factory ){ | ||||||
|  | 	if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 		// AMD | ||||||
|  | 		define( ['jquery', 'datatables.net'], function ( $ ) { | ||||||
|  | 			return factory( $, window, document ); | ||||||
|  | 		} ); | ||||||
|  | 	} | ||||||
|  | 	else if ( typeof exports === 'object' ) { | ||||||
|  | 		// CommonJS | ||||||
|  | 		module.exports = function (root, $) { | ||||||
|  | 			if ( ! root ) { | ||||||
|  | 				root = window; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if ( ! $ || ! $.fn.dataTable ) { | ||||||
|  | 				$ = require('datatables.net')(root, $).$; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return factory( $, root, root.document ); | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		// Browser | ||||||
|  | 		factory( jQuery, window, document ); | ||||||
|  | 	} | ||||||
|  | }(function( $, window, document, undefined ) { | ||||||
|  | 'use strict'; | ||||||
|  | var DataTable = $.fn.dataTable; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | var sort_prefix = 'css_right ui-icon ui-icon-'; | ||||||
|  | var toolbar_prefix = 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-'; | ||||||
|  |  | ||||||
|  | /* Set the defaults for DataTables initialisation */ | ||||||
|  | $.extend( true, DataTable.defaults, { | ||||||
|  | 	dom: | ||||||
|  | 		'<"'+toolbar_prefix+'tl ui-corner-tr"lfr>'+ | ||||||
|  | 		't'+ | ||||||
|  | 		'<"'+toolbar_prefix+'bl ui-corner-br"ip>', | ||||||
|  | 	renderer: 'jqueryui' | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | $.extend( DataTable.ext.classes, { | ||||||
|  | 	"sWrapper":            "dataTables_wrapper dt-jqueryui", | ||||||
|  |  | ||||||
|  | 	/* Full numbers paging buttons */ | ||||||
|  | 	"sPageButton":         "fg-button ui-button ui-state-default", | ||||||
|  | 	"sPageButtonActive":   "ui-state-disabled", | ||||||
|  | 	"sPageButtonDisabled": "ui-state-disabled", | ||||||
|  |  | ||||||
|  | 	/* Features */ | ||||||
|  | 	"sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+ | ||||||
|  | 		"ui-buttonset-multi paging_", /* Note that the type is postfixed */ | ||||||
|  |  | ||||||
|  | 	/* Sorting */ | ||||||
|  | 	"sSortAsc":            "ui-state-default sorting_asc", | ||||||
|  | 	"sSortDesc":           "ui-state-default sorting_desc", | ||||||
|  | 	"sSortable":           "ui-state-default sorting", | ||||||
|  | 	"sSortableAsc":        "ui-state-default sorting_asc_disabled", | ||||||
|  | 	"sSortableDesc":       "ui-state-default sorting_desc_disabled", | ||||||
|  | 	"sSortableNone":       "ui-state-default sorting_disabled", | ||||||
|  | 	"sSortIcon":           "DataTables_sort_icon", | ||||||
|  |  | ||||||
|  | 	/* Scrolling */ | ||||||
|  | 	"sScrollHead": "dataTables_scrollHead "+"ui-state-default", | ||||||
|  | 	"sScrollFoot": "dataTables_scrollFoot "+"ui-state-default", | ||||||
|  |  | ||||||
|  | 	/* Misc */ | ||||||
|  | 	"sHeaderTH":  "ui-state-default", | ||||||
|  | 	"sFooterTH":  "ui-state-default" | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | DataTable.ext.renderer.header.jqueryui = function ( settings, cell, column, classes ) { | ||||||
|  | 	// Calculate what the unsorted class should be | ||||||
|  | 	var noSortAppliedClass = sort_prefix+'carat-2-n-s'; | ||||||
|  | 	var asc = $.inArray('asc', column.asSorting) !== -1; | ||||||
|  | 	var desc = $.inArray('desc', column.asSorting) !== -1; | ||||||
|  |  | ||||||
|  | 	if ( !column.bSortable || (!asc && !desc) ) { | ||||||
|  | 		noSortAppliedClass = ''; | ||||||
|  | 	} | ||||||
|  | 	else if ( asc && !desc ) { | ||||||
|  | 		noSortAppliedClass = sort_prefix+'carat-1-n'; | ||||||
|  | 	} | ||||||
|  | 	else if ( !asc && desc ) { | ||||||
|  | 		noSortAppliedClass = sort_prefix+'carat-1-s'; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// Setup the DOM structure | ||||||
|  | 	$('<div/>') | ||||||
|  | 		.addClass( 'DataTables_sort_wrapper' ) | ||||||
|  | 		.append( cell.contents() ) | ||||||
|  | 		.append( $('<span/>') | ||||||
|  | 			.addClass( classes.sSortIcon+' '+noSortAppliedClass ) | ||||||
|  | 		) | ||||||
|  | 		.appendTo( cell ); | ||||||
|  |  | ||||||
|  | 	// Attach a sort listener to update on sort | ||||||
|  | 	$(settings.nTable).on( 'order.dt', function ( e, ctx, sorting, columns ) { | ||||||
|  | 		if ( settings !== ctx ) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		var colIdx = column.idx; | ||||||
|  |  | ||||||
|  | 		cell | ||||||
|  | 			.removeClass( classes.sSortAsc +" "+classes.sSortDesc ) | ||||||
|  | 			.addClass( columns[ colIdx ] == 'asc' ? | ||||||
|  | 				classes.sSortAsc : columns[ colIdx ] == 'desc' ? | ||||||
|  | 					classes.sSortDesc : | ||||||
|  | 					column.sSortingClass | ||||||
|  | 			); | ||||||
|  |  | ||||||
|  | 		cell | ||||||
|  | 			.find( 'span.'+classes.sSortIcon ) | ||||||
|  | 			.removeClass( | ||||||
|  | 				sort_prefix+'triangle-1-n' +" "+ | ||||||
|  | 				sort_prefix+'triangle-1-s' +" "+ | ||||||
|  | 				sort_prefix+'carat-2-n-s' +" "+ | ||||||
|  | 				sort_prefix+'carat-1-n' +" "+ | ||||||
|  | 				sort_prefix+'carat-1-s' | ||||||
|  | 			) | ||||||
|  | 			.addClass( columns[ colIdx ] == 'asc' ? | ||||||
|  | 				sort_prefix+'triangle-1-n' : columns[ colIdx ] == 'desc' ? | ||||||
|  | 					sort_prefix+'triangle-1-s' : | ||||||
|  | 					noSortAppliedClass | ||||||
|  | 			); | ||||||
|  | 	} ); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * TableTools jQuery UI compatibility | ||||||
|  |  * Required TableTools 2.1+ | ||||||
|  |  */ | ||||||
|  | if ( DataTable.TableTools ) { | ||||||
|  | 	$.extend( true, DataTable.TableTools.classes, { | ||||||
|  | 		"container": "DTTT_container ui-buttonset ui-buttonset-multi", | ||||||
|  | 		"buttons": { | ||||||
|  | 			"normal": "DTTT_button ui-button ui-state-default" | ||||||
|  | 		}, | ||||||
|  | 		"collection": { | ||||||
|  | 			"container": "DTTT_collection ui-buttonset ui-buttonset-multi" | ||||||
|  | 		} | ||||||
|  | 	} ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | return DataTable; | ||||||
|  | })); | ||||||
							
								
								
									
										9
									
								
								static/vendor/datatables/js/dataTables.jqueryui.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,9 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables jQuery UI integration | ||||||
|  |  ©2011-2014 SpryMedia Ltd - datatables.net/license | ||||||
|  | */ | ||||||
|  | (function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,d){b||(b=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(b,d).$;return a(d,b,b.document)}:a(jQuery,window,document)})(function(a){var b=a.fn.dataTable;a.extend(!0,b.defaults,{dom:'<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr"lfr>t<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br"ip>', | ||||||
|  | renderer:"jqueryui"});a.extend(b.ext.classes,{sWrapper:"dataTables_wrapper dt-jqueryui",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:"ui-state-default sorting_asc",sSortDesc:"ui-state-default sorting_desc",sSortable:"ui-state-default sorting",sSortableAsc:"ui-state-default sorting_asc_disabled",sSortableDesc:"ui-state-default sorting_desc_disabled", | ||||||
|  | sSortableNone:"ui-state-default sorting_disabled",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sHeaderTH:"ui-state-default",sFooterTH:"ui-state-default"});b.ext.renderer.header.jqueryui=function(b,h,e,c){var f="css_right ui-icon ui-icon-carat-2-n-s",g=-1!==a.inArray("asc",e.asSorting),i=-1!==a.inArray("desc",e.asSorting);!e.bSortable||!g&&!i?f="":g&&!i?f="css_right ui-icon ui-icon-carat-1-n":!g&&i&&(f="css_right ui-icon ui-icon-carat-1-s"); | ||||||
|  | a("<div/>").addClass("DataTables_sort_wrapper").append(h.contents()).append(a("<span/>").addClass(c.sSortIcon+" "+f)).appendTo(h);a(b.nTable).on("order.dt",function(a,g,i,j){b===g&&(a=e.idx,h.removeClass(c.sSortAsc+" "+c.sSortDesc).addClass("asc"==j[a]?c.sSortAsc:"desc"==j[a]?c.sSortDesc:e.sSortingClass),h.find("span."+c.sSortIcon).removeClass("css_right ui-icon ui-icon-triangle-1-n css_right ui-icon ui-icon-triangle-1-s css_right ui-icon ui-icon-carat-2-n-s css_right ui-icon ui-icon-carat-1-n css_right ui-icon ui-icon-carat-1-s").addClass("asc"== | ||||||
|  | j[a]?"css_right ui-icon ui-icon-triangle-1-n":"desc"==j[a]?"css_right ui-icon ui-icon-triangle-1-s":f))})};b.TableTools&&a.extend(!0,b.TableTools.classes,{container:"DTTT_container ui-buttonset ui-buttonset-multi",buttons:{normal:"DTTT_button ui-button ui-state-default"},collection:{container:"DTTT_collection ui-buttonset ui-buttonset-multi"}});return b}); | ||||||
							
								
								
									
										191
									
								
								static/vendor/datatables/js/dataTables.material.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,191 @@ | |||||||
|  | /*! DataTables Bootstrap 3 integration | ||||||
|  |  * ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and | ||||||
|  |  * DataTables 1.10 or newer. | ||||||
|  |  * | ||||||
|  |  * This file sets the defaults and adds options to DataTables to style its | ||||||
|  |  * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap | ||||||
|  |  * for further information. | ||||||
|  |  */ | ||||||
|  | (function( factory ){ | ||||||
|  | 	if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 		// AMD | ||||||
|  | 		define( ['jquery', 'datatables.net'], function ( $ ) { | ||||||
|  | 			return factory( $, window, document ); | ||||||
|  | 		} ); | ||||||
|  | 	} | ||||||
|  | 	else if ( typeof exports === 'object' ) { | ||||||
|  | 		// CommonJS | ||||||
|  | 		module.exports = function (root, $) { | ||||||
|  | 			if ( ! root ) { | ||||||
|  | 				root = window; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if ( ! $ || ! $.fn.dataTable ) { | ||||||
|  | 				// Require DataTables, which attaches to jQuery, including | ||||||
|  | 				// jQuery if needed and have a $ property so we can access the | ||||||
|  | 				// jQuery object that is used | ||||||
|  | 				$ = require('datatables.net')(root, $).$; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return factory( $, root, root.document ); | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		// Browser | ||||||
|  | 		factory( jQuery, window, document ); | ||||||
|  | 	} | ||||||
|  | }(function( $, window, document, undefined ) { | ||||||
|  | 'use strict'; | ||||||
|  | var DataTable = $.fn.dataTable; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Set the defaults for DataTables initialisation */ | ||||||
|  | $.extend( true, DataTable.defaults, { | ||||||
|  | 	dom: | ||||||
|  | 		"<'mdl-grid'"+ | ||||||
|  | 			"<'mdl-cell mdl-cell--6-col'l>"+ | ||||||
|  | 			"<'mdl-cell mdl-cell--6-col'f>"+ | ||||||
|  | 		">"+ | ||||||
|  | 		"<'mdl-grid dt-table'"+ | ||||||
|  | 			"<'mdl-cell mdl-cell--12-col'tr>"+ | ||||||
|  | 		">"+ | ||||||
|  | 		"<'mdl-grid'"+ | ||||||
|  | 			"<'mdl-cell mdl-cell--4-col'i>"+ | ||||||
|  | 			"<'mdl-cell mdl-cell--8-col'p>"+ | ||||||
|  | 		">", | ||||||
|  | 	renderer: 'material' | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Default class modification */ | ||||||
|  | $.extend( DataTable.ext.classes, { | ||||||
|  | 	sWrapper:      "dataTables_wrapper form-inline dt-material", | ||||||
|  | 	sFilterInput:  "form-control input-sm", | ||||||
|  | 	sLengthSelect: "form-control input-sm", | ||||||
|  | 	sProcessing:   "dataTables_processing panel panel-default" | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Bootstrap paging button renderer */ | ||||||
|  | DataTable.ext.renderer.pageButton.material = function ( settings, host, idx, buttons, page, pages ) { | ||||||
|  | 	var api     = new DataTable.Api( settings ); | ||||||
|  | 	var classes = settings.oClasses; | ||||||
|  | 	var lang    = settings.oLanguage.oPaginate; | ||||||
|  | 	var aria = settings.oLanguage.oAria.paginate || {}; | ||||||
|  | 	var btnDisplay, btnClass, counter=0; | ||||||
|  |  | ||||||
|  | 	var attach = function( container, buttons ) { | ||||||
|  | 		var i, ien, node, button, disabled, active; | ||||||
|  | 		var clickHandler = function ( e ) { | ||||||
|  | 			e.preventDefault(); | ||||||
|  | 			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { | ||||||
|  | 				api.page( e.data.action ).draw( 'page' ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) { | ||||||
|  | 			button = buttons[i]; | ||||||
|  |  | ||||||
|  | 			if ( $.isArray( button ) ) { | ||||||
|  | 				attach( container, button ); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				btnDisplay = ''; | ||||||
|  | 				active = false; | ||||||
|  |  | ||||||
|  | 				switch ( button ) { | ||||||
|  | 					case 'ellipsis': | ||||||
|  | 						btnDisplay = '…'; | ||||||
|  | 						btnClass = 'disabled'; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'first': | ||||||
|  | 						btnDisplay = lang.sFirst; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'previous': | ||||||
|  | 						btnDisplay = lang.sPrevious; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'next': | ||||||
|  | 						btnDisplay = lang.sNext; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'last': | ||||||
|  | 						btnDisplay = lang.sLast; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					default: | ||||||
|  | 						btnDisplay = button + 1; | ||||||
|  | 						btnClass = ''; | ||||||
|  | 						active = page === button; | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ( active ) { | ||||||
|  | 					btnClass += ' mdl-button--raised mdl-button--colored'; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ( btnDisplay ) { | ||||||
|  | 					node = $('<button>', { | ||||||
|  | 							'class': 'mdl-button '+btnClass, | ||||||
|  | 							'id': idx === 0 && typeof button === 'string' ? | ||||||
|  | 								settings.sTableId +'_'+ button : | ||||||
|  | 								null, | ||||||
|  | 							'aria-controls': settings.sTableId, | ||||||
|  | 							'aria-label': aria[ button ], | ||||||
|  | 							'data-dt-idx': counter, | ||||||
|  | 							'tabindex': settings.iTabIndex, | ||||||
|  | 							'disabled': btnClass.indexOf('disabled') !== -1 | ||||||
|  | 						} ) | ||||||
|  | 						.html( btnDisplay ) | ||||||
|  | 						.appendTo( container ); | ||||||
|  |  | ||||||
|  | 					settings.oApi._fnBindAction( | ||||||
|  | 						node, {action: button}, clickHandler | ||||||
|  | 					); | ||||||
|  |  | ||||||
|  | 					counter++; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// IE9 throws an 'unknown error' if document.activeElement is used | ||||||
|  | 	// inside an iframe or frame.  | ||||||
|  | 	var activeEl; | ||||||
|  |  | ||||||
|  | 	try { | ||||||
|  | 		// Because this approach is destroying and recreating the paging | ||||||
|  | 		// elements, focus is lost on the select button which is bad for | ||||||
|  | 		// accessibility. So we want to restore focus once the draw has | ||||||
|  | 		// completed | ||||||
|  | 		activeEl = $(host).find(document.activeElement).data('dt-idx'); | ||||||
|  | 	} | ||||||
|  | 	catch (e) {} | ||||||
|  |  | ||||||
|  | 	attach( | ||||||
|  | 		$(host).empty().html('<div class="pagination"/>').children(), | ||||||
|  | 		buttons | ||||||
|  | 	); | ||||||
|  |  | ||||||
|  | 	if ( activeEl ) { | ||||||
|  | 		$(host).find( '[data-dt-idx='+activeEl+']' ).focus(); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | return DataTable; | ||||||
|  | })); | ||||||
							
								
								
									
										8
									
								
								static/vendor/datatables/js/dataTables.material.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables Bootstrap 3 integration | ||||||
|  |  ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  | */ | ||||||
|  | (function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return c(d,a,a.document)}:c(jQuery,window,document)})(function(c,a,d){var g=c.fn.dataTable;c.extend(!0,g.defaults,{dom:"<'mdl-grid'<'mdl-cell mdl-cell--6-col'l><'mdl-cell mdl-cell--6-col'f>><'mdl-grid dt-table'<'mdl-cell mdl-cell--12-col'tr>><'mdl-grid'<'mdl-cell mdl-cell--4-col'i><'mdl-cell mdl-cell--8-col'p>>", | ||||||
|  | renderer:"material"});c.extend(g.ext.classes,{sWrapper:"dataTables_wrapper form-inline dt-material",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});g.ext.renderer.pageButton.material=function(a,h,r,s,i,n){var o=new g.Api(a),l=a.oLanguage.oPaginate,t=a.oLanguage.oAria.paginate||{},f,e,p=0,q=function(d,g){var m,h,j,b,k=function(a){a.preventDefault();!c(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&& | ||||||
|  | o.page(a.data.action).draw("page")};m=0;for(h=g.length;m<h;m++)if(b=g[m],c.isArray(b))q(d,b);else{f="";j=!1;switch(b){case "ellipsis":f="…";e="disabled";break;case "first":f=l.sFirst;e=b+(0<i?"":" disabled");break;case "previous":f=l.sPrevious;e=b+(0<i?"":" disabled");break;case "next":f=l.sNext;e=b+(i<n-1?"":" disabled");break;case "last":f=l.sLast;e=b+(i<n-1?"":" disabled");break;default:f=b+1,e="",j=i===b}j&&(e+=" mdl-button--raised mdl-button--colored");f&&(j=c("<button>",{"class":"mdl-button "+ | ||||||
|  | e,id:0===r&&"string"===typeof b?a.sTableId+"_"+b:null,"aria-controls":a.sTableId,"aria-label":t[b],"data-dt-idx":p,tabindex:a.iTabIndex,disabled:-1!==e.indexOf("disabled")}).html(f).appendTo(d),a.oApi._fnBindAction(j,{action:b},k),p++)}},k;try{k=c(h).find(d.activeElement).data("dt-idx")}catch(u){}q(c(h).empty().html('<div class="pagination"/>').children(),s);k&&c(h).find("[data-dt-idx="+k+"]").focus()};return g}); | ||||||
							
								
								
									
										208
									
								
								static/vendor/datatables/js/dataTables.semanticui.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,208 @@ | |||||||
|  | /*! DataTables Bootstrap 3 integration | ||||||
|  |  * ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and | ||||||
|  |  * DataTables 1.10 or newer. | ||||||
|  |  * | ||||||
|  |  * This file sets the defaults and adds options to DataTables to style its | ||||||
|  |  * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap | ||||||
|  |  * for further information. | ||||||
|  |  */ | ||||||
|  | (function( factory ){ | ||||||
|  | 	if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 		// AMD | ||||||
|  | 		define( ['jquery', 'datatables.net'], function ( $ ) { | ||||||
|  | 			return factory( $, window, document ); | ||||||
|  | 		} ); | ||||||
|  | 	} | ||||||
|  | 	else if ( typeof exports === 'object' ) { | ||||||
|  | 		// CommonJS | ||||||
|  | 		module.exports = function (root, $) { | ||||||
|  | 			if ( ! root ) { | ||||||
|  | 				root = window; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if ( ! $ || ! $.fn.dataTable ) { | ||||||
|  | 				// Require DataTables, which attaches to jQuery, including | ||||||
|  | 				// jQuery if needed and have a $ property so we can access the | ||||||
|  | 				// jQuery object that is used | ||||||
|  | 				$ = require('datatables.net')(root, $).$; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return factory( $, root, root.document ); | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		// Browser | ||||||
|  | 		factory( jQuery, window, document ); | ||||||
|  | 	} | ||||||
|  | }(function( $, window, document, undefined ) { | ||||||
|  | 'use strict'; | ||||||
|  | var DataTable = $.fn.dataTable; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Set the defaults for DataTables initialisation */ | ||||||
|  | $.extend( true, DataTable.defaults, { | ||||||
|  | 	dom: | ||||||
|  | 		"<'ui grid'"+ | ||||||
|  | 			"<'row'"+ | ||||||
|  | 				"<'eight wide column'l>"+ | ||||||
|  | 				"<'right aligned eight wide column'f>"+ | ||||||
|  | 			">"+ | ||||||
|  | 			"<'row dt-table'"+ | ||||||
|  | 				"<'sixteen wide column'tr>"+ | ||||||
|  | 			">"+ | ||||||
|  | 			"<'row'"+ | ||||||
|  | 				"<'seven wide column'i>"+ | ||||||
|  | 				"<'right aligned nine wide column'p>"+ | ||||||
|  | 			">"+ | ||||||
|  | 		">", | ||||||
|  | 	renderer: 'semanticUI' | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Default class modification */ | ||||||
|  | $.extend( DataTable.ext.classes, { | ||||||
|  | 	sWrapper:      "dataTables_wrapper dt-semanticUI", | ||||||
|  | 	sFilter:       "dataTables_filter ui input", | ||||||
|  | 	sProcessing:   "dataTables_processing ui segment", | ||||||
|  | 	sPageButton:   "paginate_button item" | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Bootstrap paging button renderer */ | ||||||
|  | DataTable.ext.renderer.pageButton.semanticUI = function ( settings, host, idx, buttons, page, pages ) { | ||||||
|  | 	var api     = new DataTable.Api( settings ); | ||||||
|  | 	var classes = settings.oClasses; | ||||||
|  | 	var lang    = settings.oLanguage.oPaginate; | ||||||
|  | 	var aria = settings.oLanguage.oAria.paginate || {}; | ||||||
|  | 	var btnDisplay, btnClass, counter=0; | ||||||
|  |  | ||||||
|  | 	var attach = function( container, buttons ) { | ||||||
|  | 		var i, ien, node, button; | ||||||
|  | 		var clickHandler = function ( e ) { | ||||||
|  | 			e.preventDefault(); | ||||||
|  | 			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { | ||||||
|  | 				api.page( e.data.action ).draw( 'page' ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) { | ||||||
|  | 			button = buttons[i]; | ||||||
|  |  | ||||||
|  | 			if ( $.isArray( button ) ) { | ||||||
|  | 				attach( container, button ); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				btnDisplay = ''; | ||||||
|  | 				btnClass = ''; | ||||||
|  |  | ||||||
|  | 				switch ( button ) { | ||||||
|  | 					case 'ellipsis': | ||||||
|  | 						btnDisplay = '…'; | ||||||
|  | 						btnClass = 'disabled'; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'first': | ||||||
|  | 						btnDisplay = lang.sFirst; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'previous': | ||||||
|  | 						btnDisplay = lang.sPrevious; | ||||||
|  | 						btnClass = button + (page > 0 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'next': | ||||||
|  | 						btnDisplay = lang.sNext; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'last': | ||||||
|  | 						btnDisplay = lang.sLast; | ||||||
|  | 						btnClass = button + (page < pages-1 ? | ||||||
|  | 							'' : ' disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					default: | ||||||
|  | 						btnDisplay = button + 1; | ||||||
|  | 						btnClass = page === button ? | ||||||
|  | 							'active' : ''; | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				var tag = btnClass.indexOf( 'disabled' ) === -1 ? | ||||||
|  | 					'a' : | ||||||
|  | 					'div'; | ||||||
|  |  | ||||||
|  | 				if ( btnDisplay ) { | ||||||
|  | 					node = $('<'+tag+'>', { | ||||||
|  | 							'class': classes.sPageButton+' '+btnClass, | ||||||
|  | 							'id': idx === 0 && typeof button === 'string' ? | ||||||
|  | 								settings.sTableId +'_'+ button : | ||||||
|  | 								null, | ||||||
|  | 							'href': '#', | ||||||
|  | 							'aria-controls': settings.sTableId, | ||||||
|  | 							'aria-label': aria[ button ], | ||||||
|  | 							'data-dt-idx': counter, | ||||||
|  | 							'tabindex': settings.iTabIndex | ||||||
|  | 						} ) | ||||||
|  | 						.html( btnDisplay ) | ||||||
|  | 						.appendTo( container ); | ||||||
|  |  | ||||||
|  | 					settings.oApi._fnBindAction( | ||||||
|  | 						node, {action: button}, clickHandler | ||||||
|  | 					); | ||||||
|  |  | ||||||
|  | 					counter++; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// IE9 throws an 'unknown error' if document.activeElement is used | ||||||
|  | 	// inside an iframe or frame.  | ||||||
|  | 	var activeEl; | ||||||
|  |  | ||||||
|  | 	try { | ||||||
|  | 		// Because this approach is destroying and recreating the paging | ||||||
|  | 		// elements, focus is lost on the select button which is bad for | ||||||
|  | 		// accessibility. So we want to restore focus once the draw has | ||||||
|  | 		// completed | ||||||
|  | 		activeEl = $(host).find(document.activeElement).data('dt-idx'); | ||||||
|  | 	} | ||||||
|  | 	catch (e) {} | ||||||
|  |  | ||||||
|  | 	attach( | ||||||
|  | 		$(host).empty().html('<div class="ui pagination menu"/>').children(), | ||||||
|  | 		buttons | ||||||
|  | 	); | ||||||
|  |  | ||||||
|  | 	if ( activeEl ) { | ||||||
|  | 		$(host).find( '[data-dt-idx='+activeEl+']' ).focus(); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // Javascript enhancements on table initialisation | ||||||
|  | $(document).on( 'init.dt', function (e, ctx) { | ||||||
|  | 	if ( e.namespace !== 'dt' ) { | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// Length menu drop down | ||||||
|  | 	if ( $.fn.dropdown ) { | ||||||
|  | 		var api = new $.fn.dataTable.Api( ctx ); | ||||||
|  |  | ||||||
|  | 		$( 'div.dataTables_length select', api.table().container() ).dropdown(); | ||||||
|  | 	} | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | return DataTable; | ||||||
|  | })); | ||||||
							
								
								
									
										9
									
								
								static/vendor/datatables/js/dataTables.semanticui.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,9 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables Bootstrap 3 integration | ||||||
|  |  ©2011-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  | */ | ||||||
|  | (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d){var e=b.fn.dataTable;b.extend(!0,e.defaults,{dom:"<'ui grid'<'row'<'eight wide column'l><'right aligned eight wide column'f>><'row dt-table'<'sixteen wide column'tr>><'row'<'seven wide column'i><'right aligned nine wide column'p>>>", | ||||||
|  | renderer:"semanticUI"});b.extend(e.ext.classes,{sWrapper:"dataTables_wrapper dt-semanticUI",sFilter:"dataTables_filter ui input",sProcessing:"dataTables_processing ui segment",sPageButton:"paginate_button item"});e.ext.renderer.pageButton.semanticUI=function(h,a,r,s,j,m){var n=new e.Api(h),t=h.oClasses,k=h.oLanguage.oPaginate,u=h.oLanguage.oAria.paginate||{},f,g,o=0,p=function(a,d){var e,i,l,c,q=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&n.page()!=a.data.action&&n.page(a.data.action).draw("page")}; | ||||||
|  | e=0;for(i=d.length;e<i;e++)if(c=d[e],b.isArray(c))p(a,c);else{g=f="";switch(c){case "ellipsis":f="…";g="disabled";break;case "first":f=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":f=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":f=k.sNext;g=c+(j<m-1?"":" disabled");break;case "last":f=k.sLast;g=c+(j<m-1?"":" disabled");break;default:f=c+1,g=j===c?"active":""}l=-1===g.indexOf("disabled")?"a":"div";f&&(l=b("<"+l+">",{"class":t.sPageButton+" "+g,id:0===r&&"string"===typeof c? | ||||||
|  | h.sTableId+"_"+c:null,href:"#","aria-controls":h.sTableId,"aria-label":u[c],"data-dt-idx":o,tabindex:h.iTabIndex}).html(f).appendTo(a),h.oApi._fnBindAction(l,{action:c},q),o++)}},i;try{i=b(a).find(d.activeElement).data("dt-idx")}catch(v){}p(b(a).empty().html('<div class="ui pagination menu"/>').children(),s);i&&b(a).find("[data-dt-idx="+i+"]").focus()};b(d).on("init.dt",function(a,d){if("dt"===a.namespace&&b.fn.dropdown){var e=new b.fn.dataTable.Api(d);b("div.dataTables_length select",e.table().container()).dropdown()}}); | ||||||
|  | return e}); | ||||||
							
								
								
									
										176
									
								
								static/vendor/datatables/js/dataTables.uikit.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,176 @@ | |||||||
|  | /*! DataTables UIkit 3 integration | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * This is a tech preview of UIKit integration with DataTables. | ||||||
|  |  */ | ||||||
|  | (function( factory ){ | ||||||
|  | 	if ( typeof define === 'function' && define.amd ) { | ||||||
|  | 		// AMD | ||||||
|  | 		define( ['jquery', 'datatables.net'], function ( $ ) { | ||||||
|  | 			return factory( $, window, document ); | ||||||
|  | 		} ); | ||||||
|  | 	} | ||||||
|  | 	else if ( typeof exports === 'object' ) { | ||||||
|  | 		// CommonJS | ||||||
|  | 		module.exports = function (root, $) { | ||||||
|  | 			if ( ! root ) { | ||||||
|  | 				root = window; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if ( ! $ || ! $.fn.dataTable ) { | ||||||
|  | 				// Require DataTables, which attaches to jQuery, including | ||||||
|  | 				// jQuery if needed and have a $ property so we can access the | ||||||
|  | 				// jQuery object that is used | ||||||
|  | 				$ = require('datatables.net')(root, $).$; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return factory( $, root, root.document ); | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		// Browser | ||||||
|  | 		factory( jQuery, window, document ); | ||||||
|  | 	} | ||||||
|  | }(function( $, window, document, undefined ) { | ||||||
|  | 'use strict'; | ||||||
|  | var DataTable = $.fn.dataTable; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Set the defaults for DataTables initialisation */ | ||||||
|  | $.extend( true, DataTable.defaults, { | ||||||
|  | 	dom: | ||||||
|  | 		"<'row uk-grid'<'uk-width-1-2'l><'uk-width-1-2'f>>" + | ||||||
|  | 		"<'row uk-grid dt-merge-grid'<'uk-width-1-1'tr>>" + | ||||||
|  | 		"<'row uk-grid dt-merge-grid'<'uk-width-2-5'i><'uk-width-3-5'p>>", | ||||||
|  | 	renderer: 'uikit' | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Default class modification */ | ||||||
|  | $.extend( DataTable.ext.classes, { | ||||||
|  | 	sWrapper:      "dataTables_wrapper uk-form dt-uikit", | ||||||
|  | 	sFilterInput:  "uk-form-small", | ||||||
|  | 	sLengthSelect: "uk-form-small", | ||||||
|  | 	sProcessing:   "dataTables_processing uk-panel" | ||||||
|  | } ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* UIkit paging button renderer */ | ||||||
|  | DataTable.ext.renderer.pageButton.uikit = function ( settings, host, idx, buttons, page, pages ) { | ||||||
|  | 	var api     = new DataTable.Api( settings ); | ||||||
|  | 	var classes = settings.oClasses; | ||||||
|  | 	var lang    = settings.oLanguage.oPaginate; | ||||||
|  | 	var aria = settings.oLanguage.oAria.paginate || {}; | ||||||
|  | 	var btnDisplay, btnClass, counter=0; | ||||||
|  |  | ||||||
|  | 	var attach = function( container, buttons ) { | ||||||
|  | 		var i, ien, node, button; | ||||||
|  | 		var clickHandler = function ( e ) { | ||||||
|  | 			e.preventDefault(); | ||||||
|  | 			if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { | ||||||
|  | 				api.page( e.data.action ).draw( 'page' ); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) { | ||||||
|  | 			button = buttons[i]; | ||||||
|  |  | ||||||
|  | 			if ( $.isArray( button ) ) { | ||||||
|  | 				attach( container, button ); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				btnDisplay = ''; | ||||||
|  | 				btnClass = ''; | ||||||
|  |  | ||||||
|  | 				switch ( button ) { | ||||||
|  | 					case 'ellipsis': | ||||||
|  | 						btnDisplay = '<i class="uk-icon-ellipsis-h"></i>'; | ||||||
|  | 						btnClass = 'uk-disabled disabled'; | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'first': | ||||||
|  | 						btnDisplay = '<i class="uk-icon-angle-double-left"></i> ' + lang.sFirst; | ||||||
|  | 						btnClass = (page > 0 ? | ||||||
|  | 							'' : ' uk-disabled disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'previous': | ||||||
|  | 						btnDisplay = '<i class="uk-icon-angle-left"></i> ' + lang.sPrevious; | ||||||
|  | 						btnClass = (page > 0 ? | ||||||
|  | 							'' : 'uk-disabled disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'next': | ||||||
|  | 						btnDisplay = lang.sNext + ' <i class="uk-icon-angle-right"></i>'; | ||||||
|  | 						btnClass = (page < pages-1 ? | ||||||
|  | 							'' : 'uk-disabled disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					case 'last': | ||||||
|  | 						btnDisplay = lang.sLast + ' <i class="uk-icon-angle-double-right"></i>'; | ||||||
|  | 						btnClass = (page < pages-1 ? | ||||||
|  | 							'' : ' uk-disabled disabled'); | ||||||
|  | 						break; | ||||||
|  |  | ||||||
|  | 					default: | ||||||
|  | 						btnDisplay = button + 1; | ||||||
|  | 						btnClass = page === button ? | ||||||
|  | 							'uk-active' : ''; | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ( btnDisplay ) { | ||||||
|  | 					node = $('<li>', { | ||||||
|  | 							'class': classes.sPageButton+' '+btnClass, | ||||||
|  | 							'id': idx === 0 && typeof button === 'string' ? | ||||||
|  | 								settings.sTableId +'_'+ button : | ||||||
|  | 								null | ||||||
|  | 						} ) | ||||||
|  | 						.append( $(( -1 != btnClass.indexOf('disabled') || -1 != btnClass.indexOf('active') ) ? '<span>' : '<a>', { | ||||||
|  | 								'href': '#', | ||||||
|  | 								'aria-controls': settings.sTableId, | ||||||
|  | 								'aria-label': aria[ button ], | ||||||
|  | 								'data-dt-idx': counter, | ||||||
|  | 								'tabindex': settings.iTabIndex | ||||||
|  | 							} ) | ||||||
|  | 							.html( btnDisplay ) | ||||||
|  | 						) | ||||||
|  | 						.appendTo( container ); | ||||||
|  |  | ||||||
|  | 					settings.oApi._fnBindAction( | ||||||
|  | 						node, {action: button}, clickHandler | ||||||
|  | 					); | ||||||
|  |  | ||||||
|  | 					counter++; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// IE9 throws an 'unknown error' if document.activeElement is used | ||||||
|  | 	// inside an iframe or frame.  | ||||||
|  | 	var activeEl; | ||||||
|  |  | ||||||
|  | 	try { | ||||||
|  | 		// Because this approach is destroying and recreating the paging | ||||||
|  | 		// elements, focus is lost on the select button which is bad for | ||||||
|  | 		// accessibility. So we want to restore focus once the draw has | ||||||
|  | 		// completed | ||||||
|  | 		activeEl = $(host).find(document.activeElement).data('dt-idx'); | ||||||
|  | 	} | ||||||
|  | 	catch (e) {} | ||||||
|  |  | ||||||
|  | 	attach( | ||||||
|  | 		$(host).empty().html('<ul class="uk-pagination uk-pagination-right"/>').children('ul'), | ||||||
|  | 		buttons | ||||||
|  | 	); | ||||||
|  |  | ||||||
|  | 	if ( activeEl ) { | ||||||
|  | 		$(host).find( '[data-dt-idx='+activeEl+']' ).focus(); | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | return DataTable; | ||||||
|  | })); | ||||||
							
								
								
									
										8
									
								
								static/vendor/datatables/js/dataTables.uikit.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,8 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables UIkit 3 integration | ||||||
|  | */ | ||||||
|  | (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,c){a||(a=window);if(!c||!c.fn.dataTable)c=require("datatables.net")(a,c).$;return b(c,a,a.document)}:b(jQuery,window,document)})(function(b,a,c){var g=b.fn.dataTable;b.extend(!0,g.defaults,{dom:"<'row uk-grid'<'uk-width-1-2'l><'uk-width-1-2'f>><'row uk-grid dt-merge-grid'<'uk-width-1-1'tr>><'row uk-grid dt-merge-grid'<'uk-width-2-5'i><'uk-width-3-5'p>>", | ||||||
|  | renderer:"uikit"});b.extend(g.ext.classes,{sWrapper:"dataTables_wrapper uk-form dt-uikit",sFilterInput:"uk-form-small",sLengthSelect:"uk-form-small",sProcessing:"dataTables_processing uk-panel"});g.ext.renderer.pageButton.uikit=function(a,h,r,m,j,n){var o=new g.Api(a),s=a.oClasses,k=a.oLanguage.oPaginate,t=a.oLanguage.oAria.paginate||{},f,d,p=0,q=function(c,g){var l,h,i,e,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")}; | ||||||
|  | l=0;for(h=g.length;l<h;l++)if(e=g[l],b.isArray(e))q(c,e);else{d=f="";switch(e){case "ellipsis":f='<i class="uk-icon-ellipsis-h"></i>';d="uk-disabled disabled";break;case "first":f='<i class="uk-icon-angle-double-left"></i> '+k.sFirst;d=0<j?"":" uk-disabled disabled";break;case "previous":f='<i class="uk-icon-angle-left"></i> '+k.sPrevious;d=0<j?"":"uk-disabled disabled";break;case "next":f=k.sNext+' <i class="uk-icon-angle-right"></i>';d=j<n-1?"":"uk-disabled disabled";break;case "last":f=k.sLast+ | ||||||
|  | ' <i class="uk-icon-angle-double-right"></i>';d=j<n-1?"":" uk-disabled disabled";break;default:f=e+1,d=j===e?"uk-active":""}f&&(i=b("<li>",{"class":s.sPageButton+" "+d,id:0===r&&"string"===typeof e?a.sTableId+"_"+e:null}).append(b(-1!=d.indexOf("disabled")||-1!=d.indexOf("active")?"<span>":"<a>",{href:"#","aria-controls":a.sTableId,"aria-label":t[e],"data-dt-idx":p,tabindex:a.iTabIndex}).html(f)).appendTo(c),a.oApi._fnBindAction(i,{action:e},m),p++)}},i;try{i=b(h).find(c.activeElement).data("dt-idx")}catch(u){}q(b(h).empty().html('<ul class="uk-pagination uk-pagination-right"/>').children("ul"), | ||||||
|  | m);i&&b(h).find("[data-dt-idx="+i+"]").focus()};return g}); | ||||||
							
								
								
									
										15278
									
								
								static/vendor/datatables/js/jquery.dataTables.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										166
									
								
								static/vendor/datatables/js/jquery.dataTables.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,166 @@ | |||||||
|  | /*! | ||||||
|  |  DataTables 1.10.12 | ||||||
|  |  ©2008-2015 SpryMedia Ltd - datatables.net/license | ||||||
|  | */ | ||||||
|  | (function(h){"function"===typeof define&&define.amd?define(["jquery"],function(D){return h(D,window,document)}):"object"===typeof exports?module.exports=function(D,I){D||(D=window);I||(I="undefined"!==typeof window?require("jquery"):require("jquery")(D));return h(I,D,D.document)}:h(jQuery,window,document)})(function(h,D,I,k){function X(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()), | ||||||
|  | d[c]=e,"o"===b[1]&&X(a[e])});a._hungarianMap=d}function K(a,b,c){a._hungarianMap||X(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),K(a[d],b[d],c)):b[d]=b[e]})}function Da(a){var b=m.defaults.oLanguage,c=a.sZeroRecords;!a.sEmptyTable&&(c&&"No data available in table"===b.sEmptyTable)&&E(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(c&&"Loading..."===b.sLoadingRecords)&&E(a,a,"sZeroRecords","sLoadingRecords"); | ||||||
|  | a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&db(a)}function eb(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":"");"boolean"===typeof a.scrollX&&(a.scrollX= | ||||||
|  | a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&K(m.models.oSearch,a[b])}function fb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;b&&!h.isArray(b)&&(a.aDataSort=[b])}function gb(a){if(!m.__browser){var b={};m.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:0,height:1,width:1,overflow:"hidden"}).append(h("<div/>").css({position:"absolute",top:1,left:1, | ||||||
|  | width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,m.__browser);a.oScroll.iBarWidth=m.__browser.barWidth}function hb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!==e;)a.hasOwnProperty(d)&& | ||||||
|  | (g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ea(a,b){var c=m.defaults.column,d=a.aoColumns.length,c=h.extend({},m.models.oColumn,c,{nTh:b?b:I.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},m.models.oSearch,c[d]);ja(a,d,h(b).data())}function ja(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f= | ||||||
|  | (e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(fb(c),K(m.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),h.extend(b,c),E(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),E(b,c,"aDataSort"));var g=b.mData,j=Q(g),i=b.mRender?Q(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&& | ||||||
|  | (c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return R(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed): | ||||||
|  | !a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function Y(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Fa(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&ka(a);u(a,null,"column-sizing",[a])}function Z(a,b){var c=la(a,"bVisible");return"number"===typeof c[b]?c[b]:null}function $(a,b){var c=la(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null} | ||||||
|  | function aa(a){var b=0;h.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==h(d.nTh).css("display")&&b++});return b}function la(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ga(a){var b=a.aoColumns,c=a.aoData,d=m.ext.type.detect,e,f,g,j,i,h,l,q,t;e=0;for(f=b.length;e<f;e++)if(l=b[e],t=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){g=0;for(j=d.length;g<j;g++){i=0;for(h=c.length;i<h;i++){t[i]===k&&(t[i]=B(a,i,e,"type"));q=d[g](t[i],a);if(!q&& | ||||||
|  | g!==d.length-1)break;if("html"===q)break}if(q){l.sType=q;break}}l.sType||(l.sType="string")}}function ib(a,b,c,d){var e,f,g,j,i,n,l=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){n=b[e];var q=n.targets!==k?n.targets:n.aTargets;h.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;l.length<=q[f];)Ea(a);d(q[f],n)}else if("number"===typeof q[f]&&0>q[f])d(l.length+q[f],n);else if("string"===typeof q[f]){j=0;for(i=l.length;j<i;j++)("_all"==q[f]||h(l[j].nTh).hasClass(q[f]))&& | ||||||
|  | d(j,n)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function N(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},m.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ha(a,e,c,d);return e}function ma(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,e){c=Ia(a,e);return N(a,c.data,e,c.cells)})}function B(a,b,c,d){var e=a.iDraw, | ||||||
|  | f=a.aoColumns[c],g=a.aoData[b]._aData,j=f.sDefaultContent,i=f.fnGetData(g,d,{settings:a,row:b,col:c});if(i===k)return a.iDrawError!=e&&null===j&&(L(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),j;if((i===g||null===i)&&null!==j&&d!==k)i=j;else if("function"===typeof i)return i.call(g);return null===i&&"display"==d?"":i}function jb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})} | ||||||
|  | function Ja(a){return h.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\./g,".")})}function Q(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&(b[a]=Q(c))});return function(a,c,f,g){var j=b[c]||b._;return j!==k?j(a,c,f,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,f,g){return a(b,c,f,g)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var c=function(a,b,f){var g,j;if(""!==f){j=Ja(f); | ||||||
|  | for(var i=0,n=j.length;i<n;i++){f=j[i].match(ba);g=j[i].match(U);if(f){j[i]=j[i].replace(ba,"");""!==j[i]&&(a=a[j[i]]);g=[];j.splice(0,i+1);j=j.join(".");if(h.isArray(a)){i=0;for(n=a.length;i<n;i++)g.push(c(a[i],b,j))}a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){j[i]=j[i].replace(U,"");a=a[j[i]]();continue}if(null===a||a[j[i]]===k)return k;a=a[j[i]]}}return a};return function(b,e){return c(b,e,a)}}return function(b){return b[a]}}function R(a){if(h.isPlainObject(a))return R(a._); | ||||||
|  | if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=Ja(e),f;f=e[e.length-1];for(var g,j,i=0,n=e.length-1;i<n;i++){g=e[i].match(ba);j=e[i].match(U);if(g){e[i]=e[i].replace(ba,"");a[e[i]]=[];f=e.slice();f.splice(0,i+1);g=f.join(".");if(h.isArray(d)){j=0;for(n=d.length;j<n;j++)f={},b(f,d[j],g),a[e[i]].push(f)}else a[e[i]]=d;return}j&&(e[i]=e[i].replace(U, | ||||||
|  | ""),a=a[e[i]](d));if(null===a[e[i]]||a[e[i]]===k)a[e[i]]={};a=a[e[i]]}if(f.match(U))a[f.replace(U,"")](d);else a[f.replace(ba,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ka(a){return G(a.aoData,"_aData")}function na(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function oa(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===k&&a.splice(d,1)}function ca(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild); | ||||||
|  | c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ia(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c<f;c++)g(j[c],c)}}e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==k)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;La(a,e)}}function Ia(a,b,c,d){var e=[],f=b.firstChild,g,j,i=0,n,l=a.aoColumns,q=a._rowReadObject,d=d!==k?d:q?{}:[],t=function(a,b){if("string"===typeof a){var c=a.indexOf("@"); | ||||||
|  | -1!==c&&(c=a.substring(c+1),R(a)(d,b.getAttribute(c)))}},S=function(a){if(c===k||c===i)j=l[i],n=h.trim(a.innerHTML),j&&j._bAttrSrc?(R(j.mData._)(d,n),t(j.mData.sort,a),t(j.mData.type,a),t(j.mData.filter,a)):q?(j._setter||(j._setter=R(j.mData)),j._setter(d,n)):d[i]=n;i++};if(f)for(;f;){g=f.nodeName.toUpperCase();if("TD"==g||"TH"==g)S(f),e.push(f);f=f.nextSibling}else{e=b.anCells;f=0;for(g=e.length;f<g;f++)S(e[f])}if(b=b.firstChild?b:b.nTr)(b=b.getAttribute("id"))&&R(a.rowId)(d,b);return{data:d,cells:e}} | ||||||
|  | function Ha(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,n,l,q;if(null===e.nTr){j=c||I.createElement("tr");e.nTr=j;e.anCells=g;j._DT_RowIndex=b;La(a,e);l=0;for(q=a.aoColumns.length;l<q;l++){n=a.aoColumns[l];i=c?d[l]:I.createElement(n.sCellType);i._DT_CellIndex={row:b,column:l};g.push(i);if((!c||n.mRender||n.mData!==l)&&(!h.isPlainObject(n.mData)||n.mData._!==l+".display"))i.innerHTML=B(a,b,l,"display");n.sClass&&(i.className+=" "+n.sClass);n.bVisible&&!c?j.appendChild(i):!n.bVisible&&c&&i.parentNode.removeChild(i); | ||||||
|  | n.fnCreatedCell&&n.fnCreatedCell.call(a.oInstance,i,B(a,b,l),f,b,l)}u(a,"aoRowCreatedCallback",null,[j,f,b])}e.nTr.setAttribute("role","row")}function La(a,b){var c=b.nTr,d=b._aData;if(c){var e=a.rowIdFn(d);e&&(c.id=e);d.DT_RowClass&&(e=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?pa(b.__rowc.concat(e)):e,h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&h(c).attr(d.DT_RowAttr);d.DT_RowData&&h(c).data(d.DT_RowData)}}function kb(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0=== | ||||||
|  | h("th, td",g).length,n=a.oClasses,l=a.aoColumns;i&&(e=h("<tr/>").appendTo(g));b=0;for(c=l.length;b<c;b++)f=l[b],d=h(f.nTh).addClass(f.sClass),i&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),Ma(a,f.nTh,b))),f.sTitle!=d[0].innerHTML&&d.html(f.sTitle),Na(a,"header")(a,d,f,n);i&&da(a.aoHeader,g);h(g).find(">tr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(n.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(n.sFooterTH); | ||||||
|  | if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=l[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function ea(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,n;if(b){c===k&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=i-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);j.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(n=i=1,j[d][f]===k){a.appendChild(g[d][f].cell); | ||||||
|  | for(j[d][f]=1;g[d+i]!==k&&g[d][f].cell==g[d+i][f].cell;)j[d+i][f]=1,i++;for(;g[d][f+n]!==k&&g[d][f].cell==g[d][f+n].cell;){for(c=0;c<i;c++)j[d+c][f+n]=1;n++}h(g[d][f].cell).attr("rowspan",i).attr("colspan",n)}}}}function O(a){var b=u(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))C(a,!1);else{var b=[],c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,j="ssp"==y(a),i=a.aiDisplay;a.bDrawing=!0;g!==k&&-1!==g&&(a._iDisplayStart=j?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart= | ||||||
|  | -1);var g=a._iDisplayStart,n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,C(a,!1);else if(j){if(!a.bDestroying&&!lb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:n;for(j=j?0:g;j<f;j++){var l=i[j],q=a.aoData[l];null===q.nTr&&Ha(a,l);l=q.nTr;if(0!==e){var t=d[c%e];q._sRowStripe!=t&&(h(l).removeClass(q._sRowStripe).addClass(t),q._sRowStripe=t)}u(a,"aoRowCallback",null,[l,q._aData,c,j]);b.push(l);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==y(a)?c=f.sLoadingRecords: | ||||||
|  | f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:aa(a),"class":a.oClasses.sRowEmpty}).html(c))[0];u(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ka(a),g,n,i]);u(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ka(a),g,n,i]);d=h(a.nTBody);d.children().detach();d.append(h(b));u(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter; | ||||||
|  | c.bSort&&mb(a);d?fa(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;O(a);a._drawHold=!1}function nb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,n,l,q,t=0;t<f.length;t++){g=null;j=f[t];if("<"==j){i=h("<div/>")[0]; | ||||||
|  | n=f[t+1];if("'"==n||'"'==n){l="";for(q=2;f[t+q]!=n;)l+=f[t+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(n=l.split("."),i.id=n[0].substr(1,n[0].length-1),i.className=n[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;t+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=ob(a);else if("f"==j&&d.bFilter)g=pb(a);else if("r"==j&&d.bProcessing)g=qb(a);else if("t"==j)g=rb(a);else if("i"==j&&d.bInfo)g=sb(a);else if("p"== | ||||||
|  | j&&d.bPaginate)g=tb(a);else if(0!==m.ext.feature.length){i=m.ext.feature;q=0;for(n=i.length;q<n;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function da(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,n,l,q,t;a.splice(0,a.length);f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){l=1*e.getAttribute("colspan"); | ||||||
|  | q=1*e.getAttribute("rowspan");l=!l||0===l||1===l?1:l;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;n=g;t=1===l?!0:!1;for(j=0;j<l;j++)for(g=0;g<q;g++)a[f+g][n+j]={cell:e,unique:t},a[f+g].nTr=d}e=e.nextSibling}}}function qa(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],da(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function ra(a,b,c){u(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={}, | ||||||
|  | e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,i=function(b){u(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var n=h.isFunction(f)?f(b,a):f,b=h.isFunction(f)&&n?n:h.extend(!0,b,n);delete g.data}n={data:b,success:function(b){var c=b.error||b.sError;c&&L(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=u(a,null,"xhr", | ||||||
|  | [a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?L(a,0,"Invalid JSON response",1):4===b.readyState&&L(a,0,"Ajax error",7));C(a,!1)}};a.oAjaxData=b;u(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(n,{url:g||a.sAjaxSource})):h.isFunction(g)?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(n,g)),g.data=f)}function lb(a){return a.bAjaxDataGet?(a.iDraw++,C(a, | ||||||
|  | !0),ra(a,ub(a),function(b){vb(a,b)}),!1):!0}function ub(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=[],i,n,l,q=V(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var k=function(a,b){j.push({name:a,value:b})};k("sEcho",a.iDraw);k("iColumns",c);k("sColumns",G(b,"sName").join(","));k("iDisplayStart",g);k("iDisplayLength",i);var S={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)n=b[g], | ||||||
|  | l=f[g],i="function"==typeof n.mData?"function":n.mData,S.columns.push({data:i,name:n.sName,searchable:n.bSearchable,orderable:n.bSortable,search:{value:l.sSearch,regex:l.bRegex}}),k("mDataProp_"+g,i),d.bFilter&&(k("sSearch_"+g,l.sSearch),k("bRegex_"+g,l.bRegex),k("bSearchable_"+g,n.bSearchable)),d.bSort&&k("bSortable_"+g,n.bSortable);d.bFilter&&(k("sSearch",e.sSearch),k("bRegex",e.bRegex));d.bSort&&(h.each(q,function(a,b){S.order.push({column:b.col,dir:b.dir});k("iSortCol_"+a,b.col);k("sSortDir_"+ | ||||||
|  | a,b.dir)}),k("iSortingCols",q.length));b=m.ext.legacy.ajax;return null===b?a.sAjaxSource?j:S:b?j:S}function vb(a,b){var c=sa(a,b),d=b.sEcho!==k?b.sEcho:b.draw,e=b.iTotalRecords!==k?b.iTotalRecords:b.recordsTotal,f=b.iTotalDisplayRecords!==k?b.iTotalDisplayRecords:b.recordsFiltered;if(d){if(1*d<a.iDraw)return;a.iDraw=1*d}na(a);a._iRecordsTotal=parseInt(e,10);a._iRecordsDisplay=parseInt(f,10);d=0;for(e=c.length;d<e;d++)N(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;O(a);a._bInitComplete|| | ||||||
|  | ta(a,b);a.bAjaxDataGet=!0;C(a,!1)}function sa(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==k?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?b.aaData||b[c]:""!==c?Q(c)(b):b}function pb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!this.value? | ||||||
|  | "":this.value;b!=e.sSearch&&(fa(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,O(a))},g=null!==a.searchDelay?a.searchDelay:"ssp"===y(a)?400:0,i=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).bind("keyup.DT search.DT input.DT paste.DT cut.DT",g?Oa(f,g):f).bind("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{i[0]!==I.activeElement&&i.val(e.sSearch)}catch(d){}}); | ||||||
|  | return b[0]}function fa(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Ga(a);if("ssp"!=y(a)){wb(a,b.sSearch,c,b.bEscapeRegex!==k?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)xb(a,e[b].sSearch,b,e[b].bEscapeRegex!==k?!e[b].bEscapeRegex:e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);yb(a)}else f(b);a.bFiltered=!0;u(a,null,"search",[a])}function yb(a){for(var b= | ||||||
|  | m.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var j=[],i=0,n=c.length;i<n;i++)e=c[i],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,i)&&j.push(e);c.length=0;h.merge(c,j)}}function xb(a,b,c,d,e,f){if(""!==b)for(var g=a.aiDisplay,d=Pa(b,d,e,f),e=g.length-1;0<=e;e--)b=a.aoData[g[e]]._aFilterData[c],d.test(b)||g.splice(e,1)}function wb(a,b,c,d,e,f){var d=Pa(b,d,e,f),e=a.oPreviousSearch.sSearch,f=a.aiDisplayMaster,g;0!==m.ext.search.length&&(c=!0);g=zb(a);if(0>=b.length)a.aiDisplay=f.slice(); | ||||||
|  | else{if(g||c||e.length>b.length||0!==b.indexOf(e)||a.bSorted)a.aiDisplay=f.slice();b=a.aiDisplay;for(c=b.length-1;0<=c;c--)d.test(a.aoData[b[c]]._sFilterRow)||b.splice(c,1)}}function Pa(a,b,c,d){a=b?a:Qa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/),a=b?b[1]:a;return a.replace('"',"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function zb(a){var b=a.aoColumns,c,d,e,f,g,j,i,h,l=m.ext.type.search;c=!1;d=0;for(f=a.aoData.length;d< | ||||||
|  | f;d++)if(h=a.aoData[d],!h._aFilterData){j=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(i=B(a,d,e,"filter"),l[c.sType]&&(i=l[c.sType](i)),null===i&&(i=""),"string"!==typeof i&&i.toString&&(i=i.toString())):i="",i.indexOf&&-1!==i.indexOf("&")&&(ua.innerHTML=i,i=Zb?ua.textContent:ua.innerText),i.replace&&(i=i.replace(/[\r\n]/g,"")),j.push(i);h._aFilterData=j;h._sFilterRow=j.join("  ");c=!0}return c}function Ab(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}} | ||||||
|  | function Bb(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function sb(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Cb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Cb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(), | ||||||
|  | g=a.fnRecordsDisplay(),j=g?c.sInfo:c.sInfoEmpty;g!==f&&(j+=" "+c.sInfoFiltered);j+=c.sInfoPostFix;j=Db(a,j);c=c.fnInfoCallback;null!==c&&(j=c.call(a.oInstance,a,d,e,f,g,j));h(b).html(j)}}function Db(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/ | ||||||
|  | e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function ga(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;var g=a.bDeferLoading;if(a.bInitialised){nb(a);kb(a);ea(a,a.aoHeader);ea(a,a.aoFooter);C(a,!0);c.bAutoWidth&&Fa(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&&(f.nTh.style.width=x(f.sWidth));u(a,null,"preInit",[a]);T(a);e=y(a);if("ssp"!=e||g)"ajax"==e?ra(a,[],function(c){var f=sa(a,c);for(b=0;b<f.length;b++)N(a,f[b]);a.iInitDisplayStart=d;T(a);C(a,!1);ta(a,c)},a):(C(a,!1), | ||||||
|  | ta(a))}else setTimeout(function(){ga(a)},200)}function ta(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&Y(a);u(a,null,"plugin-init",[a,b]);u(a,"aoInitComplete","init",[a,b])}function Ra(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Sa(a);u(a,null,"length",[a,c])}function ob(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isArray(d[0]),f=e?d[0]:d,d=e?d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,j=f.length;g<j;g++)e[0][g]=new Option(d[g],f[g]);var i= | ||||||
|  | h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).bind("change.DT",function(){Ra(a,h(this).val());O(a)});h(a.nTable).bind("length.dt.DT",function(b,c,d){a===c&&h("select",i).val(d)});return i[0]}function tb(a){var b=a.sPaginationType,c=m.ext.pager[b],d="function"===typeof c,e=function(a){O(a)},b=h("<div/>").addClass(a.oClasses.sPaging+b)[0],f=a.aanFeatures; | ||||||
|  | d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;l<k;l++)Na(a,"pageButton")(a,f.p[l],l,h,b,i)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Ta(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&(d=0)):"first"==b?d=0: | ||||||
|  | "previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:L(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(u(a,null,"page",[a]),c&&O(a));return b}function qb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function C(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none");u(a,null,"processing", | ||||||
|  | [a,b])}function rb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),n=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:x(d):"100%"}).append(h("<div/>",{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box", | ||||||
|  | width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:x(d)}).append(b));l&&i.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:x(d):"100%"}).append(h("<div/>",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append("bottom"===j?g:null).append(b.children("tfoot"))))); | ||||||
|  | var b=i.children(),k=b[0],f=b[1],t=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(t.scrollLeft=a)});h(f).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=t;a.aoDrawCallback.push({fn:ka,sName:"scrolling"});return i[0]}function ka(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,n=j.children("table"),j=a.nScrollBody,l=h(j),q=j.style,t=h(a.nScrollFoot).children("div"), | ||||||
|  | m=t.children("table"),o=h(a.nTHead),F=h(a.nTable),p=F[0],r=p.style,u=a.nTFoot?h(a.nTFoot):null,Eb=a.oBrowser,Ua=Eb.bScrollOversize,s=G(a.aoColumns,"nTh"),P,v,w,y,z=[],A=[],B=[],C=[],D,E=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};v=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==v&&a.scrollBarVis!==k)a.scrollBarVis=v,Y(a);else{a.scrollBarVis=v;F.children("thead, tfoot").remove();u&&(w=u.clone().prependTo(F),P=u.find("tr"),w= | ||||||
|  | w.find("tr"));y=o.clone().prependTo(F);o=o.find("tr");v=y.find("tr");y.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(qa(a,y),function(b,c){D=Z(a,b);c.style.width=a.aoColumns[D].sWidth});u&&J(function(a){a.style.width=""},w);f=F.outerWidth();if(""===c){r.width="100%";if(Ua&&(F.find("tbody").height()>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=x(F.outerWidth()-b);f=F.outerWidth()}else""!==d&&(r.width=x(d),f=F.outerWidth());J(E,v);J(function(a){B.push(a.innerHTML); | ||||||
|  | z.push(x(h(a).css("width")))},v);J(function(a,b){if(h.inArray(a,s)!==-1)a.style.width=z[b]},o);h(v).height(0);u&&(J(E,w),J(function(a){C.push(a.innerHTML);A.push(x(h(a).css("width")))},w),J(function(a,b){a.style.width=A[b]},P),h(w).height(0));J(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+B[b]+"</div>";a.style.width=z[b]},v);u&&J(function(a,b){a.innerHTML='<div class="dataTables_sizing" style="height:0;overflow:hidden;">'+C[b]+"</div>";a.style.width= | ||||||
|  | A[b]},w);if(F.outerWidth()<f){P=j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(Ua&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=x(P-b);(""===c||""!==d)&&L(a,1,"Possible column misalignment",6)}else P="100%";q.width=x(P);g.width=x(P);u&&(a.nScrollFoot.style.width=x(P));!e&&Ua&&(q.height=x(p.offsetHeight+b));c=F.outerWidth();n[0].style.width=x(c);i.width=x(c);d=F.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+(Eb.bScrollbarLeft?"Left": | ||||||
|  | "Right");i[e]=d?b+"px":"0px";u&&(m[0].style.width=x(c),t[0].style.width=x(c),t[0].style[e]=d?b+"px":"0px");F.children("colgroup").insertBefore(F.children("thead"));l.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function J(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,j,d):a(g,d),d++),g=g.nextSibling,j=c?j.nextSibling:null;e++}}function Fa(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner, | ||||||
|  | j=c.length,i=la(a,"bVisible"),n=h("th",a.nTHead),l=b.getAttribute("width"),k=b.parentNode,t=!1,m,o,p=a.oBrowser,d=p.bScrollOversize;(m=b.style.width)&&-1!==m.indexOf("%")&&(l=m);for(m=0;m<i.length;m++)o=c[i[m]],null!==o.sWidth&&(o.sWidth=Fb(o.sWidthOrig,k),t=!0);if(d||!t&&!f&&!e&&j==aa(a)&&j==n.length)for(m=0;m<j;m++)i=Z(a,m),null!==i&&(c[i].sWidth=x(n.eq(m).width()));else{j=h(b).clone().css("visibility","hidden").removeAttr("id");j.find("tbody tr").remove();var r=h("<tr/>").appendTo(j.find("tbody")); | ||||||
|  | j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");n=qa(a,j.find("thead")[0]);for(m=0;m<i.length;m++)o=c[i[m]],n[m].style.width=null!==o.sWidthOrig&&""!==o.sWidthOrig?x(o.sWidthOrig):"",o.sWidthOrig&&f&&h(n[m]).append(h("<div/>").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(m=0;m<i.length;m++)t=i[m],o=c[t],h(Gb(a,t)).clone(!1).append(o.sContentPadding).appendTo(r);h("[name]", | ||||||
|  | j).removeAttr("name");o=h("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()<k.clientWidth&&l&&j.width(k.clientWidth)):e?j.width(k.clientWidth):l&&j.width(l);for(m=e=0;m<i.length;m++)k=h(n[m]),g=k.outerWidth()-k.width(),k=p.bBounding?Math.ceil(n[m].getBoundingClientRect().width):k.outerWidth(),e+=k,c[i[m]].sWidth=x(k-g);b.style.width=x(e);o.remove()}l&&(b.style.width= | ||||||
|  | x(l));if((l||f)&&!a._reszEvt)b=function(){h(D).bind("resize.DT-"+a.sInstance,Oa(function(){Y(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0}function Fb(a,b){if(!a)return 0;var c=h("<div/>").css("width",x(a)).appendTo(b||I.body),d=c[0].offsetWidth;c.remove();return d}function Gb(a,b){var c=Hb(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("<td/>").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Hb(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=B(a,f,b,"display")+"",c=c.replace($b, | ||||||
|  | ""),c=c.replace(/ /g," "),c.length>d&&(d=c.length,e=f);return e}function x(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function V(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var n=[];f=function(a){a.length&&!h.isArray(a[0])?n.push(a):h.merge(n,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<n.length;a++){i=n[a][0];f=e[i].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],j=e[g].sType|| | ||||||
|  | "string",n[a]._idx===k&&(n[a]._idx=h.inArray(n[a][1],e[g].asSorting)),d.push({src:i,col:g,dir:n[a][1],index:n[a]._idx,type:j,formatter:m.ext.type.order[j+"-pre"]})}return d}function mb(a){var b,c,d=[],e=m.ext.type.order,f=a.aoData,g=0,j,i=a.aiDisplayMaster,h;Ga(a);h=V(a);b=0;for(c=h.length;b<c;b++)j=h[b],j.formatter&&g++,Ib(a,j.col);if("ssp"!=y(a)&&0!==h.length){b=0;for(c=i.length;b<c;b++)d[i[b]]=b;g===h.length?i.sort(function(a,b){var c,e,g,j,i=h.length,k=f[a]._aSortData,m=f[b]._aSortData;for(g= | ||||||
|  | 0;g<i;g++)if(j=h[g],c=k[j.col],e=m[j.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,m=f[a]._aSortData,p=f[b]._aSortData;for(j=0;j<k;j++)if(i=h[j],c=m[i.col],g=p[i.col],i=e[i.type+"-"+i.dir]||e["string-"+i.dir],c=i(c,g),0!==c)return c;c=d[a];g=d[b];return c<g?-1:c>g?1:0})}a.bSorted=!0}function Jb(a){for(var b,c,d=a.aoColumns,e=V(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var j=c.asSorting;b=c.sTitle.replace(/<.*?>/g, | ||||||
|  | "");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0<e.length&&e[0].col==f?(i.setAttribute("aria-sort","asc"==e[0].dir?"ascending":"descending"),c=j[e[0].index+1]||j[0]):c=j[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);i.setAttribute("aria-label",b)}}function Va(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===k&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b, | ||||||
|  | G(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);T(a);"function"==typeof d&&d(a)}function Ma(a,b,c,d){var e=a.aoColumns[c];Wa(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(C(a,!0),setTimeout(function(){Va(a,c,b.shiftKey,d);"ssp"!==y(a)&&C(a,!1)},0)):Va(a,c,b.shiftKey,d))})} | ||||||
|  | function va(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=V(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(G(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(G(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Ib(a,b){var c=a.aoColumns[b],d=m.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,$(a,b)));for(var f,g=m.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j<i;j++)if(c=a.aoData[j], | ||||||
|  | c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[j]:B(a,j,b,"sort"),c._aSortData[b]=g?g(f):f}function wa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:Ab(a.oPreviousSearch),columns:h.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Ab(a.aoPreSearchCols[d])}})};u(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a, | ||||||
|  | b)}}function Kb(a){var b,c,d=a.aoColumns;if(a.oFeatures.bStateSave){var e=a.fnStateLoadCallback.call(a.oInstance,a);if(e&&e.time&&(b=u(a,"aoStateLoadParams","stateLoadParams",[a,e]),-1===h.inArray(!1,b)&&(b=a.iStateDuration,!(0<b&&e.time<+new Date-1E3*b)&&d.length===e.columns.length))){a.oLoadedState=h.extend(!0,{},e);e.start!==k&&(a._iDisplayStart=e.start,a.iInitDisplayStart=e.start);e.length!==k&&(a._iDisplayLength=e.length);e.order!==k&&(a.aaSorting=[],h.each(e.order,function(b,c){a.aaSorting.push(c[0]>= | ||||||
|  | d.length?[0,c[1]]:c)}));e.search!==k&&h.extend(a.oPreviousSearch,Bb(e.search));b=0;for(c=e.columns.length;b<c;b++){var f=e.columns[b];f.visible!==k&&(d[b].bVisible=f.visible);f.search!==k&&h.extend(a.aoPreSearchCols[b],Bb(f.search))}u(a,"aoStateLoaded","stateLoaded",[a,e])}}}function xa(a){var b=m.settings,a=h.inArray(a,G(b,"nTable"));return-1!==a?b[a]:null}function L(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+ | ||||||
|  | d);if(b)D.console&&console.log&&console.log(c);else if(b=m.ext,b=b.sErrMode||b.errMode,a&&u(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function E(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?E(a,b,d[0],d[1]):E(a,b,d)}):(d===k&&(d=c),b[c]!==k&&(a[d]=b[c]))}function Lb(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!== | ||||||
|  | e&&h.isArray(d)?d.slice():d);return a}function Wa(a,b,c){h(a).bind("click.DT",b,function(b){a.blur();c(b)}).bind("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).bind("selectstart.DT",function(){return!1})}function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function u(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=h.Event(c+".dt"),h(a.nTable).trigger(b,d),e.push(b.result));return e}function Sa(a){var b=a._iDisplayStart, | ||||||
|  | c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Na(a,b){var c=a.renderer,d=m.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ya(a,b){var c=[],c=Mb.numbers_length,d=Math.floor(c/2);b<=c?c=W(0,b):a<=d?(c=W(0,c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=W(b-(c-2),b):(c=W(a-d+2,a+d-1),c.push("ellipsis"), | ||||||
|  | c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function db(a){h.each({num:function(b){return za(b,a)},"num-fmt":function(b){return za(b,a,Xa)},"html-num":function(b){return za(b,a,Aa)},"html-num-fmt":function(b){return za(b,a,Aa,Xa)}},function(b,c){v.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(v.type.search[b+a]=v.type.search.html)})}function Nb(a){return function(){var b=[xa(this[m.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return m.ext.internal[a].apply(this, | ||||||
|  | b)}}var m=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new r(xa(this[v.iApiIndex])):new r(this)};this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1): | ||||||
|  | (""!==d.sX||""!==d.sY)&&ka(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a, | ||||||
|  | c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(), | ||||||
|  | [a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return xa(this[v.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener= | ||||||
|  | function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();(d===k||d)&&h.draw();return 0};this.fnVersionCheck=v.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=v.internal;for(var e in m.ext.internal)e&&(this[e]=Nb(e));this.each(function(){var e={},e=1<d?Lb(e,a,!0):a,g=0,j,i=this.getAttribute("id"),n=!1,l=m.defaults,q=h(this);if("table"!= | ||||||
|  | this.nodeName.toLowerCase())L(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{eb(l);fb(l.column);K(l,l,!0);K(l.column,l.column,!0);K(l,h.extend(e,q.data()));var t=m.settings,g=0;for(j=t.length;g<j;g++){var p=t[g];if(p.nTable==this||p.nTHead.parentNode==this||p.nTFoot&&p.nTFoot.parentNode==this){g=e.bRetrieve!==k?e.bRetrieve:l.bRetrieve;if(c||g)return p.oInstance;if(e.bDestroy!==k?e.bDestroy:l.bDestroy){p.oInstance.fnDestroy();break}else{L(p,0,"Cannot reinitialise DataTable",3); | ||||||
|  | return}}if(p.sTableId==this.id){t.splice(g,1);break}}if(null===i||""===i)this.id=i="DataTables_Table_"+m.ext._unique++;var o=h.extend(!0,{},m.models.oSettings,{sDestroyWidth:q[0].style.width,sInstance:i,sTableId:i});o.nTable=this;o.oApi=b.internal;o.oInit=e;t.push(o);o.oInstance=1===b.length?b:q.dataTable();eb(e);e.oLanguage&&Da(e.oLanguage);e.aLengthMenu&&!e.iDisplayLength&&(e.iDisplayLength=h.isArray(e.aLengthMenu[0])?e.aLengthMenu[0][0]:e.aLengthMenu[0]);e=Lb(h.extend(!0,{},l),e);E(o.oFeatures, | ||||||
|  | e,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));E(o,e,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols", | ||||||
|  | "aoPreSearchCols"],["iDisplayLength","_iDisplayLength"],["bJQueryUI","bJUI"]]);E(o.oScroll,e,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);E(o.oLanguage,e,"fnInfoCallback");z(o,"aoDrawCallback",e.fnDrawCallback,"user");z(o,"aoServerParams",e.fnServerParams,"user");z(o,"aoStateSaveParams",e.fnStateSaveParams,"user");z(o,"aoStateLoadParams",e.fnStateLoadParams,"user");z(o,"aoStateLoaded",e.fnStateLoaded,"user");z(o,"aoRowCallback",e.fnRowCallback, | ||||||
|  | "user");z(o,"aoRowCreatedCallback",e.fnCreatedRow,"user");z(o,"aoHeaderCallback",e.fnHeaderCallback,"user");z(o,"aoFooterCallback",e.fnFooterCallback,"user");z(o,"aoInitComplete",e.fnInitComplete,"user");z(o,"aoPreDrawCallback",e.fnPreDrawCallback,"user");o.rowIdFn=Q(e.rowId);gb(o);i=o.oClasses;e.bJQueryUI?(h.extend(i,m.ext.oJUIClasses,e.oClasses),e.sDom===l.sDom&&"lfrtip"===l.sDom&&(o.sDom='<"H"lfr>t<"F"ip>'),o.renderer)?h.isPlainObject(o.renderer)&&!o.renderer.header&&(o.renderer.header="jqueryui"): | ||||||
|  | o.renderer="jqueryui":h.extend(i,m.ext.classes,e.oClasses);q.addClass(i.sTable);o.iInitDisplayStart===k&&(o.iInitDisplayStart=e.iDisplayStart,o._iDisplayStart=e.iDisplayStart);null!==e.iDeferLoading&&(o.bDeferLoading=!0,g=h.isArray(e.iDeferLoading),o._iRecordsDisplay=g?e.iDeferLoading[0]:e.iDeferLoading,o._iRecordsTotal=g?e.iDeferLoading[1]:e.iDeferLoading);var r=o.oLanguage;h.extend(!0,r,e.oLanguage);""!==r.sUrl&&(h.ajax({dataType:"json",url:r.sUrl,success:function(a){Da(a);K(l.oLanguage,a);h.extend(true, | ||||||
|  | r,a);ga(o)},error:function(){ga(o)}}),n=!0);null===e.asStripeClasses&&(o.asStripeClasses=[i.sStripeOdd,i.sStripeEven]);var g=o.asStripeClasses,v=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(g,function(a){return v.hasClass(a)}))&&(h("tbody tr",this).removeClass(g.join(" ")),o.asDestroyStripes=g.slice());t=[];g=this.getElementsByTagName("thead");0!==g.length&&(da(o.aoHeader,g[0]),t=qa(o));if(null===e.aoColumns){p=[];g=0;for(j=t.length;g<j;g++)p.push(null)}else p=e.aoColumns;g=0;for(j= | ||||||
|  | p.length;g<j;g++)Ea(o,t?t[g]:null);ib(o,e.aoColumnDefs,p,function(a,b){ja(o,a,b)});if(v.length){var s=function(a,b){return a.getAttribute("data-"+b)!==null?b:null};h(v[0]).children("th, td").each(function(a,b){var c=o.aoColumns[a];if(c.mData===a){var d=s(b,"sort")||s(b,"order"),e=s(b,"filter")||s(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+d:k,type:d!==null?a+".@data-"+d:k,filter:e!==null?a+".@data-"+e:k};ja(o,a)}}})}var w=o.oFeatures;e.bStateSave&&(w.bStateSave= | ||||||
|  | !0,Kb(o,e),z(o,"aoDrawCallback",wa,"state_save"));if(e.aaSorting===k){t=o.aaSorting;g=0;for(j=t.length;g<j;g++)t[g][1]=o.aoColumns[g].asSorting[0]}va(o);w.bSort&&z(o,"aoDrawCallback",function(){if(o.bSorted){var a=V(o),b={};h.each(a,function(a,c){b[c.src]=c.dir});u(o,null,"order",[o,a,b]);Jb(o)}});z(o,"aoDrawCallback",function(){(o.bSorted||y(o)==="ssp"||w.bDeferRender)&&va(o)},"sc");g=q.children("caption").each(function(){this._captionSide=q.css("caption-side")});j=q.children("thead");0===j.length&& | ||||||
|  | (j=h("<thead/>").appendTo(this));o.nTHead=j[0];j=q.children("tbody");0===j.length&&(j=h("<tbody/>").appendTo(this));o.nTBody=j[0];j=q.children("tfoot");if(0===j.length&&0<g.length&&(""!==o.oScroll.sX||""!==o.oScroll.sY))j=h("<tfoot/>").appendTo(this);0===j.length||0===j.children().length?q.addClass(i.sNoFooter):0<j.length&&(o.nTFoot=j[0],da(o.aoFooter,o.nTFoot));if(e.aaData)for(g=0;g<e.aaData.length;g++)N(o,e.aaData[g]);else(o.bDeferLoading||"dom"==y(o))&&ma(o,h(o.nTBody).children("tr"));o.aiDisplay= | ||||||
|  | o.aiDisplayMaster.slice();o.bInitialised=!0;!1===n&&ga(o)}});b=null;return this},v,r,p,s,Ya={},Ob=/[\r\n]/g,Aa=/<.*?>/g,ac=/^[\w\+\-]/,bc=/[\w\+\-]$/,cc=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Xa=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi,M=function(a){return!a||!0===a||"-"===a?!0:!1},Pb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Qb=function(a,b){Ya[b]||(Ya[b]=RegExp(Qa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g, | ||||||
|  | "").replace(Ya[b],"."):a},Za=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Qb(a,b));c&&d&&(a=a.replace(Xa,""));return!isNaN(parseFloat(a))&&isFinite(a)},Rb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:Za(a.replace(Aa,""),b,c)?!0:null},G=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<f;e++)a[e]&&d.push(a[e][b]);return d},ha=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==k)for(;f<g;f++)a[b[f]][c]&& | ||||||
|  | e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},W=function(a,b){var c=[],d;b===k?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Sb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},pa=function(a){var b=[],c,d,e=a.length,f,g=0;d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b};m.util={throttle:function(a,b){var c=b!==k?b:200,d,e;return function(){var b=this,g=+new Date,h=arguments;d&&g<d+c?(clearTimeout(e), | ||||||
|  | e=setTimeout(function(){d=k;a.apply(b,h)},c)):(d=g,a.apply(b,h))}},escapeRegex:function(a){return a.replace(cc,"\\$1")}};var A=function(a,b,c){a[b]!==k&&(a[c]=a[b])},ba=/\[.*?\]$/,U=/\(\)$/,Qa=m.util.escapeRegex,ua=h("<div>")[0],Zb=ua.textContent!==k,$b=/<.*?>/g,Oa=m.util.throttle,Tb=[],w=Array.prototype,dc=function(a){var b,c,d=m.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]: | ||||||
|  | null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};r=function(a,b){if(!(this instanceof r))return new r(a,b);var c=[],d=function(a){(a=dc(a))&&(c=c.concat(a))};if(h.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=pa(c);b&&h.merge(this,b);this.selector={rows:null,cols:null,opts:null};r.extend(this,this,Tb)}; | ||||||
|  | m.Api=r;h.extend(r.prototype,{any:function(){return 0!==this.count()},concat:w.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new r(b[a],this[a]):null},filter:function(a){var b=[];if(w.filter)b=w.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new r(this.context,b)},flatten:function(){var a= | ||||||
|  | [];return new r(this.context,a.concat.apply(a,this.toArray()))},join:w.join,indexOf:w.indexOf||function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===a)return c;return-1},iterator:function(a,b,c,d){var e=[],f,g,h,i,n,l=this.context,m,t,p=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);g=0;for(h=l.length;g<h;g++){var o=new r(l[g]);if("table"===b)f=c.call(o,l[g],g),f!==k&&e.push(f);else if("columns"===b||"rows"===b)f=c.call(o,l[g],this[g],g),f!==k&&e.push(f);else if("column"===b||"column-rows"=== | ||||||
|  | b||"row"===b||"cell"===b){t=this[g];"column-rows"===b&&(m=Ba(l[g],p.opts));i=0;for(n=t.length;i<n;i++)f=t[i],f="cell"===b?c.call(o,l[g],f.row,f.column,g,i):c.call(o,l[g],f,g,i,m),f!==k&&e.push(f)}}return e.length||d?(a=new r(l,a?e.concat.apply([],e):e),b=a.selector,b.rows=p.rows,b.cols=p.cols,b.opts=p.opts,a):this},lastIndexOf:w.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(w.map)b=w.map.call(this,a,this);else for(var c= | ||||||
|  | 0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new r(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:w.pop,push:w.push,reduce:w.reduce||function(a,b){return hb(this,a,b,0,this.length,1)},reduceRight:w.reduceRight||function(a,b){return hb(this,a,b,this.length-1,-1,-1)},reverse:w.reverse,selector:null,shift:w.shift,sort:w.sort,splice:w.splice,toArray:function(){return w.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)}, | ||||||
|  | unique:function(){return new r(this.context,pa(this))},unshift:w.unshift});r.extend=function(a,b,c){if(c.length&&b&&(b instanceof r||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=b.apply(a,arguments);r.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++)f=c[d],b[f.name]="function"===typeof f.val?g(a,f.val,f):h.isPlainObject(f.val)?{}:f.val,b[f.name].__dt_wrapper=!0,r.extend(a,b[f.name],f.propExt)}};r.register=p=function(a,b){if(h.isArray(a))for(var c=0,d=a.length;c< | ||||||
|  | d;c++)r.register(a[c],b);else for(var e=a.split("."),f=Tb,g,j,c=0,d=e.length;c<d;c++){g=(j=-1!==e[c].indexOf("()"))?e[c].replace("()",""):e[c];var i;a:{i=0;for(var n=f.length;i<n;i++)if(f[i].name===g){i=f[i];break a}i=null}i||(i={name:g,val:{},methodExt:[],propExt:[]},f.push(i));c===d-1?i.val=b:f=j?i.methodExt:i.propExt}};r.registerPlural=s=function(a,b,c){r.register(a,c);r.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof r?a.length?h.isArray(a[0])?new r(a.context, | ||||||
|  | a[0]):a[0]:k:a})};p("tables()",function(a){var b;if(a){b=r;var c=this.context;if("number"===typeof a)a=[c[a]];else var d=h.map(c,function(a){return a.nTable}),a=h(d).filter(a).map(function(){var a=h.inArray(this,d);return c[a]}).toArray();b=new b(a)}else b=this;return b});p("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new r(b[0]):a});s("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});s("tables().body()","table().body()", | ||||||
|  | function(){return this.iterator("table",function(a){return a.nTBody},1)});s("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});s("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});s("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});p("draw()",function(a){return this.iterator("table",function(b){"page"=== | ||||||
|  | a?O(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),T(b,!1===a))})});p("page()",function(a){return a===k?this.page.info().page:this.iterator("table",function(b){Ta(b,a)})});p("page.info()",function(){if(0===this.context.length)return k;var a=this.context[0],b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d, | ||||||
|  | serverSide:"ssp"===y(a)}});p("page.len()",function(a){return a===k?0!==this.context.length?this.context[0]._iDisplayLength:k:this.iterator("table",function(b){Ra(b,a)})});var Ub=function(a,b,c){if(c){var d=new r(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==y(a))T(a,b);else{C(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();ra(a,[],function(c){na(a);for(var c=sa(a,c),d=0,e=c.length;d<e;d++)N(a,c[d]);T(a,b);C(a,!1)})}};p("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json}); | ||||||
|  | p("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});p("ajax.reload()",function(a,b){return this.iterator("table",function(c){Ub(c,!1===b,a)})});p("ajax.url()",function(a){var b=this.context;if(a===k){if(0===b.length)return k;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});p("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Ub(c, | ||||||
|  | !1===b,a)})});var $a=function(a,b,c,d,e){var f=[],g,j,i,n,l,m;i=typeof b;if(!b||"string"===i||"function"===i||b.length===k)b=[b];i=0;for(n=b.length;i<n;i++){j=b[i]&&b[i].split?b[i].split(","):[b[i]];l=0;for(m=j.length;l<m;l++)(g=c("string"===typeof j[l]?h.trim(j[l]):j[l]))&&g.length&&(f=f.concat(g))}a=v.selector[a];if(a.length){i=0;for(n=a.length;i<n;i++)f=a[i](d,e,f)}return pa(f)},ab=function(a){a||(a={});a.filter&&a.search===k&&(a.search=a.filter);return h.extend({search:"none",order:"current", | ||||||
|  | page:"all"},a)},bb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Ba=function(a,b){var c,d,e,f=[],g=a.aiDisplay;c=a.aiDisplayMaster;var j=b.search;d=b.order;e=b.page;if("ssp"==y(a))return"removed"===j?[]:W(0,c.length);if("current"==e){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if("current"==d||"applied"==d)f="none"==j?c.slice():"applied"==j?g.slice():h.map(c,function(a){return-1=== | ||||||
|  | h.inArray(a,g)?a:null});else if("index"==d||"original"==d){c=0;for(d=a.aoData.length;c<d;c++)"none"==j?f.push(c):(e=h.inArray(c,g),(-1===e&&"removed"==j||0<=e&&"applied"==j)&&f.push(c))}return f};p("rows()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=ab(b),c=this.iterator("table",function(c){var e=b;return $a("row",a,function(a){var b=Pb(a);if(b!==null&&!e)return[b];var j=Ba(c,e);if(b!==null&&h.inArray(b,j)!==-1)return[b];if(!a)return j;if(typeof a==="function")return h.map(j,function(b){var e= | ||||||
|  | c.aoData[b];return a(b,e._aData,e.nTr)?b:null});b=Sb(ha(c.aoData,j,"nTr"));if(a.nodeName){if(a._DT_RowIndex!==k)return[a._DT_RowIndex];if(a._DT_CellIndex)return[a._DT_CellIndex.row];b=h(a).closest("*[data-dt-row]");return b.length?[b.data("dt-row")]:[]}if(typeof a==="string"&&a.charAt(0)==="#"){j=c.aIds[a.replace(/^#/,"")];if(j!==k)return[j.idx]}return h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()},c,e)},1);c.selector.rows=a;c.selector.opts=b;return c});p("rows().nodes()",function(){return this.iterator("row", | ||||||
|  | function(a,b){return a.aoData[b].nTr||k},1)});p("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ha(a.aoData,b,"_aData")},1)});s("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return"search"===a?d._aFilterData:d._aSortData},1)});s("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){ca(b,c,a)})});s("rows().indexes()","row().index()",function(){return this.iterator("row", | ||||||
|  | function(a,b){return b},1)});s("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new r(c,b)});s("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h,i,n,l;e.splice(c,1);g=0;for(h=e.length;g<h;g++)if(i=e[g],l=i.anCells,null!==i.nTr&&(i.nTr._DT_RowIndex=g),null!==l){i=0;for(n= | ||||||
|  | l.length;i<n;i++)l[i]._DT_CellIndex.row=g}oa(b.aiDisplayMaster,c);oa(b.aiDisplay,c);oa(a[d],c,!1);Sa(b);c=b.rowIdFn(f._aData);c!==k&&delete b.aIds[c]});this.iterator("table",function(a){for(var c=0,d=a.aoData.length;c<d;c++)a.aoData[c].idx=c});return this});p("rows.add()",function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0;for(g=a.length;f<g;f++)c=a[f],c.nodeName&&"TR"===c.nodeName.toUpperCase()?h.push(ma(b,c)[0]):h.push(N(b,c));return h},1),c=this.rows(-1);c.pop();h.merge(c,b); | ||||||
|  | return c});p("row()",function(a,b){return bb(this.rows(a,b))});p("row().data()",function(a){var b=this.context;if(a===k)return b.length&&this.length?b[0].aoData[this[0]]._aData:k;b[0].aoData[this[0]]._aData=a;ca(b[0],this[0],"data");return this});p("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});p("row.add()",function(a){a instanceof h&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()? | ||||||
|  | ma(b,a)[0]:N(b,a)});return this.row(b[0])});var cb=function(a,b){var c=a.context;if(c.length&&(c=c[0].aoData[b!==k?b:a[0]])&&c._details)c._details.remove(),c._detailsShow=k,c._details=k},Vb=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach();var e=c[0],f=new r(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<G(g,"_details").length&&(f.on("draw.dt.DT_details", | ||||||
|  | function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),f.on("column-visibility.dt.DT_details",function(a,b){if(e===b)for(var c,d=aa(b),f=0,h=g.length;f<h;f++)c=g[f],c._details&&c._details.children("td[colspan]").attr("colspan",d)}),f.on("destroy.dt.DT_details",function(a,b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&cb(f,c)}))}}};p("row().child()",function(a,b){var c=this.context;if(a===k)return c.length&&this.length? | ||||||
|  | c[0].aoData[this[0]]._details:k;if(!0===a)this.child.show();else if(!1===a)cb(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(h.isArray(a)||a instanceof h)for(var c=0,k=a.length;c<k;c++)f(a[c],b);else a.nodeName&&"tr"===a.nodeName.toLowerCase()?e.push(a):(c=h("<tr><td/></tr>").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=aa(d),e.push(c[0]))};f(a,b);c._details&&c._details.remove();c._details=h(e);c._detailsShow&&c._details.insertAfter(c.nTr)}return this}); | ||||||
|  | p(["row().child.show()","row().child().show()"],function(){Vb(this,!0);return this});p(["row().child.hide()","row().child().hide()"],function(){Vb(this,!1);return this});p(["row().child.remove()","row().child().remove()"],function(){cb(this);return this});p("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var ec=/^(.+):(name|visIdx|visible)$/,Wb=function(a,b,c,d,e){for(var c=[],d=0,f=e.length;d<f;d++)c.push(B(a,e[d],b)); | ||||||
|  | return c};p("columns()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=ab(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,j=G(g,"sName"),i=G(g,"nTh");return $a("column",e,function(a){var b=Pb(a);if(a==="")return W(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=Ba(c,f);return h.map(g,function(b,f){return a(f,Wb(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(ec):"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1], | ||||||
|  | 10);if(b<0){var m=h.map(g,function(a,b){return a.bVisible?b:null});return[m[m.length+b]]}return[Z(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)},1);c.selector.cols=a;c.selector.opts=b;return c});s("columns().header()", | ||||||
|  | "column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});s("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});s("columns().data()","column().data()",function(){return this.iterator("column-rows",Wb,1)});s("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});s("columns().cache()","column().cache()", | ||||||
|  | function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ha(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});s("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ha(a.aoData,e,"anCells",b)},1)});s("columns().visible()","column().visible()",function(a,b){var c=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var f=b.aoColumns,g=f[c],j=b.aoData,i,n,l;if(a!==k&&g.bVisible!==a){if(a){var m= | ||||||
|  | h.inArray(!0,G(f,"bVisible"),c+1);i=0;for(n=j.length;i<n;i++)l=j[i].nTr,f=j[i].anCells,l&&l.insertBefore(f[c],f[m]||null)}else h(G(b.aoData,"anCells",c)).detach();g.bVisible=a;ea(b,b.aoHeader);ea(b,b.aoFooter);wa(b)}});a!==k&&(this.iterator("column",function(c,e){u(c,null,"column-visibility",[c,e,a,b])}),(b===k||b)&&this.columns.adjust());return c});s("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?$(b,c):c},1)});p("columns.adjust()", | ||||||
|  | function(){return this.iterator("table",function(a){Y(a)},1)});p("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return Z(c,b);if("fromData"===a||"toVisible"===a)return $(c,b)}});p("column()",function(a,b){return bb(this.columns(a,b))});p("cells()",function(a,b,c){h.isPlainObject(a)&&(a.row===k?(c=a,a=null):(c=b,b=null));h.isPlainObject(b)&&(c=b,b=null);if(null===b||b===k)return this.iterator("table",function(b){var d=a,e=ab(c),f= | ||||||
|  | b.aoData,g=Ba(b,e),j=Sb(ha(f,g,"anCells")),i=h([].concat.apply([],j)),l,n=b.aoColumns.length,m,p,r,u,v,s;return $a("cell",d,function(a){var c=typeof a==="function";if(a===null||a===k||c){m=[];p=0;for(r=g.length;p<r;p++){l=g[p];for(u=0;u<n;u++){v={row:l,column:u};if(c){s=f[l];a(v,B(b,l,u),s.anCells?s.anCells[u]:null)&&m.push(v)}else m.push(v)}}return m}if(h.isPlainObject(a))return[a];c=i.filter(a).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length|| | ||||||
|  | !a.nodeName)return c;s=h(a).closest("*[data-dt-row]");return s.length?[{row:s.data("dt-row"),column:s.data("dt-column")}]:[]},b,e)});var d=this.columns(b,c),e=this.rows(a,c),f,g,j,i,n,l=this.iterator("table",function(a,b){f=[];g=0;for(j=e[b].length;g<j;g++){i=0;for(n=d[b].length;i<n;i++)f.push({row:e[b][g],column:d[b][i]})}return f},1);h.extend(l.selector,{cols:b,rows:a,opts:c});return l});s("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&& | ||||||
|  | a.anCells?a.anCells[c]:k},1)});p("cells().data()",function(){return this.iterator("cell",function(a,b,c){return B(a,b,c)},1)});s("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});s("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return B(b,c,d,a)},1)});s("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a, | ||||||
|  | b,c){return{row:b,column:c,columnVisible:$(a,c)}},1)});s("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){ca(b,c,a,d)})});p("cell()",function(a,b,c){return bb(this.cells(a,b,c))});p("cell().data()",function(a){var b=this.context,c=this[0];if(a===k)return b.length&&c.length?B(b[0],c[0].row,c[0].column):k;jb(b[0],c[0].row,c[0].column,a);ca(b[0],c[0].row,"data",c[0].column);return this});p("order()",function(a,b){var c=this.context;if(a===k)return 0!== | ||||||
|  | c.length?c[0].aaSorting:k;"number"===typeof a?a=[[a,b]]:a.length&&!h.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});p("order.listener()",function(a,b,c){return this.iterator("table",function(d){Ma(d,a,b,c)})});p("order.fixed()",function(a){if(!a){var b=this.context,b=b.length?b[0].aaSortingFixed:k;return h.isArray(b)?{pre:b}:b}return this.iterator("table",function(b){b.aaSortingFixed=h.extend(!0,{},a)})});p(["columns().order()", | ||||||
|  | "column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});p("search()",function(a,b,c,d){var e=this.context;return a===k?0!==e.length?e[0].oPreviousSearch.sSearch:k:this.iterator("table",function(e){e.oFeatures.bFilter&&fa(e,h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});s("columns().search()","column().search()",function(a, | ||||||
|  | b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===k)return g[f].sSearch;e.oFeatures.bFilter&&(h.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),fa(e,e.oPreviousSearch,1))})});p("state()",function(){return this.context.length?this.context[0].oSavedState:null});p("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});p("state.loaded()",function(){return this.context.length? | ||||||
|  | this.context[0].oLoadedState:null});p("state.save()",function(){return this.iterator("table",function(a){wa(a)})});m.versionCheck=m.fnVersionCheck=function(a){for(var b=m.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};m.isDataTable=m.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;h.each(m.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot?h("table",e.nScrollFoot)[0]: | ||||||
|  | null;if(e.nTable===b||f===b||g===b)c=!0});return c};m.tables=m.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(m.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new r(c):c};m.camelToHungarian=K;p("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){p(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0].match(/\.dt\b/)|| | ||||||
|  | (a[0]+=".dt");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});p("clear()",function(){return this.iterator("table",function(a){na(a)})});p("settings()",function(){return new r(this.context,this.context)});p("init()",function(){var a=this.context;return a.length?a[0].oInit:null});p("data()",function(){return this.iterator("table",function(a){return G(a.aoData,"_aData")}).flatten()});p("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode, | ||||||
|  | d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;u(b,"aoDestroyCallback","destroy",[b]);a||(new r(b)).columns().visible(!0);k.unbind(".DT").find(":not(tbody *)").unbind(".DT");h(D).unbind(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j));b.aaSorting=[];b.aaSortingFixed=[];va(b);h(l).removeClass(b.asStripeClasses.join(" ")); | ||||||
|  | h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);b.bJUI&&(h("th span."+d.sSortIcon+", td span."+d.sSortIcon,g).detach(),h("th, td",g).each(function(){var a=h("div."+d.sSortJUIWrapper,this);h(this).append(a.contents());a.detach()}));f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a% | ||||||
|  | p])}));c=h.inArray(b,m.settings);-1!==c&&m.settings.splice(c,1)})});h.each(["column","row","cell"],function(a,b){p(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,n){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,n)})})});p("i18n()",function(a,b,c){var d=this.context[0],a=Q(a)(d.oLanguage);a===k&&(a=b);c!==k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:a._);return a.replace("%d",c)});m.version="1.10.12";m.settings=[];m.models={};m.models.oSearch={bCaseInsensitive:!0, | ||||||
|  | sSearch:"",bRegex:!1,bSmart:!0};m.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};m.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null, | ||||||
|  | sTitle:null,sType:null,sWidth:null,sWidthOrig:null};m.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null, | ||||||
|  | fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1=== | ||||||
|  | a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries", | ||||||
|  | sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},m.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET", | ||||||
|  | renderer:null,rowId:"DT_RowId"};X(m.defaults);m.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};X(m.defaults.column);m.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null, | ||||||
|  | bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[], | ||||||
|  | aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k, | ||||||
|  | fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a= | ||||||
|  | this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};m.ext=v={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{}, | ||||||
|  | header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:m.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:m.version};h.extend(v,{afnFiltering:v.search,aTypes:v.type.detect,ofnSearch:v.type.search,oSort:v.type.order,afnSortData:v.order,aoFeatures:v.feature,oApi:v.internal,oStdClasses:v.classes,oPagination:v.pager});h.extend(m.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd", | ||||||
|  | sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead", | ||||||
|  | sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Ca="",Ca="",H=Ca+"ui-state-default",ia=Ca+"css_right ui-icon ui-icon-",Xb=Ca+"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix";h.extend(m.ext.oJUIClasses, | ||||||
|  | m.ext.classes,{sPageButton:"fg-button ui-button "+H,sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:H+" sorting_asc",sSortDesc:H+" sorting_desc",sSortable:H+" sorting",sSortableAsc:H+" sorting_asc_disabled",sSortableDesc:H+" sorting_desc_disabled",sSortableNone:H+" sorting_disabled",sSortJUIAsc:ia+"triangle-1-n",sSortJUIDesc:ia+"triangle-1-s",sSortJUI:ia+"carat-2-n-s", | ||||||
|  | sSortJUIAscAllowed:ia+"carat-1-n",sSortJUIDescAllowed:ia+"carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead "+H,sScrollFoot:"dataTables_scrollFoot "+H,sHeaderTH:H,sFooterTH:H,sJUIHeader:Xb+" ui-corner-tl ui-corner-tr",sJUIFooter:Xb+" ui-corner-bl ui-corner-br"});var Mb=m.ext.pager;h.extend(Mb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ya(a, | ||||||
|  | b)]},simple_numbers:function(a,b){return["previous",ya(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ya(a,b),"next","last"]},_numbers:ya,numbers_length:7});h.extend(!0,m.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},k,l,m=0,p=function(b,d){var o,r,u,s,v=function(b){Ta(a,b.data.action,true)};o=0;for(r=d.length;o<r;o++){s=d[o];if(h.isArray(s)){u=h("<"+(s.DT_el||"div")+"/>").appendTo(b);p(u,s)}else{k=null; | ||||||
|  | l="";switch(s){case "ellipsis":b.append('<span class="ellipsis">…</span>');break;case "first":k=j.sFirst;l=s+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":k=j.sPrevious;l=s+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":k=j.sNext;l=s+(e<f-1?"":" "+g.sPageButtonDisabled);break;case "last":k=j.sLast;l=s+(e<f-1?"":" "+g.sPageButtonDisabled);break;default:k=s+1;l=e===s?g.sPageButtonActive:""}if(k!==null){u=h("<a>",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"aria-label":i[s], | ||||||
|  | "data-dt-idx":m,tabindex:a.iTabIndex,id:c===0&&typeof s==="string"?a.sTableId+"_"+s:null}).html(k).appendTo(b);Wa(u,{action:s},v);m++}}}},r;try{r=h(b).find(I.activeElement).data("dt-idx")}catch(o){}p(h(b).empty(),d);r&&h(b).find("[data-dt-idx="+r+"]").focus()}}});h.extend(m.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return Za(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&(!ac.test(a)||!bc.test(a)))return null;var b=Date.parse(a);return null!==b&&!isNaN(b)||M(a)?"date": | ||||||
|  | null},function(a,b){var c=b.oLanguage.sDecimal;return Za(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c,!0)?"html-num-fmt"+c:null},function(a){return M(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(m.ext.type.search,{html:function(a){return M(a)?a:"string"===typeof a?a.replace(Ob," ").replace(Aa,""):""},string:function(a){return M(a)?a:"string"===typeof a?a.replace(Ob, | ||||||
|  | " "):a}});var za=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Qb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(v.type.order,{"date-pre":function(a){return Date.parse(a)||0},"html-pre":function(a){return M(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a, | ||||||
|  | b){return a<b?1:a>b?-1:0}});db("");h.extend(!0,m.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e, | ||||||
|  | f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var Yb=function(a){return"string"===typeof a?a.replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""):a};m.render={number:function(a, | ||||||
|  | b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return Yb(f);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:Yb}}};h.extend(m.ext.internal,{_fnExternApiFunc:Nb,_fnBuildAjax:ra,_fnAjaxUpdate:lb,_fnAjaxParameters:ub,_fnAjaxUpdateDraw:vb,_fnAjaxDataSrc:sa,_fnAddColumn:Ea,_fnColumnOptions:ja, | ||||||
|  | _fnAdjustColumnSizing:Y,_fnVisibleToColumnIndex:Z,_fnColumnIndexToVisible:$,_fnVisbleColumns:aa,_fnGetColumns:la,_fnColumnTypes:Ga,_fnApplyColumnDefs:ib,_fnHungarianMap:X,_fnCamelToHungarian:K,_fnLanguageCompat:Da,_fnBrowserDetect:gb,_fnAddData:N,_fnAddTr:ma,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:jb,_fnSplitObjNotation:Ja,_fnGetObjectDataFn:Q,_fnSetObjectDataFn:R, | ||||||
|  | _fnGetDataMaster:Ka,_fnClearTable:na,_fnDeleteIndex:oa,_fnInvalidate:ca,_fnGetRowElements:Ia,_fnCreateTr:Ha,_fnBuildHead:kb,_fnDrawHead:ea,_fnDraw:O,_fnReDraw:T,_fnAddOptionsHtml:nb,_fnDetectHeader:da,_fnGetUniqueThs:qa,_fnFeatureHtmlFilter:pb,_fnFilterComplete:fa,_fnFilterCustom:yb,_fnFilterColumn:xb,_fnFilter:wb,_fnFilterCreateSearch:Pa,_fnEscapeRegex:Qa,_fnFilterData:zb,_fnFeatureHtmlInfo:sb,_fnUpdateInfo:Cb,_fnInfoMacros:Db,_fnInitialise:ga,_fnInitComplete:ta,_fnLengthChange:Ra,_fnFeatureHtmlLength:ob, | ||||||
|  | _fnFeatureHtmlPaginate:tb,_fnPageChange:Ta,_fnFeatureHtmlProcessing:qb,_fnProcessingDisplay:C,_fnFeatureHtmlTable:rb,_fnScrollDraw:ka,_fnApplyToChildren:J,_fnCalculateColumnWidths:Fa,_fnThrottle:Oa,_fnConvertToWidth:Fb,_fnGetWidestNode:Gb,_fnGetMaxLenString:Hb,_fnStringToCss:x,_fnSortFlatten:V,_fnSort:mb,_fnSortAria:Jb,_fnSortListener:Va,_fnSortAttachListener:Ma,_fnSortingClasses:va,_fnSortData:Ib,_fnSaveState:wa,_fnLoadState:Kb,_fnSettingsFromNode:xa,_fnLog:L,_fnMap:E,_fnBindAction:Wa,_fnCallbackReg:z, | ||||||
|  | _fnCallbackFire:u,_fnLengthOverflow:Sa,_fnRenderer:Na,_fnDataSource:y,_fnRowAttributes:La,_fnCalculateEnd:function(){}});h.fn.dataTable=m;m.$=h;h.fn.dataTableSettings=m.settings;h.fn.dataTableExt=m.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(m,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable}); | ||||||
							
								
								
									
										5
									
								
								static/vendor/datatables/js/jquery.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										604
									
								
								static/vendor/flot-tooltip/jquery.flot.tooltip.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,604 @@ | |||||||
|  | /* | ||||||
|  |  * jquery.flot.tooltip | ||||||
|  |  *  | ||||||
|  |  * description: easy-to-use tooltips for Flot charts | ||||||
|  |  * version: 0.8.7 | ||||||
|  |  * authors: Krzysztof Urbas @krzysu [myviews.pl],Evan Steinkerchner @Roundaround | ||||||
|  |  * website: https://github.com/krzysu/flot.tooltip | ||||||
|  |  *  | ||||||
|  |  * build on 2016-03-15 | ||||||
|  |  * released under MIT License, 2012 | ||||||
|  | */  | ||||||
|  | (function ($) { | ||||||
|  |     // plugin options, default values | ||||||
|  |     var defaultOptions = { | ||||||
|  |         tooltip: { | ||||||
|  |             show: false, | ||||||
|  |             cssClass: "flotTip", | ||||||
|  |             content: "%s | X: %x | Y: %y", | ||||||
|  |             // allowed templates are: | ||||||
|  |             // %s -> series label, | ||||||
|  |             // %c -> series color, | ||||||
|  |             // %lx -> x axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels), | ||||||
|  |             // %ly -> y axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels), | ||||||
|  |             // %x -> X value, | ||||||
|  |             // %y -> Y value, | ||||||
|  |             // %x.2 -> precision of X value, | ||||||
|  |             // %p -> percent | ||||||
|  | 	    // %n -> value (not percent) of pie chart | ||||||
|  |             xDateFormat: null, | ||||||
|  |             yDateFormat: null, | ||||||
|  |             monthNames: null, | ||||||
|  |             dayNames: null, | ||||||
|  |             shifts: { | ||||||
|  |                 x: 10, | ||||||
|  |                 y: 20 | ||||||
|  |             }, | ||||||
|  |             defaultTheme: true, | ||||||
|  |             snap: true, | ||||||
|  |             lines: false, | ||||||
|  |             clickTips: false, | ||||||
|  |  | ||||||
|  |             // callbacks | ||||||
|  |             onHover: function (flotItem, $tooltipEl) {}, | ||||||
|  |  | ||||||
|  |             $compat: false | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // dummy default options object for legacy code (<0.8.5) - is deleted later | ||||||
|  |     defaultOptions.tooltipOpts = defaultOptions.tooltip; | ||||||
|  |  | ||||||
|  |     // object | ||||||
|  |     var FlotTooltip = function (plot) { | ||||||
|  |         // variables | ||||||
|  |         this.tipPosition = {x: 0, y: 0}; | ||||||
|  |  | ||||||
|  |         this.init(plot); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // main plugin function | ||||||
|  |     FlotTooltip.prototype.init = function (plot) { | ||||||
|  |         var that = this; | ||||||
|  |  | ||||||
|  |         // detect other flot plugins | ||||||
|  |         var plotPluginsLength = $.plot.plugins.length; | ||||||
|  |         this.plotPlugins = []; | ||||||
|  |  | ||||||
|  |         if (plotPluginsLength) { | ||||||
|  |             for (var p = 0; p < plotPluginsLength; p++) { | ||||||
|  |                 this.plotPlugins.push($.plot.plugins[p].name); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         plot.hooks.bindEvents.push(function (plot, eventHolder) { | ||||||
|  |  | ||||||
|  |             // get plot options | ||||||
|  |             that.plotOptions = plot.getOptions(); | ||||||
|  |  | ||||||
|  |             // for legacy (<0.8.5) implementations | ||||||
|  |             if (typeof(that.plotOptions.tooltip) === 'boolean') { | ||||||
|  |                 that.plotOptions.tooltipOpts.show = that.plotOptions.tooltip; | ||||||
|  |                 that.plotOptions.tooltip = that.plotOptions.tooltipOpts; | ||||||
|  |                 delete that.plotOptions.tooltipOpts; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // if not enabled return | ||||||
|  |             if (that.plotOptions.tooltip.show === false || typeof that.plotOptions.tooltip.show === 'undefined') return; | ||||||
|  |  | ||||||
|  |             // shortcut to access tooltip options | ||||||
|  |             that.tooltipOptions = that.plotOptions.tooltip; | ||||||
|  |  | ||||||
|  |             if (that.tooltipOptions.$compat) { | ||||||
|  |                 that.wfunc = 'width'; | ||||||
|  |                 that.hfunc = 'height'; | ||||||
|  |             } else { | ||||||
|  |                 that.wfunc = 'innerWidth'; | ||||||
|  |                 that.hfunc = 'innerHeight'; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // create tooltip DOM element | ||||||
|  |             var $tip = that.getDomElement(); | ||||||
|  |  | ||||||
|  |             // bind event | ||||||
|  |             $( plot.getPlaceholder() ).bind("plothover", plothover); | ||||||
|  |             if (that.tooltipOptions.clickTips) { | ||||||
|  |                 $( plot.getPlaceholder() ).bind("plotclick", plotclick); | ||||||
|  |             } | ||||||
|  |             that.clickmode = false; | ||||||
|  |  | ||||||
|  |             $(eventHolder).bind('mousemove', mouseMove); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         plot.hooks.shutdown.push(function (plot, eventHolder){ | ||||||
|  |             $(plot.getPlaceholder()).unbind("plothover", plothover); | ||||||
|  |             $(plot.getPlaceholder()).unbind("plotclick", plotclick); | ||||||
|  |             plot.removeTooltip(); | ||||||
|  |             $(eventHolder).unbind("mousemove", mouseMove); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         function mouseMove(e){ | ||||||
|  |             var pos = {}; | ||||||
|  |             pos.x = e.pageX; | ||||||
|  |             pos.y = e.pageY; | ||||||
|  |             plot.setTooltipPosition(pos); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          *  open the tooltip (if not already open) and freeze it on the current position till the next click | ||||||
|  |          */ | ||||||
|  |         function plotclick(event, pos, item) { | ||||||
|  |             if (! that.clickmode) { | ||||||
|  |                 // it is the click activating the clicktip | ||||||
|  |                 plothover(event, pos, item); | ||||||
|  |                 if (that.getDomElement().is(":visible")) { | ||||||
|  |                     $(plot.getPlaceholder()).unbind("plothover", plothover); | ||||||
|  |                     that.clickmode = true; | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 // it is the click deactivating the clicktip | ||||||
|  |                 $( plot.getPlaceholder() ).bind("plothover", plothover); | ||||||
|  |                 plot.hideTooltip(); | ||||||
|  |                 that.clickmode = false; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function plothover(event, pos, item) { | ||||||
|  |             // Simple distance formula. | ||||||
|  |             var lineDistance = function (p1x, p1y, p2x, p2y) { | ||||||
|  |                 return Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y)); | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // Here is some voodoo magic for determining the distance to a line form a given point {x, y}. | ||||||
|  |             var dotLineLength = function (x, y, x0, y0, x1, y1, o) { | ||||||
|  |                 if (o && !(o = | ||||||
|  |                     function (x, y, x0, y0, x1, y1) { | ||||||
|  |                         if (typeof x0 !== 'undefined') return { x: x0, y: y }; | ||||||
|  |                         else if (typeof y0 !== 'undefined') return { x: x, y: y0 }; | ||||||
|  |  | ||||||
|  |                         var left, | ||||||
|  |                             tg = -1 / ((y1 - y0) / (x1 - x0)); | ||||||
|  |  | ||||||
|  |                         return { | ||||||
|  |                             x: left = (x1 * (x * tg - y + y0) + x0 * (x * -tg + y - y1)) / (tg * (x1 - x0) + y0 - y1), | ||||||
|  |                             y: tg * left - tg * x + y | ||||||
|  |                         }; | ||||||
|  |                     } (x, y, x0, y0, x1, y1), | ||||||
|  |                     o.x >= Math.min(x0, x1) && o.x <= Math.max(x0, x1) && o.y >= Math.min(y0, y1) && o.y <= Math.max(y0, y1)) | ||||||
|  |                 ) { | ||||||
|  |                     var l1 = lineDistance(x, y, x0, y0), l2 = lineDistance(x, y, x1, y1); | ||||||
|  |                     return l1 > l2 ? l2 : l1; | ||||||
|  |                 } else { | ||||||
|  |                     var a = y0 - y1, b = x1 - x0, c = x0 * y1 - y0 * x1; | ||||||
|  |                     return Math.abs(a * x + b * y + c) / Math.sqrt(a * a + b * b); | ||||||
|  |                 } | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             if (item) { | ||||||
|  |                 plot.showTooltip(item, that.tooltipOptions.snap ? item : pos); | ||||||
|  |             } else if (that.plotOptions.series.lines.show && that.tooltipOptions.lines === true) { | ||||||
|  |                 var maxDistance = that.plotOptions.grid.mouseActiveRadius; | ||||||
|  |  | ||||||
|  |                 var closestTrace = { | ||||||
|  |                     distance: maxDistance + 1 | ||||||
|  |                 }; | ||||||
|  |  | ||||||
|  |                 var ttPos = pos; | ||||||
|  |  | ||||||
|  |                 $.each(plot.getData(), function (i, series) { | ||||||
|  |                     var xBeforeIndex = 0, | ||||||
|  |                         xAfterIndex = -1; | ||||||
|  |  | ||||||
|  |                     // Our search here assumes our data is sorted via the x-axis. | ||||||
|  |                     // TODO: Improve efficiency somehow - search smaller sets of data. | ||||||
|  |                     for (var j = 1; j < series.data.length; j++) { | ||||||
|  |                         if (series.data[j - 1][0] <= pos.x && series.data[j][0] >= pos.x) { | ||||||
|  |                             xBeforeIndex = j - 1; | ||||||
|  |                             xAfterIndex = j; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     if (xAfterIndex === -1) { | ||||||
|  |                         plot.hideTooltip(); | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     var pointPrev = { x: series.data[xBeforeIndex][0], y: series.data[xBeforeIndex][1] }, | ||||||
|  |                         pointNext = { x: series.data[xAfterIndex][0], y: series.data[xAfterIndex][1] }; | ||||||
|  |  | ||||||
|  |                     var distToLine = dotLineLength(series.xaxis.p2c(pos.x), series.yaxis.p2c(pos.y), series.xaxis.p2c(pointPrev.x), | ||||||
|  |                         series.yaxis.p2c(pointPrev.y), series.xaxis.p2c(pointNext.x), series.yaxis.p2c(pointNext.y), false); | ||||||
|  |  | ||||||
|  |                     if (distToLine < closestTrace.distance) { | ||||||
|  |  | ||||||
|  |                         var closestIndex = lineDistance(pointPrev.x, pointPrev.y, pos.x, pos.y) < | ||||||
|  |                             lineDistance(pos.x, pos.y, pointNext.x, pointNext.y) ? xBeforeIndex : xAfterIndex; | ||||||
|  |  | ||||||
|  |                         var pointSize = series.datapoints.pointsize; | ||||||
|  |  | ||||||
|  |                         // Calculate the point on the line vertically closest to our cursor. | ||||||
|  |                         var pointOnLine = [ | ||||||
|  |                             pos.x, | ||||||
|  |                             pointPrev.y + ((pointNext.y - pointPrev.y) * ((pos.x - pointPrev.x) / (pointNext.x - pointPrev.x))) | ||||||
|  |                         ]; | ||||||
|  |  | ||||||
|  |                         var item = { | ||||||
|  |                             datapoint: pointOnLine, | ||||||
|  |                             dataIndex: closestIndex, | ||||||
|  |                             series: series, | ||||||
|  |                             seriesIndex: i | ||||||
|  |                         }; | ||||||
|  |  | ||||||
|  |                         closestTrace = { | ||||||
|  |                             distance: distToLine, | ||||||
|  |                             item: item | ||||||
|  |                         }; | ||||||
|  |  | ||||||
|  |                         if (that.tooltipOptions.snap) { | ||||||
|  |                             ttPos = { | ||||||
|  |                                 pageX: series.xaxis.p2c(pointOnLine[0]), | ||||||
|  |                                 pageY: series.yaxis.p2c(pointOnLine[1]) | ||||||
|  |                             }; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |                 if (closestTrace.distance < maxDistance + 1) | ||||||
|  |                     plot.showTooltip(closestTrace.item, ttPos); | ||||||
|  |                 else | ||||||
|  |                     plot.hideTooltip(); | ||||||
|  |             } else { | ||||||
|  |                 plot.hideTooltip(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Quick little function for setting the tooltip position. | ||||||
|  |         plot.setTooltipPosition = function (pos) { | ||||||
|  |             var $tip = that.getDomElement(); | ||||||
|  |  | ||||||
|  |             var totalTipWidth = $tip.outerWidth() + that.tooltipOptions.shifts.x; | ||||||
|  |             var totalTipHeight = $tip.outerHeight() + that.tooltipOptions.shifts.y; | ||||||
|  |             if ((pos.x - $(window).scrollLeft()) > ($(window)[that.wfunc]() - totalTipWidth)) { | ||||||
|  |                 pos.x -= totalTipWidth; | ||||||
|  |             } | ||||||
|  |             if ((pos.y - $(window).scrollTop()) > ($(window)[that.hfunc]() - totalTipHeight)) { | ||||||
|  |                 pos.y -= totalTipHeight; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  | 	    /*  | ||||||
|  | 	       The section applies the new positioning ONLY if pos.x and pos.y | ||||||
|  | 	       are numbers. If they are undefined or not a number, use the last | ||||||
|  | 	       known numerical position. This hack fixes a bug that kept pie  | ||||||
|  | 	       charts from keeping their tooltip positioning. | ||||||
|  | 	     */ | ||||||
|  | 	     | ||||||
|  |             if (isNaN(pos.x)) { | ||||||
|  | 		that.tipPosition.x = that.tipPosition.xPrev; | ||||||
|  | 	    } | ||||||
|  | 	    else { | ||||||
|  | 		that.tipPosition.x = pos.x; | ||||||
|  | 		that.tipPosition.xPrev = pos.x; | ||||||
|  | 	    } | ||||||
|  | 	    if (isNaN(pos.y)) { | ||||||
|  | 		that.tipPosition.y = that.tipPosition.yPrev; | ||||||
|  | 	    } | ||||||
|  | 	    else { | ||||||
|  | 		that.tipPosition.y = pos.y; | ||||||
|  | 		that.tipPosition.yPrev = pos.y; | ||||||
|  | 	    } | ||||||
|  | 	     | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         // Quick little function for showing the tooltip. | ||||||
|  |         plot.showTooltip = function (target, position, targetPosition) { | ||||||
|  |             var $tip = that.getDomElement(); | ||||||
|  |  | ||||||
|  |             // convert tooltip content template to real tipText | ||||||
|  |             var tipText = that.stringFormat(that.tooltipOptions.content, target); | ||||||
|  |             if (tipText === '') | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             $tip.html(tipText); | ||||||
|  |             plot.setTooltipPosition({ x: position.pageX, y: position.pageY }); | ||||||
|  |             $tip.css({ | ||||||
|  |                 left: that.tipPosition.x + that.tooltipOptions.shifts.x, | ||||||
|  |                 top: that.tipPosition.y + that.tooltipOptions.shifts.y | ||||||
|  |             }).show(); | ||||||
|  |  | ||||||
|  |             // run callback | ||||||
|  |             if (typeof that.tooltipOptions.onHover === 'function') { | ||||||
|  |                 that.tooltipOptions.onHover(target, $tip); | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         // Quick little function for hiding the tooltip. | ||||||
|  |         plot.hideTooltip = function () { | ||||||
|  |             that.getDomElement().hide().html(''); | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         plot.removeTooltip = function() { | ||||||
|  |             that.getDomElement().remove(); | ||||||
|  |         }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * get or create tooltip DOM element | ||||||
|  |      * @return jQuery object | ||||||
|  |      */ | ||||||
|  |     FlotTooltip.prototype.getDomElement = function () { | ||||||
|  |         var $tip = $('<div>'); | ||||||
|  |         if (this.tooltipOptions && this.tooltipOptions.cssClass) { | ||||||
|  |             $tip = $('.' + this.tooltipOptions.cssClass); | ||||||
|  |  | ||||||
|  |             if( $tip.length === 0 ){ | ||||||
|  |                 $tip = $('<div />').addClass(this.tooltipOptions.cssClass); | ||||||
|  |                 $tip.appendTo('body').hide().css({position: 'absolute'}); | ||||||
|  |      | ||||||
|  |                 if(this.tooltipOptions.defaultTheme) { | ||||||
|  |                     $tip.css({ | ||||||
|  |                         'background': '#fff', | ||||||
|  |                         'z-index': '1040', | ||||||
|  |                         'padding': '0.4em 0.6em', | ||||||
|  |                         'border-radius': '0.5em', | ||||||
|  |                         'font-size': '0.8em', | ||||||
|  |                         'border': '1px solid #111', | ||||||
|  |                         'display': 'none', | ||||||
|  |                         'white-space': 'nowrap' | ||||||
|  |                     }); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return $tip; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * core function, create tooltip content | ||||||
|  |      * @param  {string} content - template with tooltip content | ||||||
|  |      * @param  {object} item - Flot item | ||||||
|  |      * @return {string} real tooltip content for current item | ||||||
|  |      */ | ||||||
|  |     FlotTooltip.prototype.stringFormat = function (content, item) { | ||||||
|  |         var percentPattern = /%p\.{0,1}(\d{0,})/; | ||||||
|  |         var seriesPattern = /%s/; | ||||||
|  |         var colorPattern = /%c/; | ||||||
|  |         var xLabelPattern = /%lx/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded | ||||||
|  |         var yLabelPattern = /%ly/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded | ||||||
|  |         var xPattern = /%x\.{0,1}(\d{0,})/; | ||||||
|  |         var yPattern = /%y\.{0,1}(\d{0,})/; | ||||||
|  |         var xPatternWithoutPrecision = "%x"; | ||||||
|  |         var yPatternWithoutPrecision = "%y"; | ||||||
|  |         var customTextPattern = "%ct"; | ||||||
|  | 	var nPiePattern = "%n"; | ||||||
|  | 	 | ||||||
|  |         var x, y, customText, p, n; | ||||||
|  |  | ||||||
|  |         // for threshold plugin we need to read data from different place | ||||||
|  |         if (typeof item.series.threshold !== "undefined") { | ||||||
|  |             x = item.datapoint[0]; | ||||||
|  |             y = item.datapoint[1]; | ||||||
|  |             customText = item.datapoint[2]; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// for CurvedLines plugin we need to read data from different place | ||||||
|  | 	    else if (typeof item.series.curvedLines !== "undefined") { | ||||||
|  | 		x = item.datapoint[0]; | ||||||
|  | 		y = item.datapoint[1]; | ||||||
|  | 	    } | ||||||
|  | 	     | ||||||
|  |         else if (typeof item.series.lines !== "undefined" && item.series.lines.steps) { | ||||||
|  |             x = item.series.datapoints.points[item.dataIndex * 2]; | ||||||
|  |             y = item.series.datapoints.points[item.dataIndex * 2 + 1]; | ||||||
|  |             // TODO: where to find custom text in this variant? | ||||||
|  |             customText = ""; | ||||||
|  |         } else { | ||||||
|  |             x = item.series.data[item.dataIndex][0]; | ||||||
|  |             y = item.series.data[item.dataIndex][1]; | ||||||
|  |             customText = item.series.data[item.dataIndex][2]; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // I think this is only in case of threshold plugin | ||||||
|  |         if (item.series.label === null && item.series.originSeries) { | ||||||
|  |             item.series.label = item.series.originSeries.label; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // if it is a function callback get the content string | ||||||
|  |         if (typeof(content) === 'function') { | ||||||
|  |             content = content(item.series.label, x, y, item); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // the case where the passed content is equal to false | ||||||
|  |         if (typeof(content) === 'boolean' && !content) { | ||||||
|  |             return ''; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  | 	/* replacement of %ct and other multi-character templates must | ||||||
|  | 	   precede the replacement of single-character templates  | ||||||
|  | 	   to avoid conflict between '%c' and '%ct'  and similar substrings | ||||||
|  | 	*/ | ||||||
|  | 	if (customText) | ||||||
|  |             content = content.replace(customTextPattern, customText); | ||||||
|  |  | ||||||
|  |         // percent match for pie charts and stacked percent | ||||||
|  |         if (typeof (item.series.percent) !== 'undefined') { | ||||||
|  |             p = item.series.percent; | ||||||
|  |         } else if (typeof (item.series.percents) !== 'undefined') { | ||||||
|  |             p = item.series.percents[item.dataIndex]; | ||||||
|  |         }         | ||||||
|  |         if (typeof p === 'number') { | ||||||
|  |             content = this.adjustValPrecision(percentPattern, content, p); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  | 	// replace %n with number of items represented by slice in pie charts | ||||||
|  | 	if (item.series.hasOwnProperty('pie')) { | ||||||
|  | 	    if (typeof (item.series.data[0][1] !== 'undefined')) { | ||||||
|  | 		n = item.series.data[0][1]; | ||||||
|  | 	    } | ||||||
|  | 	} | ||||||
|  | 	if (typeof n === 'number') { | ||||||
|  |             content = content.replace(nPiePattern, n); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  |         // series match | ||||||
|  |         if (typeof(item.series.label) !== 'undefined') { | ||||||
|  |             content = content.replace(seriesPattern, item.series.label); | ||||||
|  |         } else { | ||||||
|  |             //remove %s if label is undefined | ||||||
|  |             content = content.replace(seriesPattern, ""); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         // color match | ||||||
|  |         if (typeof(item.series.color) !== 'undefined') { | ||||||
|  |             content = content.replace(colorPattern, item.series.color); | ||||||
|  |         } else { | ||||||
|  |             //remove %s if color is undefined | ||||||
|  |             content = content.replace(colorPattern, ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // x axis label match | ||||||
|  |         if (this.hasAxisLabel('xaxis', item)) { | ||||||
|  |             content = content.replace(xLabelPattern, item.series.xaxis.options.axisLabel); | ||||||
|  |         } else { | ||||||
|  |             //remove %lx if axis label is undefined or axislabels plugin not present | ||||||
|  |             content = content.replace(xLabelPattern, ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // y axis label match | ||||||
|  |         if (this.hasAxisLabel('yaxis', item)) { | ||||||
|  |             content = content.replace(yLabelPattern, item.series.yaxis.options.axisLabel); | ||||||
|  |         } else { | ||||||
|  |             //remove %ly if axis label is undefined or axislabels plugin not present | ||||||
|  |             content = content.replace(yLabelPattern, ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // time mode axes with custom dateFormat | ||||||
|  |         if (this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) { | ||||||
|  |             content = content.replace(xPattern, this.timestampToDate(x, this.tooltipOptions.xDateFormat, item.series.xaxis.options)); | ||||||
|  |         } | ||||||
|  |         if (this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) { | ||||||
|  |             content = content.replace(yPattern, this.timestampToDate(y, this.tooltipOptions.yDateFormat, item.series.yaxis.options)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // set precision if defined | ||||||
|  |         if (typeof x === 'number') { | ||||||
|  |             content = this.adjustValPrecision(xPattern, content, x); | ||||||
|  |         } | ||||||
|  |         if (typeof y === 'number') { | ||||||
|  |             content = this.adjustValPrecision(yPattern, content, y); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // change x from number to given label, if given | ||||||
|  |         if (typeof item.series.xaxis.ticks !== 'undefined') { | ||||||
|  |  | ||||||
|  |             var ticks; | ||||||
|  |             if (this.hasRotatedXAxisTicks(item)) { | ||||||
|  |                 // xaxis.ticks will be an empty array if tickRotor is being used, but the values are available in rotatedTicks | ||||||
|  |                 ticks = 'rotatedTicks'; | ||||||
|  |             } else { | ||||||
|  |                 ticks = 'ticks'; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // see https://github.com/krzysu/flot.tooltip/issues/65 | ||||||
|  |             var tickIndex = item.dataIndex + item.seriesIndex; | ||||||
|  |  | ||||||
|  |             for (var xIndex in item.series.xaxis[ticks]) { | ||||||
|  |                 if (item.series.xaxis[ticks].hasOwnProperty(tickIndex) && !this.isTimeMode('xaxis', item)) { | ||||||
|  |                     var valueX = (this.isCategoriesMode('xaxis', item)) ? item.series.xaxis[ticks][tickIndex].label : item.series.xaxis[ticks][tickIndex].v; | ||||||
|  |                     if (valueX === x) { | ||||||
|  |                         content = content.replace(xPattern, item.series.xaxis[ticks][tickIndex].label.replace(/\$/g, '$$$$')); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // change y from number to given label, if given | ||||||
|  |         if (typeof item.series.yaxis.ticks !== 'undefined') { | ||||||
|  |             for (var yIndex in item.series.yaxis.ticks) { | ||||||
|  |                 if (item.series.yaxis.ticks.hasOwnProperty(yIndex)) { | ||||||
|  |                     var valueY = (this.isCategoriesMode('yaxis', item)) ? item.series.yaxis.ticks[yIndex].label : item.series.yaxis.ticks[yIndex].v; | ||||||
|  |                     if (valueY === y) { | ||||||
|  |                         content = content.replace(yPattern, item.series.yaxis.ticks[yIndex].label.replace(/\$/g, '$$$$')); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // if no value customization, use tickFormatter by default | ||||||
|  |         if (typeof item.series.xaxis.tickFormatter !== 'undefined') { | ||||||
|  |             //escape dollar | ||||||
|  |             content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$')); | ||||||
|  |         } | ||||||
|  |         if (typeof item.series.yaxis.tickFormatter !== 'undefined') { | ||||||
|  |             //escape dollar | ||||||
|  |             content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$')); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return content; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // helpers just for readability | ||||||
|  |     FlotTooltip.prototype.isTimeMode = function (axisName, item) { | ||||||
|  |         return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time'); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     FlotTooltip.prototype.isXDateFormat = function (item) { | ||||||
|  |         return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     FlotTooltip.prototype.isYDateFormat = function (item) { | ||||||
|  |         return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     FlotTooltip.prototype.isCategoriesMode = function (axisName, item) { | ||||||
|  |         return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'categories'); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // | ||||||
|  |     FlotTooltip.prototype.timestampToDate = function (tmst, dateFormat, options) { | ||||||
|  |         var theDate = $.plot.dateGenerator(tmst, options); | ||||||
|  |         return $.plot.formatDate(theDate, dateFormat, this.tooltipOptions.monthNames, this.tooltipOptions.dayNames); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // | ||||||
|  |     FlotTooltip.prototype.adjustValPrecision = function (pattern, content, value) { | ||||||
|  |  | ||||||
|  |         var precision; | ||||||
|  |         var matchResult = content.match(pattern); | ||||||
|  |         if( matchResult !== null ) { | ||||||
|  |             if(RegExp.$1 !== '') { | ||||||
|  |                 precision = RegExp.$1; | ||||||
|  |                 value = value.toFixed(precision); | ||||||
|  |  | ||||||
|  |                 // only replace content if precision exists, in other case use thickformater | ||||||
|  |                 content = content.replace(pattern, value); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return content; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // other plugins detection below | ||||||
|  |  | ||||||
|  |     // check if flot-axislabels plugin (https://github.com/markrcote/flot-axislabels) is used and that an axis label is given | ||||||
|  |     FlotTooltip.prototype.hasAxisLabel = function (axisName, item) { | ||||||
|  |         return ($.inArray('axisLabels', this.plotPlugins) !== -1 && typeof item.series[axisName].options.axisLabel !== 'undefined' && item.series[axisName].options.axisLabel.length > 0); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // check whether flot-tickRotor, a plugin which allows rotation of X-axis ticks, is being used | ||||||
|  |     FlotTooltip.prototype.hasRotatedXAxisTicks = function (item) { | ||||||
|  |         return ($.inArray('tickRotor',this.plotPlugins) !== -1 && typeof item.series.xaxis.rotatedTicks !== 'undefined'); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // | ||||||
|  |     var init = function (plot) { | ||||||
|  |       new FlotTooltip(plot); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // define Flot plugin | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: defaultOptions, | ||||||
|  |         name: 'tooltip', | ||||||
|  |         version: '0.8.5' | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										12
									
								
								static/vendor/flot-tooltip/jquery.flot.tooltip.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										593
									
								
								static/vendor/flot-tooltip/jquery.flot.tooltip.source.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,593 @@ | |||||||
|  | (function ($) { | ||||||
|  |     // plugin options, default values | ||||||
|  |     var defaultOptions = { | ||||||
|  |         tooltip: { | ||||||
|  |             show: false, | ||||||
|  |             cssClass: "flotTip", | ||||||
|  |             content: "%s | X: %x | Y: %y", | ||||||
|  |             // allowed templates are: | ||||||
|  |             // %s -> series label, | ||||||
|  |             // %c -> series color, | ||||||
|  |             // %lx -> x axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels), | ||||||
|  |             // %ly -> y axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels), | ||||||
|  |             // %x -> X value, | ||||||
|  |             // %y -> Y value, | ||||||
|  |             // %x.2 -> precision of X value, | ||||||
|  |             // %p -> percent | ||||||
|  | 	    // %n -> value (not percent) of pie chart | ||||||
|  |             xDateFormat: null, | ||||||
|  |             yDateFormat: null, | ||||||
|  |             monthNames: null, | ||||||
|  |             dayNames: null, | ||||||
|  |             shifts: { | ||||||
|  |                 x: 10, | ||||||
|  |                 y: 20 | ||||||
|  |             }, | ||||||
|  |             defaultTheme: true, | ||||||
|  |             snap: true, | ||||||
|  |             lines: false, | ||||||
|  |             clickTips: false, | ||||||
|  |  | ||||||
|  |             // callbacks | ||||||
|  |             onHover: function (flotItem, $tooltipEl) {}, | ||||||
|  |  | ||||||
|  |             $compat: false | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // dummy default options object for legacy code (<0.8.5) - is deleted later | ||||||
|  |     defaultOptions.tooltipOpts = defaultOptions.tooltip; | ||||||
|  |  | ||||||
|  |     // object | ||||||
|  |     var FlotTooltip = function (plot) { | ||||||
|  |         // variables | ||||||
|  |         this.tipPosition = {x: 0, y: 0}; | ||||||
|  |  | ||||||
|  |         this.init(plot); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // main plugin function | ||||||
|  |     FlotTooltip.prototype.init = function (plot) { | ||||||
|  |         var that = this; | ||||||
|  |  | ||||||
|  |         // detect other flot plugins | ||||||
|  |         var plotPluginsLength = $.plot.plugins.length; | ||||||
|  |         this.plotPlugins = []; | ||||||
|  |  | ||||||
|  |         if (plotPluginsLength) { | ||||||
|  |             for (var p = 0; p < plotPluginsLength; p++) { | ||||||
|  |                 this.plotPlugins.push($.plot.plugins[p].name); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         plot.hooks.bindEvents.push(function (plot, eventHolder) { | ||||||
|  |  | ||||||
|  |             // get plot options | ||||||
|  |             that.plotOptions = plot.getOptions(); | ||||||
|  |  | ||||||
|  |             // for legacy (<0.8.5) implementations | ||||||
|  |             if (typeof(that.plotOptions.tooltip) === 'boolean') { | ||||||
|  |                 that.plotOptions.tooltipOpts.show = that.plotOptions.tooltip; | ||||||
|  |                 that.plotOptions.tooltip = that.plotOptions.tooltipOpts; | ||||||
|  |                 delete that.plotOptions.tooltipOpts; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // if not enabled return | ||||||
|  |             if (that.plotOptions.tooltip.show === false || typeof that.plotOptions.tooltip.show === 'undefined') return; | ||||||
|  |  | ||||||
|  |             // shortcut to access tooltip options | ||||||
|  |             that.tooltipOptions = that.plotOptions.tooltip; | ||||||
|  |  | ||||||
|  |             if (that.tooltipOptions.$compat) { | ||||||
|  |                 that.wfunc = 'width'; | ||||||
|  |                 that.hfunc = 'height'; | ||||||
|  |             } else { | ||||||
|  |                 that.wfunc = 'innerWidth'; | ||||||
|  |                 that.hfunc = 'innerHeight'; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // create tooltip DOM element | ||||||
|  |             var $tip = that.getDomElement(); | ||||||
|  |  | ||||||
|  |             // bind event | ||||||
|  |             $( plot.getPlaceholder() ).bind("plothover", plothover); | ||||||
|  |             if (that.tooltipOptions.clickTips) { | ||||||
|  |                 $( plot.getPlaceholder() ).bind("plotclick", plotclick); | ||||||
|  |             } | ||||||
|  |             that.clickmode = false; | ||||||
|  |  | ||||||
|  |             $(eventHolder).bind('mousemove', mouseMove); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         plot.hooks.shutdown.push(function (plot, eventHolder){ | ||||||
|  |             $(plot.getPlaceholder()).unbind("plothover", plothover); | ||||||
|  |             $(plot.getPlaceholder()).unbind("plotclick", plotclick); | ||||||
|  |             plot.removeTooltip(); | ||||||
|  |             $(eventHolder).unbind("mousemove", mouseMove); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         function mouseMove(e){ | ||||||
|  |             var pos = {}; | ||||||
|  |             pos.x = e.pageX; | ||||||
|  |             pos.y = e.pageY; | ||||||
|  |             plot.setTooltipPosition(pos); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          *  open the tooltip (if not already open) and freeze it on the current position till the next click | ||||||
|  |          */ | ||||||
|  |         function plotclick(event, pos, item) { | ||||||
|  |             if (! that.clickmode) { | ||||||
|  |                 // it is the click activating the clicktip | ||||||
|  |                 plothover(event, pos, item); | ||||||
|  |                 if (that.getDomElement().is(":visible")) { | ||||||
|  |                     $(plot.getPlaceholder()).unbind("plothover", plothover); | ||||||
|  |                     that.clickmode = true; | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 // it is the click deactivating the clicktip | ||||||
|  |                 $( plot.getPlaceholder() ).bind("plothover", plothover); | ||||||
|  |                 plot.hideTooltip(); | ||||||
|  |                 that.clickmode = false; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function plothover(event, pos, item) { | ||||||
|  |             // Simple distance formula. | ||||||
|  |             var lineDistance = function (p1x, p1y, p2x, p2y) { | ||||||
|  |                 return Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y)); | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // Here is some voodoo magic for determining the distance to a line form a given point {x, y}. | ||||||
|  |             var dotLineLength = function (x, y, x0, y0, x1, y1, o) { | ||||||
|  |                 if (o && !(o = | ||||||
|  |                     function (x, y, x0, y0, x1, y1) { | ||||||
|  |                         if (typeof x0 !== 'undefined') return { x: x0, y: y }; | ||||||
|  |                         else if (typeof y0 !== 'undefined') return { x: x, y: y0 }; | ||||||
|  |  | ||||||
|  |                         var left, | ||||||
|  |                             tg = -1 / ((y1 - y0) / (x1 - x0)); | ||||||
|  |  | ||||||
|  |                         return { | ||||||
|  |                             x: left = (x1 * (x * tg - y + y0) + x0 * (x * -tg + y - y1)) / (tg * (x1 - x0) + y0 - y1), | ||||||
|  |                             y: tg * left - tg * x + y | ||||||
|  |                         }; | ||||||
|  |                     } (x, y, x0, y0, x1, y1), | ||||||
|  |                     o.x >= Math.min(x0, x1) && o.x <= Math.max(x0, x1) && o.y >= Math.min(y0, y1) && o.y <= Math.max(y0, y1)) | ||||||
|  |                 ) { | ||||||
|  |                     var l1 = lineDistance(x, y, x0, y0), l2 = lineDistance(x, y, x1, y1); | ||||||
|  |                     return l1 > l2 ? l2 : l1; | ||||||
|  |                 } else { | ||||||
|  |                     var a = y0 - y1, b = x1 - x0, c = x0 * y1 - y0 * x1; | ||||||
|  |                     return Math.abs(a * x + b * y + c) / Math.sqrt(a * a + b * b); | ||||||
|  |                 } | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             if (item) { | ||||||
|  |                 plot.showTooltip(item, that.tooltipOptions.snap ? item : pos); | ||||||
|  |             } else if (that.plotOptions.series.lines.show && that.tooltipOptions.lines === true) { | ||||||
|  |                 var maxDistance = that.plotOptions.grid.mouseActiveRadius; | ||||||
|  |  | ||||||
|  |                 var closestTrace = { | ||||||
|  |                     distance: maxDistance + 1 | ||||||
|  |                 }; | ||||||
|  |  | ||||||
|  |                 var ttPos = pos; | ||||||
|  |  | ||||||
|  |                 $.each(plot.getData(), function (i, series) { | ||||||
|  |                     var xBeforeIndex = 0, | ||||||
|  |                         xAfterIndex = -1; | ||||||
|  |  | ||||||
|  |                     // Our search here assumes our data is sorted via the x-axis. | ||||||
|  |                     // TODO: Improve efficiency somehow - search smaller sets of data. | ||||||
|  |                     for (var j = 1; j < series.data.length; j++) { | ||||||
|  |                         if (series.data[j - 1][0] <= pos.x && series.data[j][0] >= pos.x) { | ||||||
|  |                             xBeforeIndex = j - 1; | ||||||
|  |                             xAfterIndex = j; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     if (xAfterIndex === -1) { | ||||||
|  |                         plot.hideTooltip(); | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     var pointPrev = { x: series.data[xBeforeIndex][0], y: series.data[xBeforeIndex][1] }, | ||||||
|  |                         pointNext = { x: series.data[xAfterIndex][0], y: series.data[xAfterIndex][1] }; | ||||||
|  |  | ||||||
|  |                     var distToLine = dotLineLength(series.xaxis.p2c(pos.x), series.yaxis.p2c(pos.y), series.xaxis.p2c(pointPrev.x), | ||||||
|  |                         series.yaxis.p2c(pointPrev.y), series.xaxis.p2c(pointNext.x), series.yaxis.p2c(pointNext.y), false); | ||||||
|  |  | ||||||
|  |                     if (distToLine < closestTrace.distance) { | ||||||
|  |  | ||||||
|  |                         var closestIndex = lineDistance(pointPrev.x, pointPrev.y, pos.x, pos.y) < | ||||||
|  |                             lineDistance(pos.x, pos.y, pointNext.x, pointNext.y) ? xBeforeIndex : xAfterIndex; | ||||||
|  |  | ||||||
|  |                         var pointSize = series.datapoints.pointsize; | ||||||
|  |  | ||||||
|  |                         // Calculate the point on the line vertically closest to our cursor. | ||||||
|  |                         var pointOnLine = [ | ||||||
|  |                             pos.x, | ||||||
|  |                             pointPrev.y + ((pointNext.y - pointPrev.y) * ((pos.x - pointPrev.x) / (pointNext.x - pointPrev.x))) | ||||||
|  |                         ]; | ||||||
|  |  | ||||||
|  |                         var item = { | ||||||
|  |                             datapoint: pointOnLine, | ||||||
|  |                             dataIndex: closestIndex, | ||||||
|  |                             series: series, | ||||||
|  |                             seriesIndex: i | ||||||
|  |                         }; | ||||||
|  |  | ||||||
|  |                         closestTrace = { | ||||||
|  |                             distance: distToLine, | ||||||
|  |                             item: item | ||||||
|  |                         }; | ||||||
|  |  | ||||||
|  |                         if (that.tooltipOptions.snap) { | ||||||
|  |                             ttPos = { | ||||||
|  |                                 pageX: series.xaxis.p2c(pointOnLine[0]), | ||||||
|  |                                 pageY: series.yaxis.p2c(pointOnLine[1]) | ||||||
|  |                             }; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |                 if (closestTrace.distance < maxDistance + 1) | ||||||
|  |                     plot.showTooltip(closestTrace.item, ttPos); | ||||||
|  |                 else | ||||||
|  |                     plot.hideTooltip(); | ||||||
|  |             } else { | ||||||
|  |                 plot.hideTooltip(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Quick little function for setting the tooltip position. | ||||||
|  |         plot.setTooltipPosition = function (pos) { | ||||||
|  |             var $tip = that.getDomElement(); | ||||||
|  |  | ||||||
|  |             var totalTipWidth = $tip.outerWidth() + that.tooltipOptions.shifts.x; | ||||||
|  |             var totalTipHeight = $tip.outerHeight() + that.tooltipOptions.shifts.y; | ||||||
|  |             if ((pos.x - $(window).scrollLeft()) > ($(window)[that.wfunc]() - totalTipWidth)) { | ||||||
|  |                 pos.x -= totalTipWidth; | ||||||
|  |             } | ||||||
|  |             if ((pos.y - $(window).scrollTop()) > ($(window)[that.hfunc]() - totalTipHeight)) { | ||||||
|  |                 pos.y -= totalTipHeight; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  | 	    /*  | ||||||
|  | 	       The section applies the new positioning ONLY if pos.x and pos.y | ||||||
|  | 	       are numbers. If they are undefined or not a number, use the last | ||||||
|  | 	       known numerical position. This hack fixes a bug that kept pie  | ||||||
|  | 	       charts from keeping their tooltip positioning. | ||||||
|  | 	     */ | ||||||
|  | 	     | ||||||
|  |             if (isNaN(pos.x)) { | ||||||
|  | 		that.tipPosition.x = that.tipPosition.xPrev; | ||||||
|  | 	    } | ||||||
|  | 	    else { | ||||||
|  | 		that.tipPosition.x = pos.x; | ||||||
|  | 		that.tipPosition.xPrev = pos.x; | ||||||
|  | 	    } | ||||||
|  | 	    if (isNaN(pos.y)) { | ||||||
|  | 		that.tipPosition.y = that.tipPosition.yPrev; | ||||||
|  | 	    } | ||||||
|  | 	    else { | ||||||
|  | 		that.tipPosition.y = pos.y; | ||||||
|  | 		that.tipPosition.yPrev = pos.y; | ||||||
|  | 	    } | ||||||
|  | 	     | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         // Quick little function for showing the tooltip. | ||||||
|  |         plot.showTooltip = function (target, position, targetPosition) { | ||||||
|  |             var $tip = that.getDomElement(); | ||||||
|  |  | ||||||
|  |             // convert tooltip content template to real tipText | ||||||
|  |             var tipText = that.stringFormat(that.tooltipOptions.content, target); | ||||||
|  |             if (tipText === '') | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             $tip.html(tipText); | ||||||
|  |             plot.setTooltipPosition({ x: position.pageX, y: position.pageY }); | ||||||
|  |             $tip.css({ | ||||||
|  |                 left: that.tipPosition.x + that.tooltipOptions.shifts.x, | ||||||
|  |                 top: that.tipPosition.y + that.tooltipOptions.shifts.y | ||||||
|  |             }).show(); | ||||||
|  |  | ||||||
|  |             // run callback | ||||||
|  |             if (typeof that.tooltipOptions.onHover === 'function') { | ||||||
|  |                 that.tooltipOptions.onHover(target, $tip); | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         // Quick little function for hiding the tooltip. | ||||||
|  |         plot.hideTooltip = function () { | ||||||
|  |             that.getDomElement().hide().html(''); | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         plot.removeTooltip = function() { | ||||||
|  |             that.getDomElement().remove(); | ||||||
|  |         }; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * get or create tooltip DOM element | ||||||
|  |      * @return jQuery object | ||||||
|  |      */ | ||||||
|  |     FlotTooltip.prototype.getDomElement = function () { | ||||||
|  |         var $tip = $('<div>'); | ||||||
|  |         if (this.tooltipOptions && this.tooltipOptions.cssClass) { | ||||||
|  |             $tip = $('.' + this.tooltipOptions.cssClass); | ||||||
|  |  | ||||||
|  |             if( $tip.length === 0 ){ | ||||||
|  |                 $tip = $('<div />').addClass(this.tooltipOptions.cssClass); | ||||||
|  |                 $tip.appendTo('body').hide().css({position: 'absolute'}); | ||||||
|  |      | ||||||
|  |                 if(this.tooltipOptions.defaultTheme) { | ||||||
|  |                     $tip.css({ | ||||||
|  |                         'background': '#fff', | ||||||
|  |                         'z-index': '1040', | ||||||
|  |                         'padding': '0.4em 0.6em', | ||||||
|  |                         'border-radius': '0.5em', | ||||||
|  |                         'font-size': '0.8em', | ||||||
|  |                         'border': '1px solid #111', | ||||||
|  |                         'display': 'none', | ||||||
|  |                         'white-space': 'nowrap' | ||||||
|  |                     }); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return $tip; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * core function, create tooltip content | ||||||
|  |      * @param  {string} content - template with tooltip content | ||||||
|  |      * @param  {object} item - Flot item | ||||||
|  |      * @return {string} real tooltip content for current item | ||||||
|  |      */ | ||||||
|  |     FlotTooltip.prototype.stringFormat = function (content, item) { | ||||||
|  |         var percentPattern = /%p\.{0,1}(\d{0,})/; | ||||||
|  |         var seriesPattern = /%s/; | ||||||
|  |         var colorPattern = /%c/; | ||||||
|  |         var xLabelPattern = /%lx/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded | ||||||
|  |         var yLabelPattern = /%ly/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded | ||||||
|  |         var xPattern = /%x\.{0,1}(\d{0,})/; | ||||||
|  |         var yPattern = /%y\.{0,1}(\d{0,})/; | ||||||
|  |         var xPatternWithoutPrecision = "%x"; | ||||||
|  |         var yPatternWithoutPrecision = "%y"; | ||||||
|  |         var customTextPattern = "%ct"; | ||||||
|  | 	var nPiePattern = "%n"; | ||||||
|  | 	 | ||||||
|  |         var x, y, customText, p, n; | ||||||
|  |  | ||||||
|  |         // for threshold plugin we need to read data from different place | ||||||
|  |         if (typeof item.series.threshold !== "undefined") { | ||||||
|  |             x = item.datapoint[0]; | ||||||
|  |             y = item.datapoint[1]; | ||||||
|  |             customText = item.datapoint[2]; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// for CurvedLines plugin we need to read data from different place | ||||||
|  | 	    else if (typeof item.series.curvedLines !== "undefined") { | ||||||
|  | 		x = item.datapoint[0]; | ||||||
|  | 		y = item.datapoint[1]; | ||||||
|  | 	    } | ||||||
|  | 	     | ||||||
|  |         else if (typeof item.series.lines !== "undefined" && item.series.lines.steps) { | ||||||
|  |             x = item.series.datapoints.points[item.dataIndex * 2]; | ||||||
|  |             y = item.series.datapoints.points[item.dataIndex * 2 + 1]; | ||||||
|  |             // TODO: where to find custom text in this variant? | ||||||
|  |             customText = ""; | ||||||
|  |         } else { | ||||||
|  |             x = item.series.data[item.dataIndex][0]; | ||||||
|  |             y = item.series.data[item.dataIndex][1]; | ||||||
|  |             customText = item.series.data[item.dataIndex][2]; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // I think this is only in case of threshold plugin | ||||||
|  |         if (item.series.label === null && item.series.originSeries) { | ||||||
|  |             item.series.label = item.series.originSeries.label; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // if it is a function callback get the content string | ||||||
|  |         if (typeof(content) === 'function') { | ||||||
|  |             content = content(item.series.label, x, y, item); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // the case where the passed content is equal to false | ||||||
|  |         if (typeof(content) === 'boolean' && !content) { | ||||||
|  |             return ''; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  | 	/* replacement of %ct and other multi-character templates must | ||||||
|  | 	   precede the replacement of single-character templates  | ||||||
|  | 	   to avoid conflict between '%c' and '%ct'  and similar substrings | ||||||
|  | 	*/ | ||||||
|  | 	if (customText) | ||||||
|  |             content = content.replace(customTextPattern, customText); | ||||||
|  |  | ||||||
|  |         // percent match for pie charts and stacked percent | ||||||
|  |         if (typeof (item.series.percent) !== 'undefined') { | ||||||
|  |             p = item.series.percent; | ||||||
|  |         } else if (typeof (item.series.percents) !== 'undefined') { | ||||||
|  |             p = item.series.percents[item.dataIndex]; | ||||||
|  |         }         | ||||||
|  |         if (typeof p === 'number') { | ||||||
|  |             content = this.adjustValPrecision(percentPattern, content, p); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  | 	// replace %n with number of items represented by slice in pie charts | ||||||
|  | 	if (item.series.hasOwnProperty('pie')) { | ||||||
|  | 	    if (typeof (item.series.data[0][1] !== 'undefined')) { | ||||||
|  | 		n = item.series.data[0][1]; | ||||||
|  | 	    } | ||||||
|  | 	} | ||||||
|  | 	if (typeof n === 'number') { | ||||||
|  |             content = content.replace(nPiePattern, n); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  |         // series match | ||||||
|  |         if (typeof(item.series.label) !== 'undefined') { | ||||||
|  |             content = content.replace(seriesPattern, item.series.label); | ||||||
|  |         } else { | ||||||
|  |             //remove %s if label is undefined | ||||||
|  |             content = content.replace(seriesPattern, ""); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         // color match | ||||||
|  |         if (typeof(item.series.color) !== 'undefined') { | ||||||
|  |             content = content.replace(colorPattern, item.series.color); | ||||||
|  |         } else { | ||||||
|  |             //remove %s if color is undefined | ||||||
|  |             content = content.replace(colorPattern, ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // x axis label match | ||||||
|  |         if (this.hasAxisLabel('xaxis', item)) { | ||||||
|  |             content = content.replace(xLabelPattern, item.series.xaxis.options.axisLabel); | ||||||
|  |         } else { | ||||||
|  |             //remove %lx if axis label is undefined or axislabels plugin not present | ||||||
|  |             content = content.replace(xLabelPattern, ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // y axis label match | ||||||
|  |         if (this.hasAxisLabel('yaxis', item)) { | ||||||
|  |             content = content.replace(yLabelPattern, item.series.yaxis.options.axisLabel); | ||||||
|  |         } else { | ||||||
|  |             //remove %ly if axis label is undefined or axislabels plugin not present | ||||||
|  |             content = content.replace(yLabelPattern, ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // time mode axes with custom dateFormat | ||||||
|  |         if (this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) { | ||||||
|  |             content = content.replace(xPattern, this.timestampToDate(x, this.tooltipOptions.xDateFormat, item.series.xaxis.options)); | ||||||
|  |         } | ||||||
|  |         if (this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) { | ||||||
|  |             content = content.replace(yPattern, this.timestampToDate(y, this.tooltipOptions.yDateFormat, item.series.yaxis.options)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // set precision if defined | ||||||
|  |         if (typeof x === 'number') { | ||||||
|  |             content = this.adjustValPrecision(xPattern, content, x); | ||||||
|  |         } | ||||||
|  |         if (typeof y === 'number') { | ||||||
|  |             content = this.adjustValPrecision(yPattern, content, y); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // change x from number to given label, if given | ||||||
|  |         if (typeof item.series.xaxis.ticks !== 'undefined') { | ||||||
|  |  | ||||||
|  |             var ticks; | ||||||
|  |             if (this.hasRotatedXAxisTicks(item)) { | ||||||
|  |                 // xaxis.ticks will be an empty array if tickRotor is being used, but the values are available in rotatedTicks | ||||||
|  |                 ticks = 'rotatedTicks'; | ||||||
|  |             } else { | ||||||
|  |                 ticks = 'ticks'; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // see https://github.com/krzysu/flot.tooltip/issues/65 | ||||||
|  |             var tickIndex = item.dataIndex + item.seriesIndex; | ||||||
|  |  | ||||||
|  |             for (var xIndex in item.series.xaxis[ticks]) { | ||||||
|  |                 if (item.series.xaxis[ticks].hasOwnProperty(tickIndex) && !this.isTimeMode('xaxis', item)) { | ||||||
|  |                     var valueX = (this.isCategoriesMode('xaxis', item)) ? item.series.xaxis[ticks][tickIndex].label : item.series.xaxis[ticks][tickIndex].v; | ||||||
|  |                     if (valueX === x) { | ||||||
|  |                         content = content.replace(xPattern, item.series.xaxis[ticks][tickIndex].label.replace(/\$/g, '$$$$')); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // change y from number to given label, if given | ||||||
|  |         if (typeof item.series.yaxis.ticks !== 'undefined') { | ||||||
|  |             for (var yIndex in item.series.yaxis.ticks) { | ||||||
|  |                 if (item.series.yaxis.ticks.hasOwnProperty(yIndex)) { | ||||||
|  |                     var valueY = (this.isCategoriesMode('yaxis', item)) ? item.series.yaxis.ticks[yIndex].label : item.series.yaxis.ticks[yIndex].v; | ||||||
|  |                     if (valueY === y) { | ||||||
|  |                         content = content.replace(yPattern, item.series.yaxis.ticks[yIndex].label.replace(/\$/g, '$$$$')); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // if no value customization, use tickFormatter by default | ||||||
|  |         if (typeof item.series.xaxis.tickFormatter !== 'undefined') { | ||||||
|  |             //escape dollar | ||||||
|  |             content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$')); | ||||||
|  |         } | ||||||
|  |         if (typeof item.series.yaxis.tickFormatter !== 'undefined') { | ||||||
|  |             //escape dollar | ||||||
|  |             content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$')); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return content; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // helpers just for readability | ||||||
|  |     FlotTooltip.prototype.isTimeMode = function (axisName, item) { | ||||||
|  |         return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time'); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     FlotTooltip.prototype.isXDateFormat = function (item) { | ||||||
|  |         return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     FlotTooltip.prototype.isYDateFormat = function (item) { | ||||||
|  |         return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     FlotTooltip.prototype.isCategoriesMode = function (axisName, item) { | ||||||
|  |         return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'categories'); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // | ||||||
|  |     FlotTooltip.prototype.timestampToDate = function (tmst, dateFormat, options) { | ||||||
|  |         var theDate = $.plot.dateGenerator(tmst, options); | ||||||
|  |         return $.plot.formatDate(theDate, dateFormat, this.tooltipOptions.monthNames, this.tooltipOptions.dayNames); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // | ||||||
|  |     FlotTooltip.prototype.adjustValPrecision = function (pattern, content, value) { | ||||||
|  |  | ||||||
|  |         var precision; | ||||||
|  |         var matchResult = content.match(pattern); | ||||||
|  |         if( matchResult !== null ) { | ||||||
|  |             if(RegExp.$1 !== '') { | ||||||
|  |                 precision = RegExp.$1; | ||||||
|  |                 value = value.toFixed(precision); | ||||||
|  |  | ||||||
|  |                 // only replace content if precision exists, in other case use thickformater | ||||||
|  |                 content = content.replace(pattern, value); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return content; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // other plugins detection below | ||||||
|  |  | ||||||
|  |     // check if flot-axislabels plugin (https://github.com/markrcote/flot-axislabels) is used and that an axis label is given | ||||||
|  |     FlotTooltip.prototype.hasAxisLabel = function (axisName, item) { | ||||||
|  |         return ($.inArray('axisLabels', this.plotPlugins) !== -1 && typeof item.series[axisName].options.axisLabel !== 'undefined' && item.series[axisName].options.axisLabel.length > 0); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // check whether flot-tickRotor, a plugin which allows rotation of X-axis ticks, is being used | ||||||
|  |     FlotTooltip.prototype.hasRotatedXAxisTicks = function (item) { | ||||||
|  |         return ($.inArray('tickRotor',this.plotPlugins) !== -1 && typeof item.series.xaxis.rotatedTicks !== 'undefined'); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // | ||||||
|  |     var init = function (plot) { | ||||||
|  |       new FlotTooltip(plot); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     // define Flot plugin | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: defaultOptions, | ||||||
|  |         name: 'tooltip', | ||||||
|  |         version: '0.8.5' | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										1428
									
								
								static/vendor/flot/excanvas.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								static/vendor/flot/excanvas.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										180
									
								
								static/vendor/flot/jquery.colorhelpers.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,180 @@ | |||||||
|  | /* Plugin for jQuery for working with colors. | ||||||
|  |  *  | ||||||
|  |  * Version 1.1. | ||||||
|  |  *  | ||||||
|  |  * Inspiration from jQuery color animation plugin by John Resig. | ||||||
|  |  * | ||||||
|  |  * Released under the MIT license by Ole Laursen, October 2009. | ||||||
|  |  * | ||||||
|  |  * Examples: | ||||||
|  |  * | ||||||
|  |  *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString() | ||||||
|  |  *   var c = $.color.extract($("#mydiv"), 'background-color'); | ||||||
|  |  *   console.log(c.r, c.g, c.b, c.a); | ||||||
|  |  *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)" | ||||||
|  |  * | ||||||
|  |  * Note that .scale() and .add() return the same modified object | ||||||
|  |  * instead of making a new one. | ||||||
|  |  * | ||||||
|  |  * V. 1.1: Fix error handling so e.g. parsing an empty string does | ||||||
|  |  * produce a color rather than just crashing. | ||||||
|  |  */  | ||||||
|  |  | ||||||
|  | (function($) { | ||||||
|  |     $.color = {}; | ||||||
|  |  | ||||||
|  |     // construct color object with some convenient chainable helpers | ||||||
|  |     $.color.make = function (r, g, b, a) { | ||||||
|  |         var o = {}; | ||||||
|  |         o.r = r || 0; | ||||||
|  |         o.g = g || 0; | ||||||
|  |         o.b = b || 0; | ||||||
|  |         o.a = a != null ? a : 1; | ||||||
|  |  | ||||||
|  |         o.add = function (c, d) { | ||||||
|  |             for (var i = 0; i < c.length; ++i) | ||||||
|  |                 o[c.charAt(i)] += d; | ||||||
|  |             return o.normalize(); | ||||||
|  |         }; | ||||||
|  |          | ||||||
|  |         o.scale = function (c, f) { | ||||||
|  |             for (var i = 0; i < c.length; ++i) | ||||||
|  |                 o[c.charAt(i)] *= f; | ||||||
|  |             return o.normalize(); | ||||||
|  |         }; | ||||||
|  |          | ||||||
|  |         o.toString = function () { | ||||||
|  |             if (o.a >= 1.0) { | ||||||
|  |                 return "rgb("+[o.r, o.g, o.b].join(",")+")"; | ||||||
|  |             } else { | ||||||
|  |                 return "rgba("+[o.r, o.g, o.b, o.a].join(",")+")"; | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         o.normalize = function () { | ||||||
|  |             function clamp(min, value, max) { | ||||||
|  |                 return value < min ? min: (value > max ? max: value); | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             o.r = clamp(0, parseInt(o.r), 255); | ||||||
|  |             o.g = clamp(0, parseInt(o.g), 255); | ||||||
|  |             o.b = clamp(0, parseInt(o.b), 255); | ||||||
|  |             o.a = clamp(0, o.a, 1); | ||||||
|  |             return o; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         o.clone = function () { | ||||||
|  |             return $.color.make(o.r, o.b, o.g, o.a); | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         return o.normalize(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // extract CSS color property from element, going up in the DOM | ||||||
|  |     // if it's "transparent" | ||||||
|  |     $.color.extract = function (elem, css) { | ||||||
|  |         var c; | ||||||
|  |  | ||||||
|  |         do { | ||||||
|  |             c = elem.css(css).toLowerCase(); | ||||||
|  |             // keep going until we find an element that has color, or | ||||||
|  |             // we hit the body or root (have no parent) | ||||||
|  |             if (c != '' && c != 'transparent') | ||||||
|  |                 break; | ||||||
|  |             elem = elem.parent(); | ||||||
|  |         } while (elem.length && !$.nodeName(elem.get(0), "body")); | ||||||
|  |  | ||||||
|  |         // catch Safari's way of signalling transparent | ||||||
|  |         if (c == "rgba(0, 0, 0, 0)") | ||||||
|  |             c = "transparent"; | ||||||
|  |          | ||||||
|  |         return $.color.parse(c); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     // parse CSS color string (like "rgb(10, 32, 43)" or "#fff"), | ||||||
|  |     // returns color object, if parsing failed, you get black (0, 0, | ||||||
|  |     // 0) out | ||||||
|  |     $.color.parse = function (str) { | ||||||
|  |         var res, m = $.color.make; | ||||||
|  |  | ||||||
|  |         // Look for rgb(num,num,num) | ||||||
|  |         if (res = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str)) | ||||||
|  |             return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10)); | ||||||
|  |          | ||||||
|  |         // Look for rgba(num,num,num,num) | ||||||
|  |         if (res = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) | ||||||
|  |             return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4])); | ||||||
|  |              | ||||||
|  |         // Look for rgb(num%,num%,num%) | ||||||
|  |         if (res = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str)) | ||||||
|  |             return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55); | ||||||
|  |  | ||||||
|  |         // Look for rgba(num%,num%,num%,num) | ||||||
|  |         if (res = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str)) | ||||||
|  |             return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4])); | ||||||
|  |          | ||||||
|  |         // Look for #a0b1c2 | ||||||
|  |         if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str)) | ||||||
|  |             return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16)); | ||||||
|  |  | ||||||
|  |         // Look for #fff | ||||||
|  |         if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str)) | ||||||
|  |             return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16)); | ||||||
|  |  | ||||||
|  |         // Otherwise, we're most likely dealing with a named color | ||||||
|  |         var name = $.trim(str).toLowerCase(); | ||||||
|  |         if (name == "transparent") | ||||||
|  |             return m(255, 255, 255, 0); | ||||||
|  |         else { | ||||||
|  |             // default to black | ||||||
|  |             res = lookupColors[name] || [0, 0, 0]; | ||||||
|  |             return m(res[0], res[1], res[2]); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     var lookupColors = { | ||||||
|  |         aqua:[0,255,255], | ||||||
|  |         azure:[240,255,255], | ||||||
|  |         beige:[245,245,220], | ||||||
|  |         black:[0,0,0], | ||||||
|  |         blue:[0,0,255], | ||||||
|  |         brown:[165,42,42], | ||||||
|  |         cyan:[0,255,255], | ||||||
|  |         darkblue:[0,0,139], | ||||||
|  |         darkcyan:[0,139,139], | ||||||
|  |         darkgrey:[169,169,169], | ||||||
|  |         darkgreen:[0,100,0], | ||||||
|  |         darkkhaki:[189,183,107], | ||||||
|  |         darkmagenta:[139,0,139], | ||||||
|  |         darkolivegreen:[85,107,47], | ||||||
|  |         darkorange:[255,140,0], | ||||||
|  |         darkorchid:[153,50,204], | ||||||
|  |         darkred:[139,0,0], | ||||||
|  |         darksalmon:[233,150,122], | ||||||
|  |         darkviolet:[148,0,211], | ||||||
|  |         fuchsia:[255,0,255], | ||||||
|  |         gold:[255,215,0], | ||||||
|  |         green:[0,128,0], | ||||||
|  |         indigo:[75,0,130], | ||||||
|  |         khaki:[240,230,140], | ||||||
|  |         lightblue:[173,216,230], | ||||||
|  |         lightcyan:[224,255,255], | ||||||
|  |         lightgreen:[144,238,144], | ||||||
|  |         lightgrey:[211,211,211], | ||||||
|  |         lightpink:[255,182,193], | ||||||
|  |         lightyellow:[255,255,224], | ||||||
|  |         lime:[0,255,0], | ||||||
|  |         magenta:[255,0,255], | ||||||
|  |         maroon:[128,0,0], | ||||||
|  |         navy:[0,0,128], | ||||||
|  |         olive:[128,128,0], | ||||||
|  |         orange:[255,165,0], | ||||||
|  |         pink:[255,192,203], | ||||||
|  |         purple:[128,0,128], | ||||||
|  |         violet:[128,0,128], | ||||||
|  |         red:[255,0,0], | ||||||
|  |         silver:[192,192,192], | ||||||
|  |         white:[255,255,255], | ||||||
|  |         yellow:[255,255,0] | ||||||
|  |     }; | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										345
									
								
								static/vendor/flot/jquery.flot.canvas.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,345 @@ | |||||||
|  | /* Flot plugin for drawing all elements of a plot on the canvas. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | Flot normally produces certain elements, like axis labels and the legend, using | ||||||
|  | HTML elements. This permits greater interactivity and customization, and often | ||||||
|  | looks better, due to cross-browser canvas text inconsistencies and limitations. | ||||||
|  |  | ||||||
|  | It can also be desirable to render the plot entirely in canvas, particularly | ||||||
|  | if the goal is to save it as an image, or if Flot is being used in a context | ||||||
|  | where the HTML DOM does not exist, as is the case within Node.js. This plugin | ||||||
|  | switches out Flot's standard drawing operations for canvas-only replacements. | ||||||
|  |  | ||||||
|  | Currently the plugin supports only axis labels, but it will eventually allow | ||||||
|  | every element of the plot to be rendered directly to canvas. | ||||||
|  |  | ||||||
|  | The plugin supports these options: | ||||||
|  |  | ||||||
|  | { | ||||||
|  |     canvas: boolean | ||||||
|  | } | ||||||
|  |  | ||||||
|  | The "canvas" option controls whether full canvas drawing is enabled, making it | ||||||
|  | possible to toggle on and off. This is useful when a plot uses HTML text in the | ||||||
|  | browser, but needs to redraw with canvas text when exporting as an image. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function($) { | ||||||
|  |  | ||||||
|  | 	var options = { | ||||||
|  | 		canvas: true | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	var render, getTextInfo, addText; | ||||||
|  |  | ||||||
|  | 	// Cache the prototype hasOwnProperty for faster access | ||||||
|  |  | ||||||
|  | 	var hasOwnProperty = Object.prototype.hasOwnProperty; | ||||||
|  |  | ||||||
|  | 	function init(plot, classes) { | ||||||
|  |  | ||||||
|  | 		var Canvas = classes.Canvas; | ||||||
|  |  | ||||||
|  | 		// We only want to replace the functions once; the second time around | ||||||
|  | 		// we would just get our new function back.  This whole replacing of | ||||||
|  | 		// prototype functions is a disaster, and needs to be changed ASAP. | ||||||
|  |  | ||||||
|  | 		if (render == null) { | ||||||
|  | 			getTextInfo = Canvas.prototype.getTextInfo, | ||||||
|  | 			addText = Canvas.prototype.addText, | ||||||
|  | 			render = Canvas.prototype.render; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// Finishes rendering the canvas, including overlaid text | ||||||
|  |  | ||||||
|  | 		Canvas.prototype.render = function() { | ||||||
|  |  | ||||||
|  | 			if (!plot.getOptions().canvas) { | ||||||
|  | 				return render.call(this); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			var context = this.context, | ||||||
|  | 				cache = this._textCache; | ||||||
|  |  | ||||||
|  | 			// For each text layer, render elements marked as active | ||||||
|  |  | ||||||
|  | 			context.save(); | ||||||
|  | 			context.textBaseline = "middle"; | ||||||
|  |  | ||||||
|  | 			for (var layerKey in cache) { | ||||||
|  | 				if (hasOwnProperty.call(cache, layerKey)) { | ||||||
|  | 					var layerCache = cache[layerKey]; | ||||||
|  | 					for (var styleKey in layerCache) { | ||||||
|  | 						if (hasOwnProperty.call(layerCache, styleKey)) { | ||||||
|  | 							var styleCache = layerCache[styleKey], | ||||||
|  | 								updateStyles = true; | ||||||
|  | 							for (var key in styleCache) { | ||||||
|  | 								if (hasOwnProperty.call(styleCache, key)) { | ||||||
|  |  | ||||||
|  | 									var info = styleCache[key], | ||||||
|  | 										positions = info.positions, | ||||||
|  | 										lines = info.lines; | ||||||
|  |  | ||||||
|  | 									// Since every element at this level of the cache have the | ||||||
|  | 									// same font and fill styles, we can just change them once | ||||||
|  | 									// using the values from the first element. | ||||||
|  |  | ||||||
|  | 									if (updateStyles) { | ||||||
|  | 										context.fillStyle = info.font.color; | ||||||
|  | 										context.font = info.font.definition; | ||||||
|  | 										updateStyles = false; | ||||||
|  | 									} | ||||||
|  |  | ||||||
|  | 									for (var i = 0, position; position = positions[i]; i++) { | ||||||
|  | 										if (position.active) { | ||||||
|  | 											for (var j = 0, line; line = position.lines[j]; j++) { | ||||||
|  | 												context.fillText(lines[j].text, line[0], line[1]); | ||||||
|  | 											} | ||||||
|  | 										} else { | ||||||
|  | 											positions.splice(i--, 1); | ||||||
|  | 										} | ||||||
|  | 									} | ||||||
|  |  | ||||||
|  | 									if (positions.length == 0) { | ||||||
|  | 										delete styleCache[key]; | ||||||
|  | 									} | ||||||
|  | 								} | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			context.restore(); | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// Creates (if necessary) and returns a text info object. | ||||||
|  | 		// | ||||||
|  | 		// When the canvas option is set, the object looks like this: | ||||||
|  | 		// | ||||||
|  | 		// { | ||||||
|  | 		//     width: Width of the text's bounding box. | ||||||
|  | 		//     height: Height of the text's bounding box. | ||||||
|  | 		//     positions: Array of positions at which this text is drawn. | ||||||
|  | 		//     lines: [{ | ||||||
|  | 		//         height: Height of this line. | ||||||
|  | 		//         widths: Width of this line. | ||||||
|  | 		//         text: Text on this line. | ||||||
|  | 		//     }], | ||||||
|  | 		//     font: { | ||||||
|  | 		//         definition: Canvas font property string. | ||||||
|  | 		//         color: Color of the text. | ||||||
|  | 		//     }, | ||||||
|  | 		// } | ||||||
|  | 		// | ||||||
|  | 		// The positions array contains objects that look like this: | ||||||
|  | 		// | ||||||
|  | 		// { | ||||||
|  | 		//     active: Flag indicating whether the text should be visible. | ||||||
|  | 		//     lines: Array of [x, y] coordinates at which to draw the line. | ||||||
|  | 		//     x: X coordinate at which to draw the text. | ||||||
|  | 		//     y: Y coordinate at which to draw the text. | ||||||
|  | 		// } | ||||||
|  |  | ||||||
|  | 		Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) { | ||||||
|  |  | ||||||
|  | 			if (!plot.getOptions().canvas) { | ||||||
|  | 				return getTextInfo.call(this, layer, text, font, angle, width); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			var textStyle, layerCache, styleCache, info; | ||||||
|  |  | ||||||
|  | 			// Cast the value to a string, in case we were given a number | ||||||
|  |  | ||||||
|  | 			text = "" + text; | ||||||
|  |  | ||||||
|  | 			// If the font is a font-spec object, generate a CSS definition | ||||||
|  |  | ||||||
|  | 			if (typeof font === "object") { | ||||||
|  | 				textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px " + font.family; | ||||||
|  | 			} else { | ||||||
|  | 				textStyle = font; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Retrieve (or create) the cache for the text's layer and styles | ||||||
|  |  | ||||||
|  | 			layerCache = this._textCache[layer]; | ||||||
|  |  | ||||||
|  | 			if (layerCache == null) { | ||||||
|  | 				layerCache = this._textCache[layer] = {}; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			styleCache = layerCache[textStyle]; | ||||||
|  |  | ||||||
|  | 			if (styleCache == null) { | ||||||
|  | 				styleCache = layerCache[textStyle] = {}; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			info = styleCache[text]; | ||||||
|  |  | ||||||
|  | 			if (info == null) { | ||||||
|  |  | ||||||
|  | 				var context = this.context; | ||||||
|  |  | ||||||
|  | 				// If the font was provided as CSS, create a div with those | ||||||
|  | 				// classes and examine it to generate a canvas font spec. | ||||||
|  |  | ||||||
|  | 				if (typeof font !== "object") { | ||||||
|  |  | ||||||
|  | 					var element = $("<div> </div>") | ||||||
|  | 						.css("position", "absolute") | ||||||
|  | 						.addClass(typeof font === "string" ? font : null) | ||||||
|  | 						.appendTo(this.getTextLayer(layer)); | ||||||
|  |  | ||||||
|  | 					font = { | ||||||
|  | 						lineHeight: element.height(), | ||||||
|  | 						style: element.css("font-style"), | ||||||
|  | 						variant: element.css("font-variant"), | ||||||
|  | 						weight: element.css("font-weight"), | ||||||
|  | 						family: element.css("font-family"), | ||||||
|  | 						color: element.css("color") | ||||||
|  | 					}; | ||||||
|  |  | ||||||
|  | 					// Setting line-height to 1, without units, sets it equal | ||||||
|  | 					// to the font-size, even if the font-size is abstract, | ||||||
|  | 					// like 'smaller'.  This enables us to read the real size | ||||||
|  | 					// via the element's height, working around browsers that | ||||||
|  | 					// return the literal 'smaller' value. | ||||||
|  |  | ||||||
|  | 					font.size = element.css("line-height", 1).height(); | ||||||
|  |  | ||||||
|  | 					element.remove(); | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px " + font.family; | ||||||
|  |  | ||||||
|  | 				// Create a new info object, initializing the dimensions to | ||||||
|  | 				// zero so we can count them up line-by-line. | ||||||
|  |  | ||||||
|  | 				info = styleCache[text] = { | ||||||
|  | 					width: 0, | ||||||
|  | 					height: 0, | ||||||
|  | 					positions: [], | ||||||
|  | 					lines: [], | ||||||
|  | 					font: { | ||||||
|  | 						definition: textStyle, | ||||||
|  | 						color: font.color | ||||||
|  | 					} | ||||||
|  | 				}; | ||||||
|  |  | ||||||
|  | 				context.save(); | ||||||
|  | 				context.font = textStyle; | ||||||
|  |  | ||||||
|  | 				// Canvas can't handle multi-line strings; break on various | ||||||
|  | 				// newlines, including HTML brs, to build a list of lines. | ||||||
|  | 				// Note that we could split directly on regexps, but IE < 9 is | ||||||
|  | 				// broken; revisit when we drop IE 7/8 support. | ||||||
|  |  | ||||||
|  | 				var lines = (text + "").replace(/<br ?\/?>|\r\n|\r/g, "\n").split("\n"); | ||||||
|  |  | ||||||
|  | 				for (var i = 0; i < lines.length; ++i) { | ||||||
|  |  | ||||||
|  | 					var lineText = lines[i], | ||||||
|  | 						measured = context.measureText(lineText); | ||||||
|  |  | ||||||
|  | 					info.width = Math.max(measured.width, info.width); | ||||||
|  | 					info.height += font.lineHeight; | ||||||
|  |  | ||||||
|  | 					info.lines.push({ | ||||||
|  | 						text: lineText, | ||||||
|  | 						width: measured.width, | ||||||
|  | 						height: font.lineHeight | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				context.restore(); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return info; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// Adds a text string to the canvas text overlay. | ||||||
|  |  | ||||||
|  | 		Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) { | ||||||
|  |  | ||||||
|  | 			if (!plot.getOptions().canvas) { | ||||||
|  | 				return addText.call(this, layer, x, y, text, font, angle, width, halign, valign); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			var info = this.getTextInfo(layer, text, font, angle, width), | ||||||
|  | 				positions = info.positions, | ||||||
|  | 				lines = info.lines; | ||||||
|  |  | ||||||
|  | 			// Text is drawn with baseline 'middle', which we need to account | ||||||
|  | 			// for by adding half a line's height to the y position. | ||||||
|  |  | ||||||
|  | 			y += info.height / lines.length / 2; | ||||||
|  |  | ||||||
|  | 			// Tweak the initial y-position to match vertical alignment | ||||||
|  |  | ||||||
|  | 			if (valign == "middle") { | ||||||
|  | 				y = Math.round(y - info.height / 2); | ||||||
|  | 			} else if (valign == "bottom") { | ||||||
|  | 				y = Math.round(y - info.height); | ||||||
|  | 			} else { | ||||||
|  | 				y = Math.round(y); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// FIXME: LEGACY BROWSER FIX | ||||||
|  | 			// AFFECTS: Opera < 12.00 | ||||||
|  |  | ||||||
|  | 			// Offset the y coordinate, since Opera is off pretty | ||||||
|  | 			// consistently compared to the other browsers. | ||||||
|  |  | ||||||
|  | 			if (!!(window.opera && window.opera.version().split(".")[0] < 12)) { | ||||||
|  | 				y -= 2; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Determine whether this text already exists at this position. | ||||||
|  | 			// If so, mark it for inclusion in the next render pass. | ||||||
|  |  | ||||||
|  | 			for (var i = 0, position; position = positions[i]; i++) { | ||||||
|  | 				if (position.x == x && position.y == y) { | ||||||
|  | 					position.active = true; | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// If the text doesn't exist at this position, create a new entry | ||||||
|  |  | ||||||
|  | 			position = { | ||||||
|  | 				active: true, | ||||||
|  | 				lines: [], | ||||||
|  | 				x: x, | ||||||
|  | 				y: y | ||||||
|  | 			}; | ||||||
|  |  | ||||||
|  | 			positions.push(position); | ||||||
|  |  | ||||||
|  | 			// Fill in the x & y positions of each line, adjusting them | ||||||
|  | 			// individually for horizontal alignment. | ||||||
|  |  | ||||||
|  | 			for (var i = 0, line; line = lines[i]; i++) { | ||||||
|  | 				if (halign == "center") { | ||||||
|  | 					position.lines.push([Math.round(x - line.width / 2), y]); | ||||||
|  | 				} else if (halign == "right") { | ||||||
|  | 					position.lines.push([Math.round(x - line.width), y]); | ||||||
|  | 				} else { | ||||||
|  | 					position.lines.push([Math.round(x), y]); | ||||||
|  | 				} | ||||||
|  | 				y += line.height; | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	$.plot.plugins.push({ | ||||||
|  | 		init: init, | ||||||
|  | 		options: options, | ||||||
|  | 		name: "canvas", | ||||||
|  | 		version: "1.0" | ||||||
|  | 	}); | ||||||
|  |  | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										190
									
								
								static/vendor/flot/jquery.flot.categories.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,190 @@ | |||||||
|  | /* Flot plugin for plotting textual data or categories. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | Consider a dataset like [["February", 34], ["March", 20], ...]. This plugin | ||||||
|  | allows you to plot such a dataset directly. | ||||||
|  |  | ||||||
|  | To enable it, you must specify mode: "categories" on the axis with the textual | ||||||
|  | labels, e.g. | ||||||
|  |  | ||||||
|  | 	$.plot("#placeholder", data, { xaxis: { mode: "categories" } }); | ||||||
|  |  | ||||||
|  | By default, the labels are ordered as they are met in the data series. If you | ||||||
|  | need a different ordering, you can specify "categories" on the axis options | ||||||
|  | and list the categories there: | ||||||
|  |  | ||||||
|  | 	xaxis: { | ||||||
|  | 		mode: "categories", | ||||||
|  | 		categories: ["February", "March", "April"] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | If you need to customize the distances between the categories, you can specify | ||||||
|  | "categories" as an object mapping labels to values | ||||||
|  |  | ||||||
|  | 	xaxis: { | ||||||
|  | 		mode: "categories", | ||||||
|  | 		categories: { "February": 1, "March": 3, "April": 4 } | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | If you don't specify all categories, the remaining categories will be numbered | ||||||
|  | from the max value plus 1 (with a spacing of 1 between each). | ||||||
|  |  | ||||||
|  | Internally, the plugin works by transforming the input data through an auto- | ||||||
|  | generated mapping where the first category becomes 0, the second 1, etc. | ||||||
|  | Hence, a point like ["February", 34] becomes [0, 34] internally in Flot (this | ||||||
|  | is visible in hover and click events that return numbers rather than the | ||||||
|  | category labels). The plugin also overrides the tick generator to spit out the | ||||||
|  | categories as ticks instead of the values. | ||||||
|  |  | ||||||
|  | If you need to map a value back to its label, the mapping is always accessible | ||||||
|  | as "categories" on the axis object, e.g. plot.getAxes().xaxis.categories. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     var options = { | ||||||
|  |         xaxis: { | ||||||
|  |             categories: null | ||||||
|  |         }, | ||||||
|  |         yaxis: { | ||||||
|  |             categories: null | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |      | ||||||
|  |     function processRawData(plot, series, data, datapoints) { | ||||||
|  |         // if categories are enabled, we need to disable | ||||||
|  |         // auto-transformation to numbers so the strings are intact | ||||||
|  |         // for later processing | ||||||
|  |  | ||||||
|  |         var xCategories = series.xaxis.options.mode == "categories", | ||||||
|  |             yCategories = series.yaxis.options.mode == "categories"; | ||||||
|  |          | ||||||
|  |         if (!(xCategories || yCategories)) | ||||||
|  |             return; | ||||||
|  |  | ||||||
|  |         var format = datapoints.format; | ||||||
|  |  | ||||||
|  |         if (!format) { | ||||||
|  |             // FIXME: auto-detection should really not be defined here | ||||||
|  |             var s = series; | ||||||
|  |             format = []; | ||||||
|  |             format.push({ x: true, number: true, required: true }); | ||||||
|  |             format.push({ y: true, number: true, required: true }); | ||||||
|  |  | ||||||
|  |             if (s.bars.show || (s.lines.show && s.lines.fill)) { | ||||||
|  |                 var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero)); | ||||||
|  |                 format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale }); | ||||||
|  |                 if (s.bars.horizontal) { | ||||||
|  |                     delete format[format.length - 1].y; | ||||||
|  |                     format[format.length - 1].x = true; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             datapoints.format = format; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         for (var m = 0; m < format.length; ++m) { | ||||||
|  |             if (format[m].x && xCategories) | ||||||
|  |                 format[m].number = false; | ||||||
|  |              | ||||||
|  |             if (format[m].y && yCategories) | ||||||
|  |                 format[m].number = false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function getNextIndex(categories) { | ||||||
|  |         var index = -1; | ||||||
|  |          | ||||||
|  |         for (var v in categories) | ||||||
|  |             if (categories[v] > index) | ||||||
|  |                 index = categories[v]; | ||||||
|  |  | ||||||
|  |         return index + 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function categoriesTickGenerator(axis) { | ||||||
|  |         var res = []; | ||||||
|  |         for (var label in axis.categories) { | ||||||
|  |             var v = axis.categories[label]; | ||||||
|  |             if (v >= axis.min && v <= axis.max) | ||||||
|  |                 res.push([v, label]); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         res.sort(function (a, b) { return a[0] - b[0]; }); | ||||||
|  |  | ||||||
|  |         return res; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     function setupCategoriesForAxis(series, axis, datapoints) { | ||||||
|  |         if (series[axis].options.mode != "categories") | ||||||
|  |             return; | ||||||
|  |          | ||||||
|  |         if (!series[axis].categories) { | ||||||
|  |             // parse options | ||||||
|  |             var c = {}, o = series[axis].options.categories || {}; | ||||||
|  |             if ($.isArray(o)) { | ||||||
|  |                 for (var i = 0; i < o.length; ++i) | ||||||
|  |                     c[o[i]] = i; | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 for (var v in o) | ||||||
|  |                     c[v] = o[v]; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             series[axis].categories = c; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // fix ticks | ||||||
|  |         if (!series[axis].options.ticks) | ||||||
|  |             series[axis].options.ticks = categoriesTickGenerator; | ||||||
|  |  | ||||||
|  |         transformPointsOnAxis(datapoints, axis, series[axis].categories); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     function transformPointsOnAxis(datapoints, axis, categories) { | ||||||
|  |         // go through the points, transforming them | ||||||
|  |         var points = datapoints.points, | ||||||
|  |             ps = datapoints.pointsize, | ||||||
|  |             format = datapoints.format, | ||||||
|  |             formatColumn = axis.charAt(0), | ||||||
|  |             index = getNextIndex(categories); | ||||||
|  |  | ||||||
|  |         for (var i = 0; i < points.length; i += ps) { | ||||||
|  |             if (points[i] == null) | ||||||
|  |                 continue; | ||||||
|  |              | ||||||
|  |             for (var m = 0; m < ps; ++m) { | ||||||
|  |                 var val = points[i + m]; | ||||||
|  |  | ||||||
|  |                 if (val == null || !format[m][formatColumn]) | ||||||
|  |                     continue; | ||||||
|  |  | ||||||
|  |                 if (!(val in categories)) { | ||||||
|  |                     categories[val] = index; | ||||||
|  |                     ++index; | ||||||
|  |                 } | ||||||
|  |                  | ||||||
|  |                 points[i + m] = categories[val]; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function processDatapoints(plot, series, datapoints) { | ||||||
|  |         setupCategoriesForAxis(series, "xaxis", datapoints); | ||||||
|  |         setupCategoriesForAxis(series, "yaxis", datapoints); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function init(plot) { | ||||||
|  |         plot.hooks.processRawData.push(processRawData); | ||||||
|  |         plot.hooks.processDatapoints.push(processDatapoints); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: options, | ||||||
|  |         name: 'categories', | ||||||
|  |         version: '1.0' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										176
									
								
								static/vendor/flot/jquery.flot.crosshair.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,176 @@ | |||||||
|  | /* Flot plugin for showing crosshairs when the mouse hovers over the plot. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The plugin supports these options: | ||||||
|  |  | ||||||
|  | 	crosshair: { | ||||||
|  | 		mode: null or "x" or "y" or "xy" | ||||||
|  | 		color: color | ||||||
|  | 		lineWidth: number | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | Set the mode to one of "x", "y" or "xy". The "x" mode enables a vertical | ||||||
|  | crosshair that lets you trace the values on the x axis, "y" enables a | ||||||
|  | horizontal crosshair and "xy" enables them both. "color" is the color of the | ||||||
|  | crosshair (default is "rgba(170, 0, 0, 0.80)"), "lineWidth" is the width of | ||||||
|  | the drawn lines (default is 1). | ||||||
|  |  | ||||||
|  | The plugin also adds four public methods: | ||||||
|  |  | ||||||
|  |   - setCrosshair( pos ) | ||||||
|  |  | ||||||
|  |     Set the position of the crosshair. Note that this is cleared if the user | ||||||
|  |     moves the mouse. "pos" is in coordinates of the plot and should be on the | ||||||
|  |     form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple | ||||||
|  |     axes), which is coincidentally the same format as what you get from a | ||||||
|  |     "plothover" event. If "pos" is null, the crosshair is cleared. | ||||||
|  |  | ||||||
|  |   - clearCrosshair() | ||||||
|  |  | ||||||
|  |     Clear the crosshair. | ||||||
|  |  | ||||||
|  |   - lockCrosshair(pos) | ||||||
|  |  | ||||||
|  |     Cause the crosshair to lock to the current location, no longer updating if | ||||||
|  |     the user moves the mouse. Optionally supply a position (passed on to | ||||||
|  |     setCrosshair()) to move it to. | ||||||
|  |  | ||||||
|  |     Example usage: | ||||||
|  |  | ||||||
|  | 	var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } }; | ||||||
|  | 	$("#graph").bind( "plothover", function ( evt, position, item ) { | ||||||
|  | 		if ( item ) { | ||||||
|  | 			// Lock the crosshair to the data point being hovered | ||||||
|  | 			myFlot.lockCrosshair({ | ||||||
|  | 				x: item.datapoint[ 0 ], | ||||||
|  | 				y: item.datapoint[ 1 ] | ||||||
|  | 			}); | ||||||
|  | 		} else { | ||||||
|  | 			// Return normal crosshair operation | ||||||
|  | 			myFlot.unlockCrosshair(); | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  |  | ||||||
|  |   - unlockCrosshair() | ||||||
|  |  | ||||||
|  |     Free the crosshair to move again after locking it. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     var options = { | ||||||
|  |         crosshair: { | ||||||
|  |             mode: null, // one of null, "x", "y" or "xy", | ||||||
|  |             color: "rgba(170, 0, 0, 0.80)", | ||||||
|  |             lineWidth: 1 | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |      | ||||||
|  |     function init(plot) { | ||||||
|  |         // position of crosshair in pixels | ||||||
|  |         var crosshair = { x: -1, y: -1, locked: false }; | ||||||
|  |  | ||||||
|  |         plot.setCrosshair = function setCrosshair(pos) { | ||||||
|  |             if (!pos) | ||||||
|  |                 crosshair.x = -1; | ||||||
|  |             else { | ||||||
|  |                 var o = plot.p2c(pos); | ||||||
|  |                 crosshair.x = Math.max(0, Math.min(o.left, plot.width())); | ||||||
|  |                 crosshair.y = Math.max(0, Math.min(o.top, plot.height())); | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             plot.triggerRedrawOverlay(); | ||||||
|  |         }; | ||||||
|  |          | ||||||
|  |         plot.clearCrosshair = plot.setCrosshair; // passes null for pos | ||||||
|  |          | ||||||
|  |         plot.lockCrosshair = function lockCrosshair(pos) { | ||||||
|  |             if (pos) | ||||||
|  |                 plot.setCrosshair(pos); | ||||||
|  |             crosshair.locked = true; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         plot.unlockCrosshair = function unlockCrosshair() { | ||||||
|  |             crosshair.locked = false; | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         function onMouseOut(e) { | ||||||
|  |             if (crosshair.locked) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             if (crosshair.x != -1) { | ||||||
|  |                 crosshair.x = -1; | ||||||
|  |                 plot.triggerRedrawOverlay(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function onMouseMove(e) { | ||||||
|  |             if (crosshair.locked) | ||||||
|  |                 return; | ||||||
|  |                  | ||||||
|  |             if (plot.getSelection && plot.getSelection()) { | ||||||
|  |                 crosshair.x = -1; // hide the crosshair while selecting | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |                  | ||||||
|  |             var offset = plot.offset(); | ||||||
|  |             crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width())); | ||||||
|  |             crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height())); | ||||||
|  |             plot.triggerRedrawOverlay(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         plot.hooks.bindEvents.push(function (plot, eventHolder) { | ||||||
|  |             if (!plot.getOptions().crosshair.mode) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             eventHolder.mouseout(onMouseOut); | ||||||
|  |             eventHolder.mousemove(onMouseMove); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         plot.hooks.drawOverlay.push(function (plot, ctx) { | ||||||
|  |             var c = plot.getOptions().crosshair; | ||||||
|  |             if (!c.mode) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             var plotOffset = plot.getPlotOffset(); | ||||||
|  |              | ||||||
|  |             ctx.save(); | ||||||
|  |             ctx.translate(plotOffset.left, plotOffset.top); | ||||||
|  |  | ||||||
|  |             if (crosshair.x != -1) { | ||||||
|  |                 var adj = plot.getOptions().crosshair.lineWidth % 2 ? 0.5 : 0; | ||||||
|  |  | ||||||
|  |                 ctx.strokeStyle = c.color; | ||||||
|  |                 ctx.lineWidth = c.lineWidth; | ||||||
|  |                 ctx.lineJoin = "round"; | ||||||
|  |  | ||||||
|  |                 ctx.beginPath(); | ||||||
|  |                 if (c.mode.indexOf("x") != -1) { | ||||||
|  |                     var drawX = Math.floor(crosshair.x) + adj; | ||||||
|  |                     ctx.moveTo(drawX, 0); | ||||||
|  |                     ctx.lineTo(drawX, plot.height()); | ||||||
|  |                 } | ||||||
|  |                 if (c.mode.indexOf("y") != -1) { | ||||||
|  |                     var drawY = Math.floor(crosshair.y) + adj; | ||||||
|  |                     ctx.moveTo(0, drawY); | ||||||
|  |                     ctx.lineTo(plot.width(), drawY); | ||||||
|  |                 } | ||||||
|  |                 ctx.stroke(); | ||||||
|  |             } | ||||||
|  |             ctx.restore(); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         plot.hooks.shutdown.push(function (plot, eventHolder) { | ||||||
|  |             eventHolder.unbind("mouseout", onMouseOut); | ||||||
|  |             eventHolder.unbind("mousemove", onMouseMove); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: options, | ||||||
|  |         name: 'crosshair', | ||||||
|  |         version: '1.0' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										353
									
								
								static/vendor/flot/jquery.flot.errorbars.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,353 @@ | |||||||
|  | /* Flot plugin for plotting error bars. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | Error bars are used to show standard deviation and other statistical | ||||||
|  | properties in a plot. | ||||||
|  |  | ||||||
|  | * Created by Rui Pereira  -  rui (dot) pereira (at) gmail (dot) com | ||||||
|  |  | ||||||
|  | This plugin allows you to plot error-bars over points. Set "errorbars" inside | ||||||
|  | the points series to the axis name over which there will be error values in | ||||||
|  | your data array (*even* if you do not intend to plot them later, by setting | ||||||
|  | "show: null" on xerr/yerr). | ||||||
|  |  | ||||||
|  | The plugin supports these options: | ||||||
|  |  | ||||||
|  | 	series: { | ||||||
|  | 		points: { | ||||||
|  | 			errorbars: "x" or "y" or "xy", | ||||||
|  | 			xerr: { | ||||||
|  | 				show: null/false or true, | ||||||
|  | 				asymmetric: null/false or true, | ||||||
|  | 				upperCap: null or "-" or function, | ||||||
|  | 				lowerCap: null or "-" or function, | ||||||
|  | 				color: null or color, | ||||||
|  | 				radius: null or number | ||||||
|  | 			}, | ||||||
|  | 			yerr: { same options as xerr } | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | Each data point array is expected to be of the type: | ||||||
|  |  | ||||||
|  | 	"x"  [ x, y, xerr ] | ||||||
|  | 	"y"  [ x, y, yerr ] | ||||||
|  | 	"xy" [ x, y, xerr, yerr ] | ||||||
|  |  | ||||||
|  | Where xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and | ||||||
|  | equivalently for yerr. Eg., a datapoint for the "xy" case with symmetric | ||||||
|  | error-bars on X and asymmetric on Y would be: | ||||||
|  |  | ||||||
|  | 	[ x, y, xerr, yerr_lower, yerr_upper ] | ||||||
|  |  | ||||||
|  | By default no end caps are drawn. Setting upperCap and/or lowerCap to "-" will | ||||||
|  | draw a small cap perpendicular to the error bar. They can also be set to a | ||||||
|  | user-defined drawing function, with (ctx, x, y, radius) as parameters, as eg. | ||||||
|  |  | ||||||
|  | 	function drawSemiCircle( ctx, x, y, radius ) { | ||||||
|  | 		ctx.beginPath(); | ||||||
|  | 		ctx.arc( x, y, radius, 0, Math.PI, false ); | ||||||
|  | 		ctx.moveTo( x - radius, y ); | ||||||
|  | 		ctx.lineTo( x + radius, y ); | ||||||
|  | 		ctx.stroke(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | Color and radius both default to the same ones of the points series if not | ||||||
|  | set. The independent radius parameter on xerr/yerr is useful for the case when | ||||||
|  | we may want to add error-bars to a line, without showing the interconnecting | ||||||
|  | points (with radius: 0), and still showing end caps on the error-bars. | ||||||
|  | shadowSize and lineWidth are derived as well from the points series. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     var options = { | ||||||
|  |         series: { | ||||||
|  |             points: { | ||||||
|  |                 errorbars: null, //should be 'x', 'y' or 'xy' | ||||||
|  |                 xerr: { err: 'x', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null}, | ||||||
|  |                 yerr: { err: 'y', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null} | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     function processRawData(plot, series, data, datapoints){ | ||||||
|  |         if (!series.points.errorbars) | ||||||
|  |             return; | ||||||
|  |  | ||||||
|  |         // x,y values | ||||||
|  |         var format = [ | ||||||
|  |             { x: true, number: true, required: true }, | ||||||
|  |             { y: true, number: true, required: true } | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         var errors = series.points.errorbars; | ||||||
|  |         // error bars - first X then Y | ||||||
|  |         if (errors == 'x' || errors == 'xy') { | ||||||
|  |             // lower / upper error | ||||||
|  |             if (series.points.xerr.asymmetric) { | ||||||
|  |                 format.push({ x: true, number: true, required: true }); | ||||||
|  |                 format.push({ x: true, number: true, required: true }); | ||||||
|  |             } else | ||||||
|  |                 format.push({ x: true, number: true, required: true }); | ||||||
|  |         } | ||||||
|  |         if (errors == 'y' || errors == 'xy') { | ||||||
|  |             // lower / upper error | ||||||
|  |             if (series.points.yerr.asymmetric) { | ||||||
|  |                 format.push({ y: true, number: true, required: true }); | ||||||
|  |                 format.push({ y: true, number: true, required: true }); | ||||||
|  |             } else | ||||||
|  |                 format.push({ y: true, number: true, required: true }); | ||||||
|  |         } | ||||||
|  |         datapoints.format = format; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function parseErrors(series, i){ | ||||||
|  |  | ||||||
|  |         var points = series.datapoints.points; | ||||||
|  |  | ||||||
|  |         // read errors from points array | ||||||
|  |         var exl = null, | ||||||
|  |                 exu = null, | ||||||
|  |                 eyl = null, | ||||||
|  |                 eyu = null; | ||||||
|  |         var xerr = series.points.xerr, | ||||||
|  |                 yerr = series.points.yerr; | ||||||
|  |  | ||||||
|  |         var eb = series.points.errorbars; | ||||||
|  |         // error bars - first X | ||||||
|  |         if (eb == 'x' || eb == 'xy') { | ||||||
|  |             if (xerr.asymmetric) { | ||||||
|  |                 exl = points[i + 2]; | ||||||
|  |                 exu = points[i + 3]; | ||||||
|  |                 if (eb == 'xy') | ||||||
|  |                     if (yerr.asymmetric){ | ||||||
|  |                         eyl = points[i + 4]; | ||||||
|  |                         eyu = points[i + 5]; | ||||||
|  |                     } else eyl = points[i + 4]; | ||||||
|  |             } else { | ||||||
|  |                 exl = points[i + 2]; | ||||||
|  |                 if (eb == 'xy') | ||||||
|  |                     if (yerr.asymmetric) { | ||||||
|  |                         eyl = points[i + 3]; | ||||||
|  |                         eyu = points[i + 4]; | ||||||
|  |                     } else eyl = points[i + 3]; | ||||||
|  |             } | ||||||
|  |         // only Y | ||||||
|  |         } else if (eb == 'y') | ||||||
|  |             if (yerr.asymmetric) { | ||||||
|  |                 eyl = points[i + 2]; | ||||||
|  |                 eyu = points[i + 3]; | ||||||
|  |             } else eyl = points[i + 2]; | ||||||
|  |  | ||||||
|  |         // symmetric errors? | ||||||
|  |         if (exu == null) exu = exl; | ||||||
|  |         if (eyu == null) eyu = eyl; | ||||||
|  |  | ||||||
|  |         var errRanges = [exl, exu, eyl, eyu]; | ||||||
|  |         // nullify if not showing | ||||||
|  |         if (!xerr.show){ | ||||||
|  |             errRanges[0] = null; | ||||||
|  |             errRanges[1] = null; | ||||||
|  |         } | ||||||
|  |         if (!yerr.show){ | ||||||
|  |             errRanges[2] = null; | ||||||
|  |             errRanges[3] = null; | ||||||
|  |         } | ||||||
|  |         return errRanges; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function drawSeriesErrors(plot, ctx, s){ | ||||||
|  |  | ||||||
|  |         var points = s.datapoints.points, | ||||||
|  |                 ps = s.datapoints.pointsize, | ||||||
|  |                 ax = [s.xaxis, s.yaxis], | ||||||
|  |                 radius = s.points.radius, | ||||||
|  |                 err = [s.points.xerr, s.points.yerr]; | ||||||
|  |  | ||||||
|  |         //sanity check, in case some inverted axis hack is applied to flot | ||||||
|  |         var invertX = false; | ||||||
|  |         if (ax[0].p2c(ax[0].max) < ax[0].p2c(ax[0].min)) { | ||||||
|  |             invertX = true; | ||||||
|  |             var tmp = err[0].lowerCap; | ||||||
|  |             err[0].lowerCap = err[0].upperCap; | ||||||
|  |             err[0].upperCap = tmp; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         var invertY = false; | ||||||
|  |         if (ax[1].p2c(ax[1].min) < ax[1].p2c(ax[1].max)) { | ||||||
|  |             invertY = true; | ||||||
|  |             var tmp = err[1].lowerCap; | ||||||
|  |             err[1].lowerCap = err[1].upperCap; | ||||||
|  |             err[1].upperCap = tmp; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         for (var i = 0; i < s.datapoints.points.length; i += ps) { | ||||||
|  |  | ||||||
|  |             //parse | ||||||
|  |             var errRanges = parseErrors(s, i); | ||||||
|  |  | ||||||
|  |             //cycle xerr & yerr | ||||||
|  |             for (var e = 0; e < err.length; e++){ | ||||||
|  |  | ||||||
|  |                 var minmax = [ax[e].min, ax[e].max]; | ||||||
|  |  | ||||||
|  |                 //draw this error? | ||||||
|  |                 if (errRanges[e * err.length]){ | ||||||
|  |  | ||||||
|  |                     //data coordinates | ||||||
|  |                     var x = points[i], | ||||||
|  |                         y = points[i + 1]; | ||||||
|  |  | ||||||
|  |                     //errorbar ranges | ||||||
|  |                     var upper = [x, y][e] + errRanges[e * err.length + 1], | ||||||
|  |                         lower = [x, y][e] - errRanges[e * err.length]; | ||||||
|  |  | ||||||
|  |                     //points outside of the canvas | ||||||
|  |                     if (err[e].err == 'x') | ||||||
|  |                         if (y > ax[1].max || y < ax[1].min || upper < ax[0].min || lower > ax[0].max) | ||||||
|  |                             continue; | ||||||
|  |                     if (err[e].err == 'y') | ||||||
|  |                         if (x > ax[0].max || x < ax[0].min || upper < ax[1].min || lower > ax[1].max) | ||||||
|  |                             continue; | ||||||
|  |  | ||||||
|  |                     // prevent errorbars getting out of the canvas | ||||||
|  |                     var drawUpper = true, | ||||||
|  |                         drawLower = true; | ||||||
|  |  | ||||||
|  |                     if (upper > minmax[1]) { | ||||||
|  |                         drawUpper = false; | ||||||
|  |                         upper = minmax[1]; | ||||||
|  |                     } | ||||||
|  |                     if (lower < minmax[0]) { | ||||||
|  |                         drawLower = false; | ||||||
|  |                         lower = minmax[0]; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     //sanity check, in case some inverted axis hack is applied to flot | ||||||
|  |                     if ((err[e].err == 'x' && invertX) || (err[e].err == 'y' && invertY)) { | ||||||
|  |                         //swap coordinates | ||||||
|  |                         var tmp = lower; | ||||||
|  |                         lower = upper; | ||||||
|  |                         upper = tmp; | ||||||
|  |                         tmp = drawLower; | ||||||
|  |                         drawLower = drawUpper; | ||||||
|  |                         drawUpper = tmp; | ||||||
|  |                         tmp = minmax[0]; | ||||||
|  |                         minmax[0] = minmax[1]; | ||||||
|  |                         minmax[1] = tmp; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     // convert to pixels | ||||||
|  |                     x = ax[0].p2c(x), | ||||||
|  |                         y = ax[1].p2c(y), | ||||||
|  |                         upper = ax[e].p2c(upper); | ||||||
|  |                     lower = ax[e].p2c(lower); | ||||||
|  |                     minmax[0] = ax[e].p2c(minmax[0]); | ||||||
|  |                     minmax[1] = ax[e].p2c(minmax[1]); | ||||||
|  |  | ||||||
|  |                     //same style as points by default | ||||||
|  |                     var lw = err[e].lineWidth ? err[e].lineWidth : s.points.lineWidth, | ||||||
|  |                         sw = s.points.shadowSize != null ? s.points.shadowSize : s.shadowSize; | ||||||
|  |  | ||||||
|  |                     //shadow as for points | ||||||
|  |                     if (lw > 0 && sw > 0) { | ||||||
|  |                         var w = sw / 2; | ||||||
|  |                         ctx.lineWidth = w; | ||||||
|  |                         ctx.strokeStyle = "rgba(0,0,0,0.1)"; | ||||||
|  |                         drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w + w/2, minmax); | ||||||
|  |  | ||||||
|  |                         ctx.strokeStyle = "rgba(0,0,0,0.2)"; | ||||||
|  |                         drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w/2, minmax); | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     ctx.strokeStyle = err[e].color? err[e].color: s.color; | ||||||
|  |                     ctx.lineWidth = lw; | ||||||
|  |                     //draw it | ||||||
|  |                     drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, 0, minmax); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){ | ||||||
|  |  | ||||||
|  |         //shadow offset | ||||||
|  |         y += offset; | ||||||
|  |         upper += offset; | ||||||
|  |         lower += offset; | ||||||
|  |  | ||||||
|  |         // error bar - avoid plotting over circles | ||||||
|  |         if (err.err == 'x'){ | ||||||
|  |             if (upper > x + radius) drawPath(ctx, [[upper,y],[Math.max(x + radius,minmax[0]),y]]); | ||||||
|  |             else drawUpper = false; | ||||||
|  |             if (lower < x - radius) drawPath(ctx, [[Math.min(x - radius,minmax[1]),y],[lower,y]] ); | ||||||
|  |             else drawLower = false; | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             if (upper < y - radius) drawPath(ctx, [[x,upper],[x,Math.min(y - radius,minmax[0])]] ); | ||||||
|  |             else drawUpper = false; | ||||||
|  |             if (lower > y + radius) drawPath(ctx, [[x,Math.max(y + radius,minmax[1])],[x,lower]] ); | ||||||
|  |             else drawLower = false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //internal radius value in errorbar, allows to plot radius 0 points and still keep proper sized caps | ||||||
|  |         //this is a way to get errorbars on lines without visible connecting dots | ||||||
|  |         radius = err.radius != null? err.radius: radius; | ||||||
|  |  | ||||||
|  |         // upper cap | ||||||
|  |         if (drawUpper) { | ||||||
|  |             if (err.upperCap == '-'){ | ||||||
|  |                 if (err.err=='x') drawPath(ctx, [[upper,y - radius],[upper,y + radius]] ); | ||||||
|  |                 else drawPath(ctx, [[x - radius,upper],[x + radius,upper]] ); | ||||||
|  |             } else if ($.isFunction(err.upperCap)){ | ||||||
|  |                 if (err.err=='x') err.upperCap(ctx, upper, y, radius); | ||||||
|  |                 else err.upperCap(ctx, x, upper, radius); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         // lower cap | ||||||
|  |         if (drawLower) { | ||||||
|  |             if (err.lowerCap == '-'){ | ||||||
|  |                 if (err.err=='x') drawPath(ctx, [[lower,y - radius],[lower,y + radius]] ); | ||||||
|  |                 else drawPath(ctx, [[x - radius,lower],[x + radius,lower]] ); | ||||||
|  |             } else if ($.isFunction(err.lowerCap)){ | ||||||
|  |                 if (err.err=='x') err.lowerCap(ctx, lower, y, radius); | ||||||
|  |                 else err.lowerCap(ctx, x, lower, radius); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function drawPath(ctx, pts){ | ||||||
|  |         ctx.beginPath(); | ||||||
|  |         ctx.moveTo(pts[0][0], pts[0][1]); | ||||||
|  |         for (var p=1; p < pts.length; p++) | ||||||
|  |             ctx.lineTo(pts[p][0], pts[p][1]); | ||||||
|  |         ctx.stroke(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function draw(plot, ctx){ | ||||||
|  |         var plotOffset = plot.getPlotOffset(); | ||||||
|  |  | ||||||
|  |         ctx.save(); | ||||||
|  |         ctx.translate(plotOffset.left, plotOffset.top); | ||||||
|  |         $.each(plot.getData(), function (i, s) { | ||||||
|  |             if (s.points.errorbars && (s.points.xerr.show || s.points.yerr.show)) | ||||||
|  |                 drawSeriesErrors(plot, ctx, s); | ||||||
|  |         }); | ||||||
|  |         ctx.restore(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function init(plot) { | ||||||
|  |         plot.hooks.processRawData.push(processRawData); | ||||||
|  |         plot.hooks.draw.push(draw); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |                 init: init, | ||||||
|  |                 options: options, | ||||||
|  |                 name: 'errorbars', | ||||||
|  |                 version: '1.0' | ||||||
|  |             }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										226
									
								
								static/vendor/flot/jquery.flot.fillbetween.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,226 @@ | |||||||
|  | /* Flot plugin for computing bottoms for filled line and bar charts. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The case: you've got two series that you want to fill the area between. In Flot | ||||||
|  | terms, you need to use one as the fill bottom of the other. You can specify the | ||||||
|  | bottom of each data point as the third coordinate manually, or you can use this | ||||||
|  | plugin to compute it for you. | ||||||
|  |  | ||||||
|  | In order to name the other series, you need to give it an id, like this: | ||||||
|  |  | ||||||
|  | 	var dataset = [ | ||||||
|  | 		{ data: [ ... ], id: "foo" } ,         // use default bottom | ||||||
|  | 		{ data: [ ... ], fillBetween: "foo" }, // use first dataset as bottom | ||||||
|  | 	]; | ||||||
|  |  | ||||||
|  | 	$.plot($("#placeholder"), dataset, { lines: { show: true, fill: true }}); | ||||||
|  |  | ||||||
|  | As a convenience, if the id given is a number that doesn't appear as an id in | ||||||
|  | the series, it is interpreted as the index in the array instead (so fillBetween: | ||||||
|  | 0 can also mean the first series). | ||||||
|  |  | ||||||
|  | Internally, the plugin modifies the datapoints in each series. For line series, | ||||||
|  | extra data points might be inserted through interpolation. Note that at points | ||||||
|  | where the bottom line is not defined (due to a null point or start/end of line), | ||||||
|  | the current line will show a gap too. The algorithm comes from the | ||||||
|  | jquery.flot.stack.js plugin, possibly some code could be shared. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ( $ ) { | ||||||
|  |  | ||||||
|  | 	var options = { | ||||||
|  | 		series: { | ||||||
|  | 			fillBetween: null	// or number | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	function init( plot ) { | ||||||
|  |  | ||||||
|  | 		function findBottomSeries( s, allseries ) { | ||||||
|  |  | ||||||
|  | 			var i; | ||||||
|  |  | ||||||
|  | 			for ( i = 0; i < allseries.length; ++i ) { | ||||||
|  | 				if ( allseries[ i ].id === s.fillBetween ) { | ||||||
|  | 					return allseries[ i ]; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if ( typeof s.fillBetween === "number" ) { | ||||||
|  | 				if ( s.fillBetween < 0 || s.fillBetween >= allseries.length ) { | ||||||
|  | 					return null; | ||||||
|  | 				} | ||||||
|  | 				return allseries[ s.fillBetween ]; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return null; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function computeFillBottoms( plot, s, datapoints ) { | ||||||
|  |  | ||||||
|  | 			if ( s.fillBetween == null ) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			var other = findBottomSeries( s, plot.getData() ); | ||||||
|  |  | ||||||
|  | 			if ( !other ) { | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			var ps = datapoints.pointsize, | ||||||
|  | 				points = datapoints.points, | ||||||
|  | 				otherps = other.datapoints.pointsize, | ||||||
|  | 				otherpoints = other.datapoints.points, | ||||||
|  | 				newpoints = [], | ||||||
|  | 				px, py, intery, qx, qy, bottom, | ||||||
|  | 				withlines = s.lines.show, | ||||||
|  | 				withbottom = ps > 2 && datapoints.format[2].y, | ||||||
|  | 				withsteps = withlines && s.lines.steps, | ||||||
|  | 				fromgap = true, | ||||||
|  | 				i = 0, | ||||||
|  | 				j = 0, | ||||||
|  | 				l, m; | ||||||
|  |  | ||||||
|  | 			while ( true ) { | ||||||
|  |  | ||||||
|  | 				if ( i >= points.length ) { | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				l = newpoints.length; | ||||||
|  |  | ||||||
|  | 				if ( points[ i ] == null ) { | ||||||
|  |  | ||||||
|  | 					// copy gaps | ||||||
|  |  | ||||||
|  | 					for ( m = 0; m < ps; ++m ) { | ||||||
|  | 						newpoints.push( points[ i + m ] ); | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					i += ps; | ||||||
|  |  | ||||||
|  | 				} else if ( j >= otherpoints.length ) { | ||||||
|  |  | ||||||
|  | 					// for lines, we can't use the rest of the points | ||||||
|  |  | ||||||
|  | 					if ( !withlines ) { | ||||||
|  | 						for ( m = 0; m < ps; ++m ) { | ||||||
|  | 							newpoints.push( points[ i + m ] ); | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					i += ps; | ||||||
|  |  | ||||||
|  | 				} else if ( otherpoints[ j ] == null ) { | ||||||
|  |  | ||||||
|  | 					// oops, got a gap | ||||||
|  |  | ||||||
|  | 					for ( m = 0; m < ps; ++m ) { | ||||||
|  | 						newpoints.push( null ); | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					fromgap = true; | ||||||
|  | 					j += otherps; | ||||||
|  |  | ||||||
|  | 				} else { | ||||||
|  |  | ||||||
|  | 					// cases where we actually got two points | ||||||
|  |  | ||||||
|  | 					px = points[ i ]; | ||||||
|  | 					py = points[ i + 1 ]; | ||||||
|  | 					qx = otherpoints[ j ]; | ||||||
|  | 					qy = otherpoints[ j + 1 ]; | ||||||
|  | 					bottom = 0; | ||||||
|  |  | ||||||
|  | 					if ( px === qx ) { | ||||||
|  |  | ||||||
|  | 						for ( m = 0; m < ps; ++m ) { | ||||||
|  | 							newpoints.push( points[ i + m ] ); | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						//newpoints[ l + 1 ] += qy; | ||||||
|  | 						bottom = qy; | ||||||
|  |  | ||||||
|  | 						i += ps; | ||||||
|  | 						j += otherps; | ||||||
|  |  | ||||||
|  | 					} else if ( px > qx ) { | ||||||
|  |  | ||||||
|  | 						// we got past point below, might need to | ||||||
|  | 						// insert interpolated extra point | ||||||
|  |  | ||||||
|  | 						if ( withlines && i > 0 && points[ i - ps ] != null ) { | ||||||
|  | 							intery = py + ( points[ i - ps + 1 ] - py ) * ( qx - px ) / ( points[ i - ps ] - px ); | ||||||
|  | 							newpoints.push( qx ); | ||||||
|  | 							newpoints.push( intery ); | ||||||
|  | 							for ( m = 2; m < ps; ++m ) { | ||||||
|  | 								newpoints.push( points[ i + m ] ); | ||||||
|  | 							} | ||||||
|  | 							bottom = qy; | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						j += otherps; | ||||||
|  |  | ||||||
|  | 					} else { // px < qx | ||||||
|  |  | ||||||
|  | 						// if we come from a gap, we just skip this point | ||||||
|  |  | ||||||
|  | 						if ( fromgap && withlines ) { | ||||||
|  | 							i += ps; | ||||||
|  | 							continue; | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						for ( m = 0; m < ps; ++m ) { | ||||||
|  | 							newpoints.push( points[ i + m ] ); | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						// we might be able to interpolate a point below, | ||||||
|  | 						// this can give us a better y | ||||||
|  |  | ||||||
|  | 						if ( withlines && j > 0 && otherpoints[ j - otherps ] != null ) { | ||||||
|  | 							bottom = qy + ( otherpoints[ j - otherps + 1 ] - qy ) * ( px - qx ) / ( otherpoints[ j - otherps ] - qx ); | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						//newpoints[l + 1] += bottom; | ||||||
|  |  | ||||||
|  | 						i += ps; | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					fromgap = false; | ||||||
|  |  | ||||||
|  | 					if ( l !== newpoints.length && withbottom ) { | ||||||
|  | 						newpoints[ l + 2 ] = bottom; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				// maintain the line steps invariant | ||||||
|  |  | ||||||
|  | 				if ( withsteps && l !== newpoints.length && l > 0 && | ||||||
|  | 					newpoints[ l ] !== null && | ||||||
|  | 					newpoints[ l ] !== newpoints[ l - ps ] && | ||||||
|  | 					newpoints[ l + 1 ] !== newpoints[ l - ps + 1 ] ) { | ||||||
|  | 					for (m = 0; m < ps; ++m) { | ||||||
|  | 						newpoints[ l + ps + m ] = newpoints[ l + m ]; | ||||||
|  | 					} | ||||||
|  | 					newpoints[ l + 1 ] = newpoints[ l - ps + 1 ]; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			datapoints.points = newpoints; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		plot.hooks.processDatapoints.push( computeFillBottoms ); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	$.plot.plugins.push({ | ||||||
|  | 		init: init, | ||||||
|  | 		options: options, | ||||||
|  | 		name: "fillbetween", | ||||||
|  | 		version: "1.0" | ||||||
|  | 	}); | ||||||
|  |  | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										241
									
								
								static/vendor/flot/jquery.flot.image.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,241 @@ | |||||||
|  | /* Flot plugin for plotting images. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and | ||||||
|  | (x2, y2) are where you intend the two opposite corners of the image to end up | ||||||
|  | in the plot. Image must be a fully loaded Javascript image (you can make one | ||||||
|  | with new Image()). If the image is not complete, it's skipped when plotting. | ||||||
|  |  | ||||||
|  | There are two helpers included for retrieving images. The easiest work the way | ||||||
|  | that you put in URLs instead of images in the data, like this: | ||||||
|  |  | ||||||
|  | 	[ "myimage.png", 0, 0, 10, 10 ] | ||||||
|  |  | ||||||
|  | Then call $.plot.image.loadData( data, options, callback ) where data and | ||||||
|  | options are the same as you pass in to $.plot. This loads the images, replaces | ||||||
|  | the URLs in the data with the corresponding images and calls "callback" when | ||||||
|  | all images are loaded (or failed loading). In the callback, you can then call | ||||||
|  | $.plot with the data set. See the included example. | ||||||
|  |  | ||||||
|  | A more low-level helper, $.plot.image.load(urls, callback) is also included. | ||||||
|  | Given a list of URLs, it calls callback with an object mapping from URL to | ||||||
|  | Image object when all images are loaded or have failed loading. | ||||||
|  |  | ||||||
|  | The plugin supports these options: | ||||||
|  |  | ||||||
|  | 	series: { | ||||||
|  | 		images: { | ||||||
|  | 			show: boolean | ||||||
|  | 			anchor: "corner" or "center" | ||||||
|  | 			alpha: [ 0, 1 ] | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | They can be specified for a specific series: | ||||||
|  |  | ||||||
|  | 	$.plot( $("#placeholder"), [{ | ||||||
|  | 		data: [ ... ], | ||||||
|  | 		images: { ... } | ||||||
|  | 	]) | ||||||
|  |  | ||||||
|  | Note that because the data format is different from usual data points, you | ||||||
|  | can't use images with anything else in a specific data series. | ||||||
|  |  | ||||||
|  | Setting "anchor" to "center" causes the pixels in the image to be anchored at | ||||||
|  | the corner pixel centers inside of at the pixel corners, effectively letting | ||||||
|  | half a pixel stick out to each side in the plot. | ||||||
|  |  | ||||||
|  | A possible future direction could be support for tiling for large images (like | ||||||
|  | Google Maps). | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     var options = { | ||||||
|  |         series: { | ||||||
|  |             images: { | ||||||
|  |                 show: false, | ||||||
|  |                 alpha: 1, | ||||||
|  |                 anchor: "corner" // or "center" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     $.plot.image = {}; | ||||||
|  |  | ||||||
|  |     $.plot.image.loadDataImages = function (series, options, callback) { | ||||||
|  |         var urls = [], points = []; | ||||||
|  |  | ||||||
|  |         var defaultShow = options.series.images.show; | ||||||
|  |          | ||||||
|  |         $.each(series, function (i, s) { | ||||||
|  |             if (!(defaultShow || s.images.show)) | ||||||
|  |                 return; | ||||||
|  |              | ||||||
|  |             if (s.data) | ||||||
|  |                 s = s.data; | ||||||
|  |  | ||||||
|  |             $.each(s, function (i, p) { | ||||||
|  |                 if (typeof p[0] == "string") { | ||||||
|  |                     urls.push(p[0]); | ||||||
|  |                     points.push(p); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         $.plot.image.load(urls, function (loadedImages) { | ||||||
|  |             $.each(points, function (i, p) { | ||||||
|  |                 var url = p[0]; | ||||||
|  |                 if (loadedImages[url]) | ||||||
|  |                     p[0] = loadedImages[url]; | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             callback(); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.image.load = function (urls, callback) { | ||||||
|  |         var missing = urls.length, loaded = {}; | ||||||
|  |         if (missing == 0) | ||||||
|  |             callback({}); | ||||||
|  |  | ||||||
|  |         $.each(urls, function (i, url) { | ||||||
|  |             var handler = function () { | ||||||
|  |                 --missing; | ||||||
|  |                  | ||||||
|  |                 loaded[url] = this; | ||||||
|  |                  | ||||||
|  |                 if (missing == 0) | ||||||
|  |                     callback(loaded); | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             $('<img />').load(handler).error(handler).attr('src', url); | ||||||
|  |         }); | ||||||
|  |     }; | ||||||
|  |      | ||||||
|  |     function drawSeries(plot, ctx, series) { | ||||||
|  |         var plotOffset = plot.getPlotOffset(); | ||||||
|  |          | ||||||
|  |         if (!series.images || !series.images.show) | ||||||
|  |             return; | ||||||
|  |          | ||||||
|  |         var points = series.datapoints.points, | ||||||
|  |             ps = series.datapoints.pointsize; | ||||||
|  |          | ||||||
|  |         for (var i = 0; i < points.length; i += ps) { | ||||||
|  |             var img = points[i], | ||||||
|  |                 x1 = points[i + 1], y1 = points[i + 2], | ||||||
|  |                 x2 = points[i + 3], y2 = points[i + 4], | ||||||
|  |                 xaxis = series.xaxis, yaxis = series.yaxis, | ||||||
|  |                 tmp; | ||||||
|  |  | ||||||
|  |             // actually we should check img.complete, but it | ||||||
|  |             // appears to be a somewhat unreliable indicator in | ||||||
|  |             // IE6 (false even after load event) | ||||||
|  |             if (!img || img.width <= 0 || img.height <= 0) | ||||||
|  |                 continue; | ||||||
|  |  | ||||||
|  |             if (x1 > x2) { | ||||||
|  |                 tmp = x2; | ||||||
|  |                 x2 = x1; | ||||||
|  |                 x1 = tmp; | ||||||
|  |             } | ||||||
|  |             if (y1 > y2) { | ||||||
|  |                 tmp = y2; | ||||||
|  |                 y2 = y1; | ||||||
|  |                 y1 = tmp; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             // if the anchor is at the center of the pixel, expand the  | ||||||
|  |             // image by 1/2 pixel in each direction | ||||||
|  |             if (series.images.anchor == "center") { | ||||||
|  |                 tmp = 0.5 * (x2-x1) / (img.width - 1); | ||||||
|  |                 x1 -= tmp; | ||||||
|  |                 x2 += tmp; | ||||||
|  |                 tmp = 0.5 * (y2-y1) / (img.height - 1); | ||||||
|  |                 y1 -= tmp; | ||||||
|  |                 y2 += tmp; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             // clip | ||||||
|  |             if (x1 == x2 || y1 == y2 || | ||||||
|  |                 x1 >= xaxis.max || x2 <= xaxis.min || | ||||||
|  |                 y1 >= yaxis.max || y2 <= yaxis.min) | ||||||
|  |                 continue; | ||||||
|  |  | ||||||
|  |             var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height; | ||||||
|  |             if (x1 < xaxis.min) { | ||||||
|  |                 sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1); | ||||||
|  |                 x1 = xaxis.min; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (x2 > xaxis.max) { | ||||||
|  |                 sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1); | ||||||
|  |                 x2 = xaxis.max; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (y1 < yaxis.min) { | ||||||
|  |                 sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1); | ||||||
|  |                 y1 = yaxis.min; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (y2 > yaxis.max) { | ||||||
|  |                 sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1); | ||||||
|  |                 y2 = yaxis.max; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             x1 = xaxis.p2c(x1); | ||||||
|  |             x2 = xaxis.p2c(x2); | ||||||
|  |             y1 = yaxis.p2c(y1); | ||||||
|  |             y2 = yaxis.p2c(y2); | ||||||
|  |              | ||||||
|  |             // the transformation may have swapped us | ||||||
|  |             if (x1 > x2) { | ||||||
|  |                 tmp = x2; | ||||||
|  |                 x2 = x1; | ||||||
|  |                 x1 = tmp; | ||||||
|  |             } | ||||||
|  |             if (y1 > y2) { | ||||||
|  |                 tmp = y2; | ||||||
|  |                 y2 = y1; | ||||||
|  |                 y1 = tmp; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             tmp = ctx.globalAlpha; | ||||||
|  |             ctx.globalAlpha *= series.images.alpha; | ||||||
|  |             ctx.drawImage(img, | ||||||
|  |                           sx1, sy1, sx2 - sx1, sy2 - sy1, | ||||||
|  |                           x1 + plotOffset.left, y1 + plotOffset.top, | ||||||
|  |                           x2 - x1, y2 - y1); | ||||||
|  |             ctx.globalAlpha = tmp; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function processRawData(plot, series, data, datapoints) { | ||||||
|  |         if (!series.images.show) | ||||||
|  |             return; | ||||||
|  |  | ||||||
|  |         // format is Image, x1, y1, x2, y2 (opposite corners) | ||||||
|  |         datapoints.format = [ | ||||||
|  |             { required: true }, | ||||||
|  |             { x: true, number: true, required: true }, | ||||||
|  |             { y: true, number: true, required: true }, | ||||||
|  |             { x: true, number: true, required: true }, | ||||||
|  |             { y: true, number: true, required: true } | ||||||
|  |         ]; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     function init(plot) { | ||||||
|  |         plot.hooks.processRawData.push(processRawData); | ||||||
|  |         plot.hooks.drawSeries.push(drawSeries); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: options, | ||||||
|  |         name: 'image', | ||||||
|  |         version: '1.1' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										3168
									
								
								static/vendor/flot/jquery.flot.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										346
									
								
								static/vendor/flot/jquery.flot.navigate.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,346 @@ | |||||||
|  | /* Flot plugin for adding the ability to pan and zoom the plot. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The default behaviour is double click and scrollwheel up/down to zoom in, drag | ||||||
|  | to pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and | ||||||
|  | plot.pan( offset ) so you easily can add custom controls. It also fires | ||||||
|  | "plotpan" and "plotzoom" events, useful for synchronizing plots. | ||||||
|  |  | ||||||
|  | The plugin supports these options: | ||||||
|  |  | ||||||
|  | 	zoom: { | ||||||
|  | 		interactive: false | ||||||
|  | 		trigger: "dblclick" // or "click" for single click | ||||||
|  | 		amount: 1.5         // 2 = 200% (zoom in), 0.5 = 50% (zoom out) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	pan: { | ||||||
|  | 		interactive: false | ||||||
|  | 		cursor: "move"      // CSS mouse cursor value used when dragging, e.g. "pointer" | ||||||
|  | 		frameRate: 20 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	xaxis, yaxis, x2axis, y2axis: { | ||||||
|  | 		zoomRange: null  // or [ number, number ] (min range, max range) or false | ||||||
|  | 		panRange: null   // or [ number, number ] (min, max) or false | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | "interactive" enables the built-in drag/click behaviour. If you enable | ||||||
|  | interactive for pan, then you'll have a basic plot that supports moving | ||||||
|  | around; the same for zoom. | ||||||
|  |  | ||||||
|  | "amount" specifies the default amount to zoom in (so 1.5 = 150%) relative to | ||||||
|  | the current viewport. | ||||||
|  |  | ||||||
|  | "cursor" is a standard CSS mouse cursor string used for visual feedback to the | ||||||
|  | user when dragging. | ||||||
|  |  | ||||||
|  | "frameRate" specifies the maximum number of times per second the plot will | ||||||
|  | update itself while the user is panning around on it (set to null to disable | ||||||
|  | intermediate pans, the plot will then not update until the mouse button is | ||||||
|  | released). | ||||||
|  |  | ||||||
|  | "zoomRange" is the interval in which zooming can happen, e.g. with zoomRange: | ||||||
|  | [1, 100] the zoom will never scale the axis so that the difference between min | ||||||
|  | and max is smaller than 1 or larger than 100. You can set either end to null | ||||||
|  | to ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis | ||||||
|  | will be disabled. | ||||||
|  |  | ||||||
|  | "panRange" confines the panning to stay within a range, e.g. with panRange: | ||||||
|  | [-10, 20] panning stops at -10 in one end and at 20 in the other. Either can | ||||||
|  | be null, e.g. [-10, null]. If you set panRange to false, panning on that axis | ||||||
|  | will be disabled. | ||||||
|  |  | ||||||
|  | Example API usage: | ||||||
|  |  | ||||||
|  | 	plot = $.plot(...); | ||||||
|  |  | ||||||
|  | 	// zoom default amount in on the pixel ( 10, 20 ) | ||||||
|  | 	plot.zoom({ center: { left: 10, top: 20 } }); | ||||||
|  |  | ||||||
|  | 	// zoom out again | ||||||
|  | 	plot.zoomOut({ center: { left: 10, top: 20 } }); | ||||||
|  |  | ||||||
|  | 	// zoom 200% in on the pixel (10, 20) | ||||||
|  | 	plot.zoom({ amount: 2, center: { left: 10, top: 20 } }); | ||||||
|  |  | ||||||
|  | 	// pan 100 pixels to the left and 20 down | ||||||
|  | 	plot.pan({ left: -100, top: 20 }) | ||||||
|  |  | ||||||
|  | Here, "center" specifies where the center of the zooming should happen. Note | ||||||
|  | that this is defined in pixel space, not the space of the data points (you can | ||||||
|  | use the p2c helpers on the axes in Flot to help you convert between these). | ||||||
|  |  | ||||||
|  | "amount" is the amount to zoom the viewport relative to the current range, so | ||||||
|  | 1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You | ||||||
|  | can set the default in the options. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | // First two dependencies, jquery.event.drag.js and | ||||||
|  | // jquery.mousewheel.js, we put them inline here to save people the | ||||||
|  | // effort of downloading them. | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com) | ||||||
|  | Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt | ||||||
|  | */ | ||||||
|  | (function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,"dragstart",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case"mousemove":if(d.dragging){if(k=f(h,"drag",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type="mouseup"}case"mouseup":b.remove(document,"mousemove mouseup",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,"dragend",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?"off":"on",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?"":"none"))}a.fn.drag=function(a,b,c){return b&&this.bind("dragstart",a),c&&this.bind("dragend",c),a?this.bind("drag",b?b:a):this.trigger("drag")};var b=a.event,c=b.special,d=c.drag={not:":input",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,"mousedown",e,c),this.attachEvent&&this.attachEvent("ondragstart",h)},teardown:function(){b.remove(this,"mousedown",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent("ondragstart",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery); | ||||||
|  |  | ||||||
|  | /* jquery.mousewheel.min.js | ||||||
|  |  * Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) | ||||||
|  |  * Licensed under the MIT License (LICENSE.txt). | ||||||
|  |  * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. | ||||||
|  |  * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. | ||||||
|  |  * Thanks to: Seamus Leahy for adding deltaX and deltaY | ||||||
|  |  * | ||||||
|  |  * Version: 3.0.6 | ||||||
|  |  * | ||||||
|  |  * Requires: 1.2.2+ | ||||||
|  |  */ | ||||||
|  | (function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     var options = { | ||||||
|  |         xaxis: { | ||||||
|  |             zoomRange: null, // or [number, number] (min range, max range) | ||||||
|  |             panRange: null // or [number, number] (min, max) | ||||||
|  |         }, | ||||||
|  |         zoom: { | ||||||
|  |             interactive: false, | ||||||
|  |             trigger: "dblclick", // or "click" for single click | ||||||
|  |             amount: 1.5 // how much to zoom relative to current position, 2 = 200% (zoom in), 0.5 = 50% (zoom out) | ||||||
|  |         }, | ||||||
|  |         pan: { | ||||||
|  |             interactive: false, | ||||||
|  |             cursor: "move", | ||||||
|  |             frameRate: 20 | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     function init(plot) { | ||||||
|  |         function onZoomClick(e, zoomOut) { | ||||||
|  |             var c = plot.offset(); | ||||||
|  |             c.left = e.pageX - c.left; | ||||||
|  |             c.top = e.pageY - c.top; | ||||||
|  |             if (zoomOut) | ||||||
|  |                 plot.zoomOut({ center: c }); | ||||||
|  |             else | ||||||
|  |                 plot.zoom({ center: c }); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function onMouseWheel(e, delta) { | ||||||
|  |             e.preventDefault(); | ||||||
|  |             onZoomClick(e, delta < 0); | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         var prevCursor = 'default', prevPageX = 0, prevPageY = 0, | ||||||
|  |             panTimeout = null; | ||||||
|  |  | ||||||
|  |         function onDragStart(e) { | ||||||
|  |             if (e.which != 1)  // only accept left-click | ||||||
|  |                 return false; | ||||||
|  |             var c = plot.getPlaceholder().css('cursor'); | ||||||
|  |             if (c) | ||||||
|  |                 prevCursor = c; | ||||||
|  |             plot.getPlaceholder().css('cursor', plot.getOptions().pan.cursor); | ||||||
|  |             prevPageX = e.pageX; | ||||||
|  |             prevPageY = e.pageY; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         function onDrag(e) { | ||||||
|  |             var frameRate = plot.getOptions().pan.frameRate; | ||||||
|  |             if (panTimeout || !frameRate) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             panTimeout = setTimeout(function () { | ||||||
|  |                 plot.pan({ left: prevPageX - e.pageX, | ||||||
|  |                            top: prevPageY - e.pageY }); | ||||||
|  |                 prevPageX = e.pageX; | ||||||
|  |                 prevPageY = e.pageY; | ||||||
|  |                                                      | ||||||
|  |                 panTimeout = null; | ||||||
|  |             }, 1 / frameRate * 1000); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function onDragEnd(e) { | ||||||
|  |             if (panTimeout) { | ||||||
|  |                 clearTimeout(panTimeout); | ||||||
|  |                 panTimeout = null; | ||||||
|  |             } | ||||||
|  |                      | ||||||
|  |             plot.getPlaceholder().css('cursor', prevCursor); | ||||||
|  |             plot.pan({ left: prevPageX - e.pageX, | ||||||
|  |                        top: prevPageY - e.pageY }); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         function bindEvents(plot, eventHolder) { | ||||||
|  |             var o = plot.getOptions(); | ||||||
|  |             if (o.zoom.interactive) { | ||||||
|  |                 eventHolder[o.zoom.trigger](onZoomClick); | ||||||
|  |                 eventHolder.mousewheel(onMouseWheel); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (o.pan.interactive) { | ||||||
|  |                 eventHolder.bind("dragstart", { distance: 10 }, onDragStart); | ||||||
|  |                 eventHolder.bind("drag", onDrag); | ||||||
|  |                 eventHolder.bind("dragend", onDragEnd); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         plot.zoomOut = function (args) { | ||||||
|  |             if (!args) | ||||||
|  |                 args = {}; | ||||||
|  |              | ||||||
|  |             if (!args.amount) | ||||||
|  |                 args.amount = plot.getOptions().zoom.amount; | ||||||
|  |  | ||||||
|  |             args.amount = 1 / args.amount; | ||||||
|  |             plot.zoom(args); | ||||||
|  |         }; | ||||||
|  |          | ||||||
|  |         plot.zoom = function (args) { | ||||||
|  |             if (!args) | ||||||
|  |                 args = {}; | ||||||
|  |              | ||||||
|  |             var c = args.center, | ||||||
|  |                 amount = args.amount || plot.getOptions().zoom.amount, | ||||||
|  |                 w = plot.width(), h = plot.height(); | ||||||
|  |  | ||||||
|  |             if (!c) | ||||||
|  |                 c = { left: w / 2, top: h / 2 }; | ||||||
|  |                  | ||||||
|  |             var xf = c.left / w, | ||||||
|  |                 yf = c.top / h, | ||||||
|  |                 minmax = { | ||||||
|  |                     x: { | ||||||
|  |                         min: c.left - xf * w / amount, | ||||||
|  |                         max: c.left + (1 - xf) * w / amount | ||||||
|  |                     }, | ||||||
|  |                     y: { | ||||||
|  |                         min: c.top - yf * h / amount, | ||||||
|  |                         max: c.top + (1 - yf) * h / amount | ||||||
|  |                     } | ||||||
|  |                 }; | ||||||
|  |  | ||||||
|  |             $.each(plot.getAxes(), function(_, axis) { | ||||||
|  |                 var opts = axis.options, | ||||||
|  |                     min = minmax[axis.direction].min, | ||||||
|  |                     max = minmax[axis.direction].max, | ||||||
|  |                     zr = opts.zoomRange, | ||||||
|  |                     pr = opts.panRange; | ||||||
|  |  | ||||||
|  |                 if (zr === false) // no zooming on this axis | ||||||
|  |                     return; | ||||||
|  |                      | ||||||
|  |                 min = axis.c2p(min); | ||||||
|  |                 max = axis.c2p(max); | ||||||
|  |                 if (min > max) { | ||||||
|  |                     // make sure min < max | ||||||
|  |                     var tmp = min; | ||||||
|  |                     min = max; | ||||||
|  |                     max = tmp; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 //Check that we are in panRange | ||||||
|  |                 if (pr) { | ||||||
|  |                     if (pr[0] != null && min < pr[0]) { | ||||||
|  |                         min = pr[0]; | ||||||
|  |                     } | ||||||
|  |                     if (pr[1] != null && max > pr[1]) { | ||||||
|  |                         max = pr[1]; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 var range = max - min; | ||||||
|  |                 if (zr && | ||||||
|  |                     ((zr[0] != null && range < zr[0] && amount >1) || | ||||||
|  |                      (zr[1] != null && range > zr[1] && amount <1))) | ||||||
|  |                     return; | ||||||
|  |              | ||||||
|  |                 opts.min = min; | ||||||
|  |                 opts.max = max; | ||||||
|  |             }); | ||||||
|  |              | ||||||
|  |             plot.setupGrid(); | ||||||
|  |             plot.draw(); | ||||||
|  |              | ||||||
|  |             if (!args.preventEvent) | ||||||
|  |                 plot.getPlaceholder().trigger("plotzoom", [ plot, args ]); | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         plot.pan = function (args) { | ||||||
|  |             var delta = { | ||||||
|  |                 x: +args.left, | ||||||
|  |                 y: +args.top | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             if (isNaN(delta.x)) | ||||||
|  |                 delta.x = 0; | ||||||
|  |             if (isNaN(delta.y)) | ||||||
|  |                 delta.y = 0; | ||||||
|  |  | ||||||
|  |             $.each(plot.getAxes(), function (_, axis) { | ||||||
|  |                 var opts = axis.options, | ||||||
|  |                     min, max, d = delta[axis.direction]; | ||||||
|  |  | ||||||
|  |                 min = axis.c2p(axis.p2c(axis.min) + d), | ||||||
|  |                 max = axis.c2p(axis.p2c(axis.max) + d); | ||||||
|  |  | ||||||
|  |                 var pr = opts.panRange; | ||||||
|  |                 if (pr === false) // no panning on this axis | ||||||
|  |                     return; | ||||||
|  |                  | ||||||
|  |                 if (pr) { | ||||||
|  |                     // check whether we hit the wall | ||||||
|  |                     if (pr[0] != null && pr[0] > min) { | ||||||
|  |                         d = pr[0] - min; | ||||||
|  |                         min += d; | ||||||
|  |                         max += d; | ||||||
|  |                     } | ||||||
|  |                      | ||||||
|  |                     if (pr[1] != null && pr[1] < max) { | ||||||
|  |                         d = pr[1] - max; | ||||||
|  |                         min += d; | ||||||
|  |                         max += d; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                  | ||||||
|  |                 opts.min = min; | ||||||
|  |                 opts.max = max; | ||||||
|  |             }); | ||||||
|  |              | ||||||
|  |             plot.setupGrid(); | ||||||
|  |             plot.draw(); | ||||||
|  |              | ||||||
|  |             if (!args.preventEvent) | ||||||
|  |                 plot.getPlaceholder().trigger("plotpan", [ plot, args ]); | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         function shutdown(plot, eventHolder) { | ||||||
|  |             eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick); | ||||||
|  |             eventHolder.unbind("mousewheel", onMouseWheel); | ||||||
|  |             eventHolder.unbind("dragstart", onDragStart); | ||||||
|  |             eventHolder.unbind("drag", onDrag); | ||||||
|  |             eventHolder.unbind("dragend", onDragEnd); | ||||||
|  |             if (panTimeout) | ||||||
|  |                 clearTimeout(panTimeout); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         plot.hooks.bindEvents.push(bindEvents); | ||||||
|  |         plot.hooks.shutdown.push(shutdown); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: options, | ||||||
|  |         name: 'navigate', | ||||||
|  |         version: '1.3' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										820
									
								
								static/vendor/flot/jquery.flot.pie.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,820 @@ | |||||||
|  | /* Flot plugin for rendering pie charts. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The plugin assumes that each series has a single data value, and that each | ||||||
|  | value is a positive integer or zero.  Negative numbers don't make sense for a | ||||||
|  | pie chart, and have unpredictable results.  The values do NOT need to be | ||||||
|  | passed in as percentages; the plugin will calculate the total and per-slice | ||||||
|  | percentages internally. | ||||||
|  |  | ||||||
|  | * Created by Brian Medendorp | ||||||
|  |  | ||||||
|  | * Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars | ||||||
|  |  | ||||||
|  | The plugin supports these options: | ||||||
|  |  | ||||||
|  | 	series: { | ||||||
|  | 		pie: { | ||||||
|  | 			show: true/false | ||||||
|  | 			radius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto' | ||||||
|  | 			innerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect | ||||||
|  | 			startAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result | ||||||
|  | 			tilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show) | ||||||
|  | 			offset: { | ||||||
|  | 				top: integer value to move the pie up or down | ||||||
|  | 				left: integer value to move the pie left or right, or 'auto' | ||||||
|  | 			}, | ||||||
|  | 			stroke: { | ||||||
|  | 				color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF') | ||||||
|  | 				width: integer pixel width of the stroke | ||||||
|  | 			}, | ||||||
|  | 			label: { | ||||||
|  | 				show: true/false, or 'auto' | ||||||
|  | 				formatter:  a user-defined function that modifies the text/style of the label text | ||||||
|  | 				radius: 0-1 for percentage of fullsize, or a specified pixel length | ||||||
|  | 				background: { | ||||||
|  | 					color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000') | ||||||
|  | 					opacity: 0-1 | ||||||
|  | 				}, | ||||||
|  | 				threshold: 0-1 for the percentage value at which to hide labels (if they're too small) | ||||||
|  | 			}, | ||||||
|  | 			combine: { | ||||||
|  | 				threshold: 0-1 for the percentage value at which to combine slices (if they're too small) | ||||||
|  | 				color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined | ||||||
|  | 				label: any text value of what the combined slice should be labeled | ||||||
|  | 			} | ||||||
|  | 			highlight: { | ||||||
|  | 				opacity: 0-1 | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | More detail and specific examples can be found in the included HTML file. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function($) { | ||||||
|  |  | ||||||
|  | 	// Maximum redraw attempts when fitting labels within the plot | ||||||
|  |  | ||||||
|  | 	var REDRAW_ATTEMPTS = 10; | ||||||
|  |  | ||||||
|  | 	// Factor by which to shrink the pie when fitting labels within the plot | ||||||
|  |  | ||||||
|  | 	var REDRAW_SHRINK = 0.95; | ||||||
|  |  | ||||||
|  | 	function init(plot) { | ||||||
|  |  | ||||||
|  | 		var canvas = null, | ||||||
|  | 			target = null, | ||||||
|  | 			options = null, | ||||||
|  | 			maxRadius = null, | ||||||
|  | 			centerLeft = null, | ||||||
|  | 			centerTop = null, | ||||||
|  | 			processed = false, | ||||||
|  | 			ctx = null; | ||||||
|  |  | ||||||
|  | 		// interactive variables | ||||||
|  |  | ||||||
|  | 		var highlights = []; | ||||||
|  |  | ||||||
|  | 		// add hook to determine if pie plugin in enabled, and then perform necessary operations | ||||||
|  |  | ||||||
|  | 		plot.hooks.processOptions.push(function(plot, options) { | ||||||
|  | 			if (options.series.pie.show) { | ||||||
|  |  | ||||||
|  | 				options.grid.show = false; | ||||||
|  |  | ||||||
|  | 				// set labels.show | ||||||
|  |  | ||||||
|  | 				if (options.series.pie.label.show == "auto") { | ||||||
|  | 					if (options.legend.show) { | ||||||
|  | 						options.series.pie.label.show = false; | ||||||
|  | 					} else { | ||||||
|  | 						options.series.pie.label.show = true; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				// set radius | ||||||
|  |  | ||||||
|  | 				if (options.series.pie.radius == "auto") { | ||||||
|  | 					if (options.series.pie.label.show) { | ||||||
|  | 						options.series.pie.radius = 3/4; | ||||||
|  | 					} else { | ||||||
|  | 						options.series.pie.radius = 1; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				// ensure sane tilt | ||||||
|  |  | ||||||
|  | 				if (options.series.pie.tilt > 1) { | ||||||
|  | 					options.series.pie.tilt = 1; | ||||||
|  | 				} else if (options.series.pie.tilt < 0) { | ||||||
|  | 					options.series.pie.tilt = 0; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		plot.hooks.bindEvents.push(function(plot, eventHolder) { | ||||||
|  | 			var options = plot.getOptions(); | ||||||
|  | 			if (options.series.pie.show) { | ||||||
|  | 				if (options.grid.hoverable) { | ||||||
|  | 					eventHolder.unbind("mousemove").mousemove(onMouseMove); | ||||||
|  | 				} | ||||||
|  | 				if (options.grid.clickable) { | ||||||
|  | 					eventHolder.unbind("click").click(onClick); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		plot.hooks.processDatapoints.push(function(plot, series, data, datapoints) { | ||||||
|  | 			var options = plot.getOptions(); | ||||||
|  | 			if (options.series.pie.show) { | ||||||
|  | 				processDatapoints(plot, series, data, datapoints); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		plot.hooks.drawOverlay.push(function(plot, octx) { | ||||||
|  | 			var options = plot.getOptions(); | ||||||
|  | 			if (options.series.pie.show) { | ||||||
|  | 				drawOverlay(plot, octx); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		plot.hooks.draw.push(function(plot, newCtx) { | ||||||
|  | 			var options = plot.getOptions(); | ||||||
|  | 			if (options.series.pie.show) { | ||||||
|  | 				draw(plot, newCtx); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		function processDatapoints(plot, series, datapoints) { | ||||||
|  | 			if (!processed)	{ | ||||||
|  | 				processed = true; | ||||||
|  | 				canvas = plot.getCanvas(); | ||||||
|  | 				target = $(canvas).parent(); | ||||||
|  | 				options = plot.getOptions(); | ||||||
|  | 				plot.setData(combine(plot.getData())); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function combine(data) { | ||||||
|  |  | ||||||
|  | 			var total = 0, | ||||||
|  | 				combined = 0, | ||||||
|  | 				numCombined = 0, | ||||||
|  | 				color = options.series.pie.combine.color, | ||||||
|  | 				newdata = []; | ||||||
|  |  | ||||||
|  | 			// Fix up the raw data from Flot, ensuring the data is numeric | ||||||
|  |  | ||||||
|  | 			for (var i = 0; i < data.length; ++i) { | ||||||
|  |  | ||||||
|  | 				var value = data[i].data; | ||||||
|  |  | ||||||
|  | 				// If the data is an array, we'll assume that it's a standard | ||||||
|  | 				// Flot x-y pair, and are concerned only with the second value. | ||||||
|  |  | ||||||
|  | 				// Note how we use the original array, rather than creating a | ||||||
|  | 				// new one; this is more efficient and preserves any extra data | ||||||
|  | 				// that the user may have stored in higher indexes. | ||||||
|  |  | ||||||
|  | 				if ($.isArray(value) && value.length == 1) { | ||||||
|  |     				value = value[0]; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				if ($.isArray(value)) { | ||||||
|  | 					// Equivalent to $.isNumeric() but compatible with jQuery < 1.7 | ||||||
|  | 					if (!isNaN(parseFloat(value[1])) && isFinite(value[1])) { | ||||||
|  | 						value[1] = +value[1]; | ||||||
|  | 					} else { | ||||||
|  | 						value[1] = 0; | ||||||
|  | 					} | ||||||
|  | 				} else if (!isNaN(parseFloat(value)) && isFinite(value)) { | ||||||
|  | 					value = [1, +value]; | ||||||
|  | 				} else { | ||||||
|  | 					value = [1, 0]; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				data[i].data = [value]; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Sum up all the slices, so we can calculate percentages for each | ||||||
|  |  | ||||||
|  | 			for (var i = 0; i < data.length; ++i) { | ||||||
|  | 				total += data[i].data[0][1]; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// Count the number of slices with percentages below the combine | ||||||
|  | 			// threshold; if it turns out to be just one, we won't combine. | ||||||
|  |  | ||||||
|  | 			for (var i = 0; i < data.length; ++i) { | ||||||
|  | 				var value = data[i].data[0][1]; | ||||||
|  | 				if (value / total <= options.series.pie.combine.threshold) { | ||||||
|  | 					combined += value; | ||||||
|  | 					numCombined++; | ||||||
|  | 					if (!color) { | ||||||
|  | 						color = data[i].color; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			for (var i = 0; i < data.length; ++i) { | ||||||
|  | 				var value = data[i].data[0][1]; | ||||||
|  | 				if (numCombined < 2 || value / total > options.series.pie.combine.threshold) { | ||||||
|  | 					newdata.push( | ||||||
|  | 						$.extend(data[i], {     /* extend to allow keeping all other original data values | ||||||
|  | 						                           and using them e.g. in labelFormatter. */ | ||||||
|  | 							data: [[1, value]], | ||||||
|  | 							color: data[i].color, | ||||||
|  | 							label: data[i].label, | ||||||
|  | 							angle: value * Math.PI * 2 / total, | ||||||
|  | 							percent: value / (total / 100) | ||||||
|  | 						}) | ||||||
|  | 					); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if (numCombined > 1) { | ||||||
|  | 				newdata.push({ | ||||||
|  | 					data: [[1, combined]], | ||||||
|  | 					color: color, | ||||||
|  | 					label: options.series.pie.combine.label, | ||||||
|  | 					angle: combined * Math.PI * 2 / total, | ||||||
|  | 					percent: combined / (total / 100) | ||||||
|  | 				}); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return newdata; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function draw(plot, newCtx) { | ||||||
|  |  | ||||||
|  | 			if (!target) { | ||||||
|  | 				return; // if no series were passed | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			var canvasWidth = plot.getPlaceholder().width(), | ||||||
|  | 				canvasHeight = plot.getPlaceholder().height(), | ||||||
|  | 				legendWidth = target.children().filter(".legend").children().width() || 0; | ||||||
|  |  | ||||||
|  | 			ctx = newCtx; | ||||||
|  |  | ||||||
|  | 			// WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE! | ||||||
|  |  | ||||||
|  | 			// When combining smaller slices into an 'other' slice, we need to | ||||||
|  | 			// add a new series.  Since Flot gives plugins no way to modify the | ||||||
|  | 			// list of series, the pie plugin uses a hack where the first call | ||||||
|  | 			// to processDatapoints results in a call to setData with the new | ||||||
|  | 			// list of series, then subsequent processDatapoints do nothing. | ||||||
|  |  | ||||||
|  | 			// The plugin-global 'processed' flag is used to control this hack; | ||||||
|  | 			// it starts out false, and is set to true after the first call to | ||||||
|  | 			// processDatapoints. | ||||||
|  |  | ||||||
|  | 			// Unfortunately this turns future setData calls into no-ops; they | ||||||
|  | 			// call processDatapoints, the flag is true, and nothing happens. | ||||||
|  |  | ||||||
|  | 			// To fix this we'll set the flag back to false here in draw, when | ||||||
|  | 			// all series have been processed, so the next sequence of calls to | ||||||
|  | 			// processDatapoints once again starts out with a slice-combine. | ||||||
|  | 			// This is really a hack; in 0.9 we need to give plugins a proper | ||||||
|  | 			// way to modify series before any processing begins. | ||||||
|  |  | ||||||
|  | 			processed = false; | ||||||
|  |  | ||||||
|  | 			// calculate maximum radius and center point | ||||||
|  |  | ||||||
|  | 			maxRadius =  Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2; | ||||||
|  | 			centerTop = canvasHeight / 2 + options.series.pie.offset.top; | ||||||
|  | 			centerLeft = canvasWidth / 2; | ||||||
|  |  | ||||||
|  | 			if (options.series.pie.offset.left == "auto") { | ||||||
|  | 				if (options.legend.position.match("w")) { | ||||||
|  | 					centerLeft += legendWidth / 2; | ||||||
|  | 				} else { | ||||||
|  | 					centerLeft -= legendWidth / 2; | ||||||
|  | 				} | ||||||
|  | 				if (centerLeft < maxRadius) { | ||||||
|  | 					centerLeft = maxRadius; | ||||||
|  | 				} else if (centerLeft > canvasWidth - maxRadius) { | ||||||
|  | 					centerLeft = canvasWidth - maxRadius; | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				centerLeft += options.series.pie.offset.left; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			var slices = plot.getData(), | ||||||
|  | 				attempts = 0; | ||||||
|  |  | ||||||
|  | 			// Keep shrinking the pie's radius until drawPie returns true, | ||||||
|  | 			// indicating that all the labels fit, or we try too many times. | ||||||
|  |  | ||||||
|  | 			do { | ||||||
|  | 				if (attempts > 0) { | ||||||
|  | 					maxRadius *= REDRAW_SHRINK; | ||||||
|  | 				} | ||||||
|  | 				attempts += 1; | ||||||
|  | 				clear(); | ||||||
|  | 				if (options.series.pie.tilt <= 0.8) { | ||||||
|  | 					drawShadow(); | ||||||
|  | 				} | ||||||
|  | 			} while (!drawPie() && attempts < REDRAW_ATTEMPTS) | ||||||
|  |  | ||||||
|  | 			if (attempts >= REDRAW_ATTEMPTS) { | ||||||
|  | 				clear(); | ||||||
|  | 				target.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>"); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if (plot.setSeries && plot.insertLegend) { | ||||||
|  | 				plot.setSeries(slices); | ||||||
|  | 				plot.insertLegend(); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// we're actually done at this point, just defining internal functions at this point | ||||||
|  |  | ||||||
|  | 			function clear() { | ||||||
|  | 				ctx.clearRect(0, 0, canvasWidth, canvasHeight); | ||||||
|  | 				target.children().filter(".pieLabel, .pieLabelBackground").remove(); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			function drawShadow() { | ||||||
|  |  | ||||||
|  | 				var shadowLeft = options.series.pie.shadow.left; | ||||||
|  | 				var shadowTop = options.series.pie.shadow.top; | ||||||
|  | 				var edge = 10; | ||||||
|  | 				var alpha = options.series.pie.shadow.alpha; | ||||||
|  | 				var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; | ||||||
|  |  | ||||||
|  | 				if (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) { | ||||||
|  | 					return;	// shadow would be outside canvas, so don't draw it | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				ctx.save(); | ||||||
|  | 				ctx.translate(shadowLeft,shadowTop); | ||||||
|  | 				ctx.globalAlpha = alpha; | ||||||
|  | 				ctx.fillStyle = "#000"; | ||||||
|  |  | ||||||
|  | 				// center and rotate to starting position | ||||||
|  |  | ||||||
|  | 				ctx.translate(centerLeft,centerTop); | ||||||
|  | 				ctx.scale(1, options.series.pie.tilt); | ||||||
|  |  | ||||||
|  | 				//radius -= edge; | ||||||
|  |  | ||||||
|  | 				for (var i = 1; i <= edge; i++) { | ||||||
|  | 					ctx.beginPath(); | ||||||
|  | 					ctx.arc(0, 0, radius, 0, Math.PI * 2, false); | ||||||
|  | 					ctx.fill(); | ||||||
|  | 					radius -= i; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				ctx.restore(); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			function drawPie() { | ||||||
|  |  | ||||||
|  | 				var startAngle = Math.PI * options.series.pie.startAngle; | ||||||
|  | 				var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; | ||||||
|  |  | ||||||
|  | 				// center and rotate to starting position | ||||||
|  |  | ||||||
|  | 				ctx.save(); | ||||||
|  | 				ctx.translate(centerLeft,centerTop); | ||||||
|  | 				ctx.scale(1, options.series.pie.tilt); | ||||||
|  | 				//ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera | ||||||
|  |  | ||||||
|  | 				// draw slices | ||||||
|  |  | ||||||
|  | 				ctx.save(); | ||||||
|  | 				var currentAngle = startAngle; | ||||||
|  | 				for (var i = 0; i < slices.length; ++i) { | ||||||
|  | 					slices[i].startAngle = currentAngle; | ||||||
|  | 					drawSlice(slices[i].angle, slices[i].color, true); | ||||||
|  | 				} | ||||||
|  | 				ctx.restore(); | ||||||
|  |  | ||||||
|  | 				// draw slice outlines | ||||||
|  |  | ||||||
|  | 				if (options.series.pie.stroke.width > 0) { | ||||||
|  | 					ctx.save(); | ||||||
|  | 					ctx.lineWidth = options.series.pie.stroke.width; | ||||||
|  | 					currentAngle = startAngle; | ||||||
|  | 					for (var i = 0; i < slices.length; ++i) { | ||||||
|  | 						drawSlice(slices[i].angle, options.series.pie.stroke.color, false); | ||||||
|  | 					} | ||||||
|  | 					ctx.restore(); | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				// draw donut hole | ||||||
|  |  | ||||||
|  | 				drawDonutHole(ctx); | ||||||
|  |  | ||||||
|  | 				ctx.restore(); | ||||||
|  |  | ||||||
|  | 				// Draw the labels, returning true if they fit within the plot | ||||||
|  |  | ||||||
|  | 				if (options.series.pie.label.show) { | ||||||
|  | 					return drawLabels(); | ||||||
|  | 				} else return true; | ||||||
|  |  | ||||||
|  | 				function drawSlice(angle, color, fill) { | ||||||
|  |  | ||||||
|  | 					if (angle <= 0 || isNaN(angle)) { | ||||||
|  | 						return; | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					if (fill) { | ||||||
|  | 						ctx.fillStyle = color; | ||||||
|  | 					} else { | ||||||
|  | 						ctx.strokeStyle = color; | ||||||
|  | 						ctx.lineJoin = "round"; | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					ctx.beginPath(); | ||||||
|  | 					if (Math.abs(angle - Math.PI * 2) > 0.000000001) { | ||||||
|  | 						ctx.moveTo(0, 0); // Center of the pie | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					//ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera | ||||||
|  | 					ctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false); | ||||||
|  | 					ctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false); | ||||||
|  | 					ctx.closePath(); | ||||||
|  | 					//ctx.rotate(angle); // This doesn't work properly in Opera | ||||||
|  | 					currentAngle += angle; | ||||||
|  |  | ||||||
|  | 					if (fill) { | ||||||
|  | 						ctx.fill(); | ||||||
|  | 					} else { | ||||||
|  | 						ctx.stroke(); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				function drawLabels() { | ||||||
|  |  | ||||||
|  | 					var currentAngle = startAngle; | ||||||
|  | 					var radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius; | ||||||
|  |  | ||||||
|  | 					for (var i = 0; i < slices.length; ++i) { | ||||||
|  | 						if (slices[i].percent >= options.series.pie.label.threshold * 100) { | ||||||
|  | 							if (!drawLabel(slices[i], currentAngle, i)) { | ||||||
|  | 								return false; | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 						currentAngle += slices[i].angle; | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					return true; | ||||||
|  |  | ||||||
|  | 					function drawLabel(slice, startAngle, index) { | ||||||
|  |  | ||||||
|  | 						if (slice.data[0][1] == 0) { | ||||||
|  | 							return true; | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						// format label text | ||||||
|  |  | ||||||
|  | 						var lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter; | ||||||
|  |  | ||||||
|  | 						if (lf) { | ||||||
|  | 							text = lf(slice.label, slice); | ||||||
|  | 						} else { | ||||||
|  | 							text = slice.label; | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						if (plf) { | ||||||
|  | 							text = plf(text, slice); | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						var halfAngle = ((startAngle + slice.angle) + startAngle) / 2; | ||||||
|  | 						var x = centerLeft + Math.round(Math.cos(halfAngle) * radius); | ||||||
|  | 						var y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt; | ||||||
|  |  | ||||||
|  | 						var html = "<span class='pieLabel' id='pieLabel" + index + "' style='position:absolute;top:" + y + "px;left:" + x + "px;'>" + text + "</span>"; | ||||||
|  | 						target.append(html); | ||||||
|  |  | ||||||
|  | 						var label = target.children("#pieLabel" + index); | ||||||
|  | 						var labelTop = (y - label.height() / 2); | ||||||
|  | 						var labelLeft = (x - label.width() / 2); | ||||||
|  |  | ||||||
|  | 						label.css("top", labelTop); | ||||||
|  | 						label.css("left", labelLeft); | ||||||
|  |  | ||||||
|  | 						// check to make sure that the label is not outside the canvas | ||||||
|  |  | ||||||
|  | 						if (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) { | ||||||
|  | 							return false; | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						if (options.series.pie.label.background.opacity != 0) { | ||||||
|  |  | ||||||
|  | 							// put in the transparent background separately to avoid blended labels and label boxes | ||||||
|  |  | ||||||
|  | 							var c = options.series.pie.label.background.color; | ||||||
|  |  | ||||||
|  | 							if (c == null) { | ||||||
|  | 								c = slice.color; | ||||||
|  | 							} | ||||||
|  |  | ||||||
|  | 							var pos = "top:" + labelTop + "px;left:" + labelLeft + "px;"; | ||||||
|  | 							$("<div class='pieLabelBackground' style='position:absolute;width:" + label.width() + "px;height:" + label.height() + "px;" + pos + "background-color:" + c + ";'></div>") | ||||||
|  | 								.css("opacity", options.series.pie.label.background.opacity) | ||||||
|  | 								.insertBefore(label); | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						return true; | ||||||
|  | 					} // end individual label function | ||||||
|  | 				} // end drawLabels function | ||||||
|  | 			} // end drawPie function | ||||||
|  | 		} // end draw function | ||||||
|  |  | ||||||
|  | 		// Placed here because it needs to be accessed from multiple locations | ||||||
|  |  | ||||||
|  | 		function drawDonutHole(layer) { | ||||||
|  | 			if (options.series.pie.innerRadius > 0) { | ||||||
|  |  | ||||||
|  | 				// subtract the center | ||||||
|  |  | ||||||
|  | 				layer.save(); | ||||||
|  | 				var innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius; | ||||||
|  | 				layer.globalCompositeOperation = "destination-out"; // this does not work with excanvas, but it will fall back to using the stroke color | ||||||
|  | 				layer.beginPath(); | ||||||
|  | 				layer.fillStyle = options.series.pie.stroke.color; | ||||||
|  | 				layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false); | ||||||
|  | 				layer.fill(); | ||||||
|  | 				layer.closePath(); | ||||||
|  | 				layer.restore(); | ||||||
|  |  | ||||||
|  | 				// add inner stroke | ||||||
|  |  | ||||||
|  | 				layer.save(); | ||||||
|  | 				layer.beginPath(); | ||||||
|  | 				layer.strokeStyle = options.series.pie.stroke.color; | ||||||
|  | 				layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false); | ||||||
|  | 				layer.stroke(); | ||||||
|  | 				layer.closePath(); | ||||||
|  | 				layer.restore(); | ||||||
|  |  | ||||||
|  | 				// TODO: add extra shadow inside hole (with a mask) if the pie is tilted. | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		//-- Additional Interactive related functions -- | ||||||
|  |  | ||||||
|  | 		function isPointInPoly(poly, pt) { | ||||||
|  | 			for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i) | ||||||
|  | 				((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1])) | ||||||
|  | 				&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0]) | ||||||
|  | 				&& (c = !c); | ||||||
|  | 			return c; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function findNearbySlice(mouseX, mouseY) { | ||||||
|  |  | ||||||
|  | 			var slices = plot.getData(), | ||||||
|  | 				options = plot.getOptions(), | ||||||
|  | 				radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius, | ||||||
|  | 				x, y; | ||||||
|  |  | ||||||
|  | 			for (var i = 0; i < slices.length; ++i) { | ||||||
|  |  | ||||||
|  | 				var s = slices[i]; | ||||||
|  |  | ||||||
|  | 				if (s.pie.show) { | ||||||
|  |  | ||||||
|  | 					ctx.save(); | ||||||
|  | 					ctx.beginPath(); | ||||||
|  | 					ctx.moveTo(0, 0); // Center of the pie | ||||||
|  | 					//ctx.scale(1, options.series.pie.tilt);	// this actually seems to break everything when here. | ||||||
|  | 					ctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false); | ||||||
|  | 					ctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false); | ||||||
|  | 					ctx.closePath(); | ||||||
|  | 					x = mouseX - centerLeft; | ||||||
|  | 					y = mouseY - centerTop; | ||||||
|  |  | ||||||
|  | 					if (ctx.isPointInPath) { | ||||||
|  | 						if (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) { | ||||||
|  | 							ctx.restore(); | ||||||
|  | 							return { | ||||||
|  | 								datapoint: [s.percent, s.data], | ||||||
|  | 								dataIndex: 0, | ||||||
|  | 								series: s, | ||||||
|  | 								seriesIndex: i | ||||||
|  | 							}; | ||||||
|  | 						} | ||||||
|  | 					} else { | ||||||
|  |  | ||||||
|  | 						// excanvas for IE doesn;t support isPointInPath, this is a workaround. | ||||||
|  |  | ||||||
|  | 						var p1X = radius * Math.cos(s.startAngle), | ||||||
|  | 							p1Y = radius * Math.sin(s.startAngle), | ||||||
|  | 							p2X = radius * Math.cos(s.startAngle + s.angle / 4), | ||||||
|  | 							p2Y = radius * Math.sin(s.startAngle + s.angle / 4), | ||||||
|  | 							p3X = radius * Math.cos(s.startAngle + s.angle / 2), | ||||||
|  | 							p3Y = radius * Math.sin(s.startAngle + s.angle / 2), | ||||||
|  | 							p4X = radius * Math.cos(s.startAngle + s.angle / 1.5), | ||||||
|  | 							p4Y = radius * Math.sin(s.startAngle + s.angle / 1.5), | ||||||
|  | 							p5X = radius * Math.cos(s.startAngle + s.angle), | ||||||
|  | 							p5Y = radius * Math.sin(s.startAngle + s.angle), | ||||||
|  | 							arrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]], | ||||||
|  | 							arrPoint = [x, y]; | ||||||
|  |  | ||||||
|  | 						// TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt? | ||||||
|  |  | ||||||
|  | 						if (isPointInPoly(arrPoly, arrPoint)) { | ||||||
|  | 							ctx.restore(); | ||||||
|  | 							return { | ||||||
|  | 								datapoint: [s.percent, s.data], | ||||||
|  | 								dataIndex: 0, | ||||||
|  | 								series: s, | ||||||
|  | 								seriesIndex: i | ||||||
|  | 							}; | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  |  | ||||||
|  | 					ctx.restore(); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			return null; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function onMouseMove(e) { | ||||||
|  | 			triggerClickHoverEvent("plothover", e); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function onClick(e) { | ||||||
|  | 			triggerClickHoverEvent("plotclick", e); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// trigger click or hover event (they send the same parameters so we share their code) | ||||||
|  |  | ||||||
|  | 		function triggerClickHoverEvent(eventname, e) { | ||||||
|  |  | ||||||
|  | 			var offset = plot.offset(); | ||||||
|  | 			var canvasX = parseInt(e.pageX - offset.left); | ||||||
|  | 			var canvasY =  parseInt(e.pageY - offset.top); | ||||||
|  | 			var item = findNearbySlice(canvasX, canvasY); | ||||||
|  |  | ||||||
|  | 			if (options.grid.autoHighlight) { | ||||||
|  |  | ||||||
|  | 				// clear auto-highlights | ||||||
|  |  | ||||||
|  | 				for (var i = 0; i < highlights.length; ++i) { | ||||||
|  | 					var h = highlights[i]; | ||||||
|  | 					if (h.auto == eventname && !(item && h.series == item.series)) { | ||||||
|  | 						unhighlight(h.series); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// highlight the slice | ||||||
|  |  | ||||||
|  | 			if (item) { | ||||||
|  | 				highlight(item.series, eventname); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			// trigger any hover bind events | ||||||
|  |  | ||||||
|  | 			var pos = { pageX: e.pageX, pageY: e.pageY }; | ||||||
|  | 			target.trigger(eventname, [pos, item]); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function highlight(s, auto) { | ||||||
|  | 			//if (typeof s == "number") { | ||||||
|  | 			//	s = series[s]; | ||||||
|  | 			//} | ||||||
|  |  | ||||||
|  | 			var i = indexOfHighlight(s); | ||||||
|  |  | ||||||
|  | 			if (i == -1) { | ||||||
|  | 				highlights.push({ series: s, auto: auto }); | ||||||
|  | 				plot.triggerRedrawOverlay(); | ||||||
|  | 			} else if (!auto) { | ||||||
|  | 				highlights[i].auto = false; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function unhighlight(s) { | ||||||
|  | 			if (s == null) { | ||||||
|  | 				highlights = []; | ||||||
|  | 				plot.triggerRedrawOverlay(); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			//if (typeof s == "number") { | ||||||
|  | 			//	s = series[s]; | ||||||
|  | 			//} | ||||||
|  |  | ||||||
|  | 			var i = indexOfHighlight(s); | ||||||
|  |  | ||||||
|  | 			if (i != -1) { | ||||||
|  | 				highlights.splice(i, 1); | ||||||
|  | 				plot.triggerRedrawOverlay(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function indexOfHighlight(s) { | ||||||
|  | 			for (var i = 0; i < highlights.length; ++i) { | ||||||
|  | 				var h = highlights[i]; | ||||||
|  | 				if (h.series == s) | ||||||
|  | 					return i; | ||||||
|  | 			} | ||||||
|  | 			return -1; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		function drawOverlay(plot, octx) { | ||||||
|  |  | ||||||
|  | 			var options = plot.getOptions(); | ||||||
|  |  | ||||||
|  | 			var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; | ||||||
|  |  | ||||||
|  | 			octx.save(); | ||||||
|  | 			octx.translate(centerLeft, centerTop); | ||||||
|  | 			octx.scale(1, options.series.pie.tilt); | ||||||
|  |  | ||||||
|  | 			for (var i = 0; i < highlights.length; ++i) { | ||||||
|  | 				drawHighlight(highlights[i].series); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			drawDonutHole(octx); | ||||||
|  |  | ||||||
|  | 			octx.restore(); | ||||||
|  |  | ||||||
|  | 			function drawHighlight(series) { | ||||||
|  |  | ||||||
|  | 				if (series.angle <= 0 || isNaN(series.angle)) { | ||||||
|  | 					return; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				//octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString(); | ||||||
|  | 				octx.fillStyle = "rgba(255, 255, 255, " + options.series.pie.highlight.opacity + ")"; // this is temporary until we have access to parseColor | ||||||
|  | 				octx.beginPath(); | ||||||
|  | 				if (Math.abs(series.angle - Math.PI * 2) > 0.000000001) { | ||||||
|  | 					octx.moveTo(0, 0); // Center of the pie | ||||||
|  | 				} | ||||||
|  | 				octx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false); | ||||||
|  | 				octx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false); | ||||||
|  | 				octx.closePath(); | ||||||
|  | 				octx.fill(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} // end init (plugin body) | ||||||
|  |  | ||||||
|  | 	// define pie specific options and their default values | ||||||
|  |  | ||||||
|  | 	var options = { | ||||||
|  | 		series: { | ||||||
|  | 			pie: { | ||||||
|  | 				show: false, | ||||||
|  | 				radius: "auto",	// actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value) | ||||||
|  | 				innerRadius: 0, /* for donut */ | ||||||
|  | 				startAngle: 3/2, | ||||||
|  | 				tilt: 1, | ||||||
|  | 				shadow: { | ||||||
|  | 					left: 5,	// shadow left offset | ||||||
|  | 					top: 15,	// shadow top offset | ||||||
|  | 					alpha: 0.02	// shadow alpha | ||||||
|  | 				}, | ||||||
|  | 				offset: { | ||||||
|  | 					top: 0, | ||||||
|  | 					left: "auto" | ||||||
|  | 				}, | ||||||
|  | 				stroke: { | ||||||
|  | 					color: "#fff", | ||||||
|  | 					width: 1 | ||||||
|  | 				}, | ||||||
|  | 				label: { | ||||||
|  | 					show: "auto", | ||||||
|  | 					formatter: function(label, slice) { | ||||||
|  | 						return "<div style='font-size:x-small;text-align:center;padding:2px;color:" + slice.color + ";'>" + label + "<br/>" + Math.round(slice.percent) + "%</div>"; | ||||||
|  | 					},	// formatter function | ||||||
|  | 					radius: 1,	// radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value) | ||||||
|  | 					background: { | ||||||
|  | 						color: null, | ||||||
|  | 						opacity: 0 | ||||||
|  | 					}, | ||||||
|  | 					threshold: 0	// percentage at which to hide the label (i.e. the slice is too narrow) | ||||||
|  | 				}, | ||||||
|  | 				combine: { | ||||||
|  | 					threshold: -1,	// percentage at which to combine little slices into one larger slice | ||||||
|  | 					color: null,	// color to give the new slice (auto-generated if null) | ||||||
|  | 					label: "Other"	// label to give the new slice | ||||||
|  | 				}, | ||||||
|  | 				highlight: { | ||||||
|  | 					//color: "#fff",		// will add this functionality once parseColor is available | ||||||
|  | 					opacity: 0.5 | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	$.plot.plugins.push({ | ||||||
|  | 		init: init, | ||||||
|  | 		options: options, | ||||||
|  | 		name: "pie", | ||||||
|  | 		version: "1.1" | ||||||
|  | 	}); | ||||||
|  |  | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										59
									
								
								static/vendor/flot/jquery.flot.resize.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,59 @@ | |||||||
|  | /* Flot plugin for automatically redrawing plots as the placeholder resizes. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | It works by listening for changes on the placeholder div (through the jQuery | ||||||
|  | resize event plugin) - if the size changes, it will redraw the plot. | ||||||
|  |  | ||||||
|  | There are no options. If you need to disable the plugin for some plots, you | ||||||
|  | can just fix the size of their placeholders. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | /* Inline dependency: | ||||||
|  |  * jQuery resize event - v1.1 - 3/14/2010 | ||||||
|  |  * http://benalman.com/projects/jquery-resize-plugin/ | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2010 "Cowboy" Ben Alman | ||||||
|  |  * Dual licensed under the MIT and GPL licenses. | ||||||
|  |  * http://benalman.com/about/license/ | ||||||
|  |  */ | ||||||
|  | (function($,e,t){"$:nomunge";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s="setTimeout",u="resize",m=u+"-special-event",o="pendingDelay",l="activeDelay",f="throttleWindow";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(":visible")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(jQuery,this); | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     var options = { }; // no options | ||||||
|  |  | ||||||
|  |     function init(plot) { | ||||||
|  |         function onResize() { | ||||||
|  |             var placeholder = plot.getPlaceholder(); | ||||||
|  |  | ||||||
|  |             // somebody might have hidden us and we can't plot | ||||||
|  |             // when we don't have the dimensions | ||||||
|  |             if (placeholder.width() == 0 || placeholder.height() == 0) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             plot.resize(); | ||||||
|  |             plot.setupGrid(); | ||||||
|  |             plot.draw(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         function bindEvents(plot, eventHolder) { | ||||||
|  |             plot.getPlaceholder().resize(onResize); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function shutdown(plot, eventHolder) { | ||||||
|  |             plot.getPlaceholder().unbind("resize", onResize); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         plot.hooks.bindEvents.push(bindEvents); | ||||||
|  |         plot.hooks.shutdown.push(shutdown); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: options, | ||||||
|  |         name: 'resize', | ||||||
|  |         version: '1.0' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										360
									
								
								static/vendor/flot/jquery.flot.selection.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,360 @@ | |||||||
|  | /* Flot plugin for selecting regions of a plot. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The plugin supports these options: | ||||||
|  |  | ||||||
|  | selection: { | ||||||
|  | 	mode: null or "x" or "y" or "xy", | ||||||
|  | 	color: color, | ||||||
|  | 	shape: "round" or "miter" or "bevel", | ||||||
|  | 	minSize: number of pixels | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Selection support is enabled by setting the mode to one of "x", "y" or "xy". | ||||||
|  | In "x" mode, the user will only be able to specify the x range, similarly for | ||||||
|  | "y" mode. For "xy", the selection becomes a rectangle where both ranges can be | ||||||
|  | specified. "color" is color of the selection (if you need to change the color | ||||||
|  | later on, you can get to it with plot.getOptions().selection.color). "shape" | ||||||
|  | is the shape of the corners of the selection. | ||||||
|  |  | ||||||
|  | "minSize" is the minimum size a selection can be in pixels. This value can | ||||||
|  | be customized to determine the smallest size a selection can be and still | ||||||
|  | have the selection rectangle be displayed. When customizing this value, the | ||||||
|  | fact that it refers to pixels, not axis units must be taken into account. | ||||||
|  | Thus, for example, if there is a bar graph in time mode with BarWidth set to 1 | ||||||
|  | minute, setting "minSize" to 1 will not make the minimum selection size 1 | ||||||
|  | minute, but rather 1 pixel. Note also that setting "minSize" to 0 will prevent | ||||||
|  | "plotunselected" events from being fired when the user clicks the mouse without | ||||||
|  | dragging. | ||||||
|  |  | ||||||
|  | When selection support is enabled, a "plotselected" event will be emitted on | ||||||
|  | the DOM element you passed into the plot function. The event handler gets a | ||||||
|  | parameter with the ranges selected on the axes, like this: | ||||||
|  |  | ||||||
|  | 	placeholder.bind( "plotselected", function( event, ranges ) { | ||||||
|  | 		alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to) | ||||||
|  | 		// similar for yaxis - with multiple axes, the extra ones are in | ||||||
|  | 		// x2axis, x3axis, ... | ||||||
|  | 	}); | ||||||
|  |  | ||||||
|  | The "plotselected" event is only fired when the user has finished making the | ||||||
|  | selection. A "plotselecting" event is fired during the process with the same | ||||||
|  | parameters as the "plotselected" event, in case you want to know what's | ||||||
|  | happening while it's happening, | ||||||
|  |  | ||||||
|  | A "plotunselected" event with no arguments is emitted when the user clicks the | ||||||
|  | mouse to remove the selection. As stated above, setting "minSize" to 0 will | ||||||
|  | destroy this behavior. | ||||||
|  |  | ||||||
|  | The plugin allso adds the following methods to the plot object: | ||||||
|  |  | ||||||
|  | - setSelection( ranges, preventEvent ) | ||||||
|  |  | ||||||
|  |   Set the selection rectangle. The passed in ranges is on the same form as | ||||||
|  |   returned in the "plotselected" event. If the selection mode is "x", you | ||||||
|  |   should put in either an xaxis range, if the mode is "y" you need to put in | ||||||
|  |   an yaxis range and both xaxis and yaxis if the selection mode is "xy", like | ||||||
|  |   this: | ||||||
|  |  | ||||||
|  | 	setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } }); | ||||||
|  |  | ||||||
|  |   setSelection will trigger the "plotselected" event when called. If you don't | ||||||
|  |   want that to happen, e.g. if you're inside a "plotselected" handler, pass | ||||||
|  |   true as the second parameter. If you are using multiple axes, you can | ||||||
|  |   specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of | ||||||
|  |   xaxis, the plugin picks the first one it sees. | ||||||
|  |  | ||||||
|  | - clearSelection( preventEvent ) | ||||||
|  |  | ||||||
|  |   Clear the selection rectangle. Pass in true to avoid getting a | ||||||
|  |   "plotunselected" event. | ||||||
|  |  | ||||||
|  | - getSelection() | ||||||
|  |  | ||||||
|  |   Returns the current selection in the same format as the "plotselected" | ||||||
|  |   event. If there's currently no selection, the function returns null. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     function init(plot) { | ||||||
|  |         var selection = { | ||||||
|  |                 first: { x: -1, y: -1}, second: { x: -1, y: -1}, | ||||||
|  |                 show: false, | ||||||
|  |                 active: false | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |         // FIXME: The drag handling implemented here should be | ||||||
|  |         // abstracted out, there's some similar code from a library in | ||||||
|  |         // the navigation plugin, this should be massaged a bit to fit | ||||||
|  |         // the Flot cases here better and reused. Doing this would | ||||||
|  |         // make this plugin much slimmer. | ||||||
|  |         var savedhandlers = {}; | ||||||
|  |  | ||||||
|  |         var mouseUpHandler = null; | ||||||
|  |          | ||||||
|  |         function onMouseMove(e) { | ||||||
|  |             if (selection.active) { | ||||||
|  |                 updateSelection(e); | ||||||
|  |                  | ||||||
|  |                 plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function onMouseDown(e) { | ||||||
|  |             if (e.which != 1)  // only accept left-click | ||||||
|  |                 return; | ||||||
|  |              | ||||||
|  |             // cancel out any text selections | ||||||
|  |             document.body.focus(); | ||||||
|  |  | ||||||
|  |             // prevent text selection and drag in old-school browsers | ||||||
|  |             if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) { | ||||||
|  |                 savedhandlers.onselectstart = document.onselectstart; | ||||||
|  |                 document.onselectstart = function () { return false; }; | ||||||
|  |             } | ||||||
|  |             if (document.ondrag !== undefined && savedhandlers.ondrag == null) { | ||||||
|  |                 savedhandlers.ondrag = document.ondrag; | ||||||
|  |                 document.ondrag = function () { return false; }; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             setSelectionPos(selection.first, e); | ||||||
|  |  | ||||||
|  |             selection.active = true; | ||||||
|  |  | ||||||
|  |             // this is a bit silly, but we have to use a closure to be | ||||||
|  |             // able to whack the same handler again | ||||||
|  |             mouseUpHandler = function (e) { onMouseUp(e); }; | ||||||
|  |              | ||||||
|  |             $(document).one("mouseup", mouseUpHandler); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function onMouseUp(e) { | ||||||
|  |             mouseUpHandler = null; | ||||||
|  |              | ||||||
|  |             // revert drag stuff for old-school browsers | ||||||
|  |             if (document.onselectstart !== undefined) | ||||||
|  |                 document.onselectstart = savedhandlers.onselectstart; | ||||||
|  |             if (document.ondrag !== undefined) | ||||||
|  |                 document.ondrag = savedhandlers.ondrag; | ||||||
|  |  | ||||||
|  |             // no more dragging | ||||||
|  |             selection.active = false; | ||||||
|  |             updateSelection(e); | ||||||
|  |  | ||||||
|  |             if (selectionIsSane()) | ||||||
|  |                 triggerSelectedEvent(); | ||||||
|  |             else { | ||||||
|  |                 // this counts as a clear | ||||||
|  |                 plot.getPlaceholder().trigger("plotunselected", [ ]); | ||||||
|  |                 plot.getPlaceholder().trigger("plotselecting", [ null ]); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function getSelection() { | ||||||
|  |             if (!selectionIsSane()) | ||||||
|  |                 return null; | ||||||
|  |              | ||||||
|  |             if (!selection.show) return null; | ||||||
|  |  | ||||||
|  |             var r = {}, c1 = selection.first, c2 = selection.second; | ||||||
|  |             $.each(plot.getAxes(), function (name, axis) { | ||||||
|  |                 if (axis.used) { | ||||||
|  |                     var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]);  | ||||||
|  |                     r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) }; | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |             return r; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function triggerSelectedEvent() { | ||||||
|  |             var r = getSelection(); | ||||||
|  |  | ||||||
|  |             plot.getPlaceholder().trigger("plotselected", [ r ]); | ||||||
|  |  | ||||||
|  |             // backwards-compat stuff, to be removed in future | ||||||
|  |             if (r.xaxis && r.yaxis) | ||||||
|  |                 plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function clamp(min, value, max) { | ||||||
|  |             return value < min ? min: (value > max ? max: value); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function setSelectionPos(pos, e) { | ||||||
|  |             var o = plot.getOptions(); | ||||||
|  |             var offset = plot.getPlaceholder().offset(); | ||||||
|  |             var plotOffset = plot.getPlotOffset(); | ||||||
|  |             pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width()); | ||||||
|  |             pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height()); | ||||||
|  |  | ||||||
|  |             if (o.selection.mode == "y") | ||||||
|  |                 pos.x = pos == selection.first ? 0 : plot.width(); | ||||||
|  |  | ||||||
|  |             if (o.selection.mode == "x") | ||||||
|  |                 pos.y = pos == selection.first ? 0 : plot.height(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function updateSelection(pos) { | ||||||
|  |             if (pos.pageX == null) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             setSelectionPos(selection.second, pos); | ||||||
|  |             if (selectionIsSane()) { | ||||||
|  |                 selection.show = true; | ||||||
|  |                 plot.triggerRedrawOverlay(); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |                 clearSelection(true); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function clearSelection(preventEvent) { | ||||||
|  |             if (selection.show) { | ||||||
|  |                 selection.show = false; | ||||||
|  |                 plot.triggerRedrawOverlay(); | ||||||
|  |                 if (!preventEvent) | ||||||
|  |                     plot.getPlaceholder().trigger("plotunselected", [ ]); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // function taken from markings support in Flot | ||||||
|  |         function extractRange(ranges, coord) { | ||||||
|  |             var axis, from, to, key, axes = plot.getAxes(); | ||||||
|  |  | ||||||
|  |             for (var k in axes) { | ||||||
|  |                 axis = axes[k]; | ||||||
|  |                 if (axis.direction == coord) { | ||||||
|  |                     key = coord + axis.n + "axis"; | ||||||
|  |                     if (!ranges[key] && axis.n == 1) | ||||||
|  |                         key = coord + "axis"; // support x1axis as xaxis | ||||||
|  |                     if (ranges[key]) { | ||||||
|  |                         from = ranges[key].from; | ||||||
|  |                         to = ranges[key].to; | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // backwards-compat stuff - to be removed in future | ||||||
|  |             if (!ranges[key]) { | ||||||
|  |                 axis = coord == "x" ? plot.getXAxes()[0] : plot.getYAxes()[0]; | ||||||
|  |                 from = ranges[coord + "1"]; | ||||||
|  |                 to = ranges[coord + "2"]; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // auto-reverse as an added bonus | ||||||
|  |             if (from != null && to != null && from > to) { | ||||||
|  |                 var tmp = from; | ||||||
|  |                 from = to; | ||||||
|  |                 to = tmp; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             return { from: from, to: to, axis: axis }; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         function setSelection(ranges, preventEvent) { | ||||||
|  |             var axis, range, o = plot.getOptions(); | ||||||
|  |  | ||||||
|  |             if (o.selection.mode == "y") { | ||||||
|  |                 selection.first.x = 0; | ||||||
|  |                 selection.second.x = plot.width(); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 range = extractRange(ranges, "x"); | ||||||
|  |  | ||||||
|  |                 selection.first.x = range.axis.p2c(range.from); | ||||||
|  |                 selection.second.x = range.axis.p2c(range.to); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (o.selection.mode == "x") { | ||||||
|  |                 selection.first.y = 0; | ||||||
|  |                 selection.second.y = plot.height(); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 range = extractRange(ranges, "y"); | ||||||
|  |  | ||||||
|  |                 selection.first.y = range.axis.p2c(range.from); | ||||||
|  |                 selection.second.y = range.axis.p2c(range.to); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             selection.show = true; | ||||||
|  |             plot.triggerRedrawOverlay(); | ||||||
|  |             if (!preventEvent && selectionIsSane()) | ||||||
|  |                 triggerSelectedEvent(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function selectionIsSane() { | ||||||
|  |             var minSize = plot.getOptions().selection.minSize; | ||||||
|  |             return Math.abs(selection.second.x - selection.first.x) >= minSize && | ||||||
|  |                 Math.abs(selection.second.y - selection.first.y) >= minSize; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         plot.clearSelection = clearSelection; | ||||||
|  |         plot.setSelection = setSelection; | ||||||
|  |         plot.getSelection = getSelection; | ||||||
|  |  | ||||||
|  |         plot.hooks.bindEvents.push(function(plot, eventHolder) { | ||||||
|  |             var o = plot.getOptions(); | ||||||
|  |             if (o.selection.mode != null) { | ||||||
|  |                 eventHolder.mousemove(onMouseMove); | ||||||
|  |                 eventHolder.mousedown(onMouseDown); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         plot.hooks.drawOverlay.push(function (plot, ctx) { | ||||||
|  |             // draw selection | ||||||
|  |             if (selection.show && selectionIsSane()) { | ||||||
|  |                 var plotOffset = plot.getPlotOffset(); | ||||||
|  |                 var o = plot.getOptions(); | ||||||
|  |  | ||||||
|  |                 ctx.save(); | ||||||
|  |                 ctx.translate(plotOffset.left, plotOffset.top); | ||||||
|  |  | ||||||
|  |                 var c = $.color.parse(o.selection.color); | ||||||
|  |  | ||||||
|  |                 ctx.strokeStyle = c.scale('a', 0.8).toString(); | ||||||
|  |                 ctx.lineWidth = 1; | ||||||
|  |                 ctx.lineJoin = o.selection.shape; | ||||||
|  |                 ctx.fillStyle = c.scale('a', 0.4).toString(); | ||||||
|  |  | ||||||
|  |                 var x = Math.min(selection.first.x, selection.second.x) + 0.5, | ||||||
|  |                     y = Math.min(selection.first.y, selection.second.y) + 0.5, | ||||||
|  |                     w = Math.abs(selection.second.x - selection.first.x) - 1, | ||||||
|  |                     h = Math.abs(selection.second.y - selection.first.y) - 1; | ||||||
|  |  | ||||||
|  |                 ctx.fillRect(x, y, w, h); | ||||||
|  |                 ctx.strokeRect(x, y, w, h); | ||||||
|  |  | ||||||
|  |                 ctx.restore(); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |          | ||||||
|  |         plot.hooks.shutdown.push(function (plot, eventHolder) { | ||||||
|  |             eventHolder.unbind("mousemove", onMouseMove); | ||||||
|  |             eventHolder.unbind("mousedown", onMouseDown); | ||||||
|  |              | ||||||
|  |             if (mouseUpHandler) | ||||||
|  |                 $(document).unbind("mouseup", mouseUpHandler); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: { | ||||||
|  |             selection: { | ||||||
|  |                 mode: null, // one of null, "x", "y" or "xy" | ||||||
|  |                 color: "#e8cfac", | ||||||
|  |                 shape: "round", // one of "round", "miter", or "bevel" | ||||||
|  |                 minSize: 5 // minimum number of pixels | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         name: 'selection', | ||||||
|  |         version: '1.1' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										188
									
								
								static/vendor/flot/jquery.flot.stack.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,188 @@ | |||||||
|  | /* Flot plugin for stacking data sets rather than overlyaing them. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The plugin assumes the data is sorted on x (or y if stacking horizontally). | ||||||
|  | For line charts, it is assumed that if a line has an undefined gap (from a | ||||||
|  | null point), then the line above it should have the same gap - insert zeros | ||||||
|  | instead of "null" if you want another behaviour. This also holds for the start | ||||||
|  | and end of the chart. Note that stacking a mix of positive and negative values | ||||||
|  | in most instances doesn't make sense (so it looks weird). | ||||||
|  |  | ||||||
|  | Two or more series are stacked when their "stack" attribute is set to the same | ||||||
|  | key (which can be any number or string or just "true"). To specify the default | ||||||
|  | stack, you can set the stack option like this: | ||||||
|  |  | ||||||
|  | 	series: { | ||||||
|  | 		stack: null/false, true, or a key (number/string) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | You can also specify it for a single series, like this: | ||||||
|  |  | ||||||
|  | 	$.plot( $("#placeholder"), [{ | ||||||
|  | 		data: [ ... ], | ||||||
|  | 		stack: true | ||||||
|  | 	}]) | ||||||
|  |  | ||||||
|  | The stacking order is determined by the order of the data series in the array | ||||||
|  | (later series end up on top of the previous). | ||||||
|  |  | ||||||
|  | Internally, the plugin modifies the datapoints in each series, adding an | ||||||
|  | offset to the y value. For line series, extra data points are inserted through | ||||||
|  | interpolation. If there's a second y value, it's also adjusted (e.g for bar | ||||||
|  | charts or filled areas). | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     var options = { | ||||||
|  |         series: { stack: null } // or number/string | ||||||
|  |     }; | ||||||
|  |      | ||||||
|  |     function init(plot) { | ||||||
|  |         function findMatchingSeries(s, allseries) { | ||||||
|  |             var res = null; | ||||||
|  |             for (var i = 0; i < allseries.length; ++i) { | ||||||
|  |                 if (s == allseries[i]) | ||||||
|  |                     break; | ||||||
|  |                  | ||||||
|  |                 if (allseries[i].stack == s.stack) | ||||||
|  |                     res = allseries[i]; | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             return res; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         function stackData(plot, s, datapoints) { | ||||||
|  |             if (s.stack == null || s.stack === false) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             var other = findMatchingSeries(s, plot.getData()); | ||||||
|  |             if (!other) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             var ps = datapoints.pointsize, | ||||||
|  |                 points = datapoints.points, | ||||||
|  |                 otherps = other.datapoints.pointsize, | ||||||
|  |                 otherpoints = other.datapoints.points, | ||||||
|  |                 newpoints = [], | ||||||
|  |                 px, py, intery, qx, qy, bottom, | ||||||
|  |                 withlines = s.lines.show, | ||||||
|  |                 horizontal = s.bars.horizontal, | ||||||
|  |                 withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y), | ||||||
|  |                 withsteps = withlines && s.lines.steps, | ||||||
|  |                 fromgap = true, | ||||||
|  |                 keyOffset = horizontal ? 1 : 0, | ||||||
|  |                 accumulateOffset = horizontal ? 0 : 1, | ||||||
|  |                 i = 0, j = 0, l, m; | ||||||
|  |  | ||||||
|  |             while (true) { | ||||||
|  |                 if (i >= points.length) | ||||||
|  |                     break; | ||||||
|  |  | ||||||
|  |                 l = newpoints.length; | ||||||
|  |  | ||||||
|  |                 if (points[i] == null) { | ||||||
|  |                     // copy gaps | ||||||
|  |                     for (m = 0; m < ps; ++m) | ||||||
|  |                         newpoints.push(points[i + m]); | ||||||
|  |                     i += ps; | ||||||
|  |                 } | ||||||
|  |                 else if (j >= otherpoints.length) { | ||||||
|  |                     // for lines, we can't use the rest of the points | ||||||
|  |                     if (!withlines) { | ||||||
|  |                         for (m = 0; m < ps; ++m) | ||||||
|  |                             newpoints.push(points[i + m]); | ||||||
|  |                     } | ||||||
|  |                     i += ps; | ||||||
|  |                 } | ||||||
|  |                 else if (otherpoints[j] == null) { | ||||||
|  |                     // oops, got a gap | ||||||
|  |                     for (m = 0; m < ps; ++m) | ||||||
|  |                         newpoints.push(null); | ||||||
|  |                     fromgap = true; | ||||||
|  |                     j += otherps; | ||||||
|  |                 } | ||||||
|  |                 else { | ||||||
|  |                     // cases where we actually got two points | ||||||
|  |                     px = points[i + keyOffset]; | ||||||
|  |                     py = points[i + accumulateOffset]; | ||||||
|  |                     qx = otherpoints[j + keyOffset]; | ||||||
|  |                     qy = otherpoints[j + accumulateOffset]; | ||||||
|  |                     bottom = 0; | ||||||
|  |  | ||||||
|  |                     if (px == qx) { | ||||||
|  |                         for (m = 0; m < ps; ++m) | ||||||
|  |                             newpoints.push(points[i + m]); | ||||||
|  |  | ||||||
|  |                         newpoints[l + accumulateOffset] += qy; | ||||||
|  |                         bottom = qy; | ||||||
|  |                          | ||||||
|  |                         i += ps; | ||||||
|  |                         j += otherps; | ||||||
|  |                     } | ||||||
|  |                     else if (px > qx) { | ||||||
|  |                         // we got past point below, might need to | ||||||
|  |                         // insert interpolated extra point | ||||||
|  |                         if (withlines && i > 0 && points[i - ps] != null) { | ||||||
|  |                             intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px); | ||||||
|  |                             newpoints.push(qx); | ||||||
|  |                             newpoints.push(intery + qy); | ||||||
|  |                             for (m = 2; m < ps; ++m) | ||||||
|  |                                 newpoints.push(points[i + m]); | ||||||
|  |                             bottom = qy;  | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         j += otherps; | ||||||
|  |                     } | ||||||
|  |                     else { // px < qx | ||||||
|  |                         if (fromgap && withlines) { | ||||||
|  |                             // if we come from a gap, we just skip this point | ||||||
|  |                             i += ps; | ||||||
|  |                             continue; | ||||||
|  |                         } | ||||||
|  |                              | ||||||
|  |                         for (m = 0; m < ps; ++m) | ||||||
|  |                             newpoints.push(points[i + m]); | ||||||
|  |                          | ||||||
|  |                         // we might be able to interpolate a point below, | ||||||
|  |                         // this can give us a better y | ||||||
|  |                         if (withlines && j > 0 && otherpoints[j - otherps] != null) | ||||||
|  |                             bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx); | ||||||
|  |  | ||||||
|  |                         newpoints[l + accumulateOffset] += bottom; | ||||||
|  |                          | ||||||
|  |                         i += ps; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     fromgap = false; | ||||||
|  |                      | ||||||
|  |                     if (l != newpoints.length && withbottom) | ||||||
|  |                         newpoints[l + 2] += bottom; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 // maintain the line steps invariant | ||||||
|  |                 if (withsteps && l != newpoints.length && l > 0 | ||||||
|  |                     && newpoints[l] != null | ||||||
|  |                     && newpoints[l] != newpoints[l - ps] | ||||||
|  |                     && newpoints[l + 1] != newpoints[l - ps + 1]) { | ||||||
|  |                     for (m = 0; m < ps; ++m) | ||||||
|  |                         newpoints[l + ps + m] = newpoints[l + m]; | ||||||
|  |                     newpoints[l + 1] = newpoints[l - ps + 1]; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             datapoints.points = newpoints; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         plot.hooks.processDatapoints.push(stackData); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: options, | ||||||
|  |         name: 'stack', | ||||||
|  |         version: '1.2' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										71
									
								
								static/vendor/flot/jquery.flot.symbol.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,71 @@ | |||||||
|  | /* Flot plugin that adds some extra symbols for plotting points. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The symbols are accessed as strings through the standard symbol options: | ||||||
|  |  | ||||||
|  | 	series: { | ||||||
|  | 		points: { | ||||||
|  | 			symbol: "square" // or "diamond", "triangle", "cross" | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     function processRawData(plot, series, datapoints) { | ||||||
|  |         // we normalize the area of each symbol so it is approximately the | ||||||
|  |         // same as a circle of the given radius | ||||||
|  |  | ||||||
|  |         var handlers = { | ||||||
|  |             square: function (ctx, x, y, radius, shadow) { | ||||||
|  |                 // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2 | ||||||
|  |                 var size = radius * Math.sqrt(Math.PI) / 2; | ||||||
|  |                 ctx.rect(x - size, y - size, size + size, size + size); | ||||||
|  |             }, | ||||||
|  |             diamond: function (ctx, x, y, radius, shadow) { | ||||||
|  |                 // pi * r^2 = 2s^2  =>  s = r * sqrt(pi/2) | ||||||
|  |                 var size = radius * Math.sqrt(Math.PI / 2); | ||||||
|  |                 ctx.moveTo(x - size, y); | ||||||
|  |                 ctx.lineTo(x, y - size); | ||||||
|  |                 ctx.lineTo(x + size, y); | ||||||
|  |                 ctx.lineTo(x, y + size); | ||||||
|  |                 ctx.lineTo(x - size, y); | ||||||
|  |             }, | ||||||
|  |             triangle: function (ctx, x, y, radius, shadow) { | ||||||
|  |                 // pi * r^2 = 1/2 * s^2 * sin (pi / 3)  =>  s = r * sqrt(2 * pi / sin(pi / 3)) | ||||||
|  |                 var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3)); | ||||||
|  |                 var height = size * Math.sin(Math.PI / 3); | ||||||
|  |                 ctx.moveTo(x - size/2, y + height/2); | ||||||
|  |                 ctx.lineTo(x + size/2, y + height/2); | ||||||
|  |                 if (!shadow) { | ||||||
|  |                     ctx.lineTo(x, y - height/2); | ||||||
|  |                     ctx.lineTo(x - size/2, y + height/2); | ||||||
|  |                 } | ||||||
|  |             }, | ||||||
|  |             cross: function (ctx, x, y, radius, shadow) { | ||||||
|  |                 // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2 | ||||||
|  |                 var size = radius * Math.sqrt(Math.PI) / 2; | ||||||
|  |                 ctx.moveTo(x - size, y - size); | ||||||
|  |                 ctx.lineTo(x + size, y + size); | ||||||
|  |                 ctx.moveTo(x - size, y + size); | ||||||
|  |                 ctx.lineTo(x + size, y - size); | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         var s = series.points.symbol; | ||||||
|  |         if (handlers[s]) | ||||||
|  |             series.points.symbol = handlers[s]; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     function init(plot) { | ||||||
|  |         plot.hooks.processDatapoints.push(processRawData); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         name: 'symbols', | ||||||
|  |         version: '1.0' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										142
									
								
								static/vendor/flot/jquery.flot.threshold.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,142 @@ | |||||||
|  | /* Flot plugin for thresholding data. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | The plugin supports these options: | ||||||
|  |  | ||||||
|  | 	series: { | ||||||
|  | 		threshold: { | ||||||
|  | 			below: number | ||||||
|  | 			color: colorspec | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | It can also be applied to a single series, like this: | ||||||
|  |  | ||||||
|  | 	$.plot( $("#placeholder"), [{ | ||||||
|  | 		data: [ ... ], | ||||||
|  | 		threshold: { ... } | ||||||
|  | 	}]) | ||||||
|  |  | ||||||
|  | An array can be passed for multiple thresholding, like this: | ||||||
|  |  | ||||||
|  | 	threshold: [{ | ||||||
|  | 		below: number1 | ||||||
|  | 		color: color1 | ||||||
|  | 	},{ | ||||||
|  | 		below: number2 | ||||||
|  | 		color: color2 | ||||||
|  | 	}] | ||||||
|  |  | ||||||
|  | These multiple threshold objects can be passed in any order since they are | ||||||
|  | sorted by the processing function. | ||||||
|  |  | ||||||
|  | The data points below "below" are drawn with the specified color. This makes | ||||||
|  | it easy to mark points below 0, e.g. for budget data. | ||||||
|  |  | ||||||
|  | Internally, the plugin works by splitting the data into two series, above and | ||||||
|  | below the threshold. The extra series below the threshold will have its label | ||||||
|  | cleared and the special "originSeries" attribute set to the original series. | ||||||
|  | You may need to check for this in hover events. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function ($) { | ||||||
|  |     var options = { | ||||||
|  |         series: { threshold: null } // or { below: number, color: color spec} | ||||||
|  |     }; | ||||||
|  |      | ||||||
|  |     function init(plot) { | ||||||
|  |         function thresholdData(plot, s, datapoints, below, color) { | ||||||
|  |             var ps = datapoints.pointsize, i, x, y, p, prevp, | ||||||
|  |                 thresholded = $.extend({}, s); // note: shallow copy | ||||||
|  |  | ||||||
|  |             thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format }; | ||||||
|  |             thresholded.label = null; | ||||||
|  |             thresholded.color = color; | ||||||
|  |             thresholded.threshold = null; | ||||||
|  |             thresholded.originSeries = s; | ||||||
|  |             thresholded.data = []; | ||||||
|  |   | ||||||
|  |             var origpoints = datapoints.points, | ||||||
|  |                 addCrossingPoints = s.lines.show; | ||||||
|  |  | ||||||
|  |             var threspoints = []; | ||||||
|  |             var newpoints = []; | ||||||
|  |             var m; | ||||||
|  |  | ||||||
|  |             for (i = 0; i < origpoints.length; i += ps) { | ||||||
|  |                 x = origpoints[i]; | ||||||
|  |                 y = origpoints[i + 1]; | ||||||
|  |  | ||||||
|  |                 prevp = p; | ||||||
|  |                 if (y < below) | ||||||
|  |                     p = threspoints; | ||||||
|  |                 else | ||||||
|  |                     p = newpoints; | ||||||
|  |  | ||||||
|  |                 if (addCrossingPoints && prevp != p && x != null | ||||||
|  |                     && i > 0 && origpoints[i - ps] != null) { | ||||||
|  |                     var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]); | ||||||
|  |                     prevp.push(interx); | ||||||
|  |                     prevp.push(below); | ||||||
|  |                     for (m = 2; m < ps; ++m) | ||||||
|  |                         prevp.push(origpoints[i + m]); | ||||||
|  |                      | ||||||
|  |                     p.push(null); // start new segment | ||||||
|  |                     p.push(null); | ||||||
|  |                     for (m = 2; m < ps; ++m) | ||||||
|  |                         p.push(origpoints[i + m]); | ||||||
|  |                     p.push(interx); | ||||||
|  |                     p.push(below); | ||||||
|  |                     for (m = 2; m < ps; ++m) | ||||||
|  |                         p.push(origpoints[i + m]); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 p.push(x); | ||||||
|  |                 p.push(y); | ||||||
|  |                 for (m = 2; m < ps; ++m) | ||||||
|  |                     p.push(origpoints[i + m]); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             datapoints.points = newpoints; | ||||||
|  |             thresholded.datapoints.points = threspoints; | ||||||
|  |              | ||||||
|  |             if (thresholded.datapoints.points.length > 0) { | ||||||
|  |                 var origIndex = $.inArray(s, plot.getData()); | ||||||
|  |                 // Insert newly-generated series right after original one (to prevent it from becoming top-most) | ||||||
|  |                 plot.getData().splice(origIndex + 1, 0, thresholded); | ||||||
|  |             } | ||||||
|  |                  | ||||||
|  |             // FIXME: there are probably some edge cases left in bars | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         function processThresholds(plot, s, datapoints) { | ||||||
|  |             if (!s.threshold) | ||||||
|  |                 return; | ||||||
|  |              | ||||||
|  |             if (s.threshold instanceof Array) { | ||||||
|  |                 s.threshold.sort(function(a, b) { | ||||||
|  |                     return a.below - b.below; | ||||||
|  |                 }); | ||||||
|  |                  | ||||||
|  |                 $(s.threshold).each(function(i, th) { | ||||||
|  |                     thresholdData(plot, s, datapoints, th.below, th.color); | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         plot.hooks.processDatapoints.push(processThresholds); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     $.plot.plugins.push({ | ||||||
|  |         init: init, | ||||||
|  |         options: options, | ||||||
|  |         name: 'threshold', | ||||||
|  |         version: '1.2' | ||||||
|  |     }); | ||||||
|  | })(jQuery); | ||||||
							
								
								
									
										432
									
								
								static/vendor/flot/jquery.flot.time.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,432 @@ | |||||||
|  | /* Pretty handling of time axes. | ||||||
|  |  | ||||||
|  | Copyright (c) 2007-2014 IOLA and Ole Laursen. | ||||||
|  | Licensed under the MIT license. | ||||||
|  |  | ||||||
|  | Set axis.mode to "time" to enable. See the section "Time series data" in | ||||||
|  | API.txt for details. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | (function($) { | ||||||
|  |  | ||||||
|  | 	var options = { | ||||||
|  | 		xaxis: { | ||||||
|  | 			timezone: null,		// "browser" for local to the client or timezone for timezone-js | ||||||
|  | 			timeformat: null,	// format string to use | ||||||
|  | 			twelveHourClock: false,	// 12 or 24 time in time mode | ||||||
|  | 			monthNames: null	// list of names of months | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// round to nearby lower multiple of base | ||||||
|  |  | ||||||
|  | 	function floorInBase(n, base) { | ||||||
|  | 		return base * Math.floor(n / base); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// Returns a string with the date d formatted according to fmt. | ||||||
|  | 	// A subset of the Open Group's strftime format is supported. | ||||||
|  |  | ||||||
|  | 	function formatDate(d, fmt, monthNames, dayNames) { | ||||||
|  |  | ||||||
|  | 		if (typeof d.strftime == "function") { | ||||||
|  | 			return d.strftime(fmt); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		var leftPad = function(n, pad) { | ||||||
|  | 			n = "" + n; | ||||||
|  | 			pad = "" + (pad == null ? "0" : pad); | ||||||
|  | 			return n.length == 1 ? pad + n : n; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		var r = []; | ||||||
|  | 		var escape = false; | ||||||
|  | 		var hours = d.getHours(); | ||||||
|  | 		var isAM = hours < 12; | ||||||
|  |  | ||||||
|  | 		if (monthNames == null) { | ||||||
|  | 			monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if (dayNames == null) { | ||||||
|  | 			dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		var hours12; | ||||||
|  |  | ||||||
|  | 		if (hours > 12) { | ||||||
|  | 			hours12 = hours - 12; | ||||||
|  | 		} else if (hours == 0) { | ||||||
|  | 			hours12 = 12; | ||||||
|  | 		} else { | ||||||
|  | 			hours12 = hours; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		for (var i = 0; i < fmt.length; ++i) { | ||||||
|  |  | ||||||
|  | 			var c = fmt.charAt(i); | ||||||
|  |  | ||||||
|  | 			if (escape) { | ||||||
|  | 				switch (c) { | ||||||
|  | 					case 'a': c = "" + dayNames[d.getDay()]; break; | ||||||
|  | 					case 'b': c = "" + monthNames[d.getMonth()]; break; | ||||||
|  | 					case 'd': c = leftPad(d.getDate()); break; | ||||||
|  | 					case 'e': c = leftPad(d.getDate(), " "); break; | ||||||
|  | 					case 'h':	// For back-compat with 0.7; remove in 1.0 | ||||||
|  | 					case 'H': c = leftPad(hours); break; | ||||||
|  | 					case 'I': c = leftPad(hours12); break; | ||||||
|  | 					case 'l': c = leftPad(hours12, " "); break; | ||||||
|  | 					case 'm': c = leftPad(d.getMonth() + 1); break; | ||||||
|  | 					case 'M': c = leftPad(d.getMinutes()); break; | ||||||
|  | 					// quarters not in Open Group's strftime specification | ||||||
|  | 					case 'q': | ||||||
|  | 						c = "" + (Math.floor(d.getMonth() / 3) + 1); break; | ||||||
|  | 					case 'S': c = leftPad(d.getSeconds()); break; | ||||||
|  | 					case 'y': c = leftPad(d.getFullYear() % 100); break; | ||||||
|  | 					case 'Y': c = "" + d.getFullYear(); break; | ||||||
|  | 					case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break; | ||||||
|  | 					case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break; | ||||||
|  | 					case 'w': c = "" + d.getDay(); break; | ||||||
|  | 				} | ||||||
|  | 				r.push(c); | ||||||
|  | 				escape = false; | ||||||
|  | 			} else { | ||||||
|  | 				if (c == "%") { | ||||||
|  | 					escape = true; | ||||||
|  | 				} else { | ||||||
|  | 					r.push(c); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return r.join(""); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// To have a consistent view of time-based data independent of which time | ||||||
|  | 	// zone the client happens to be in we need a date-like object independent | ||||||
|  | 	// of time zones.  This is done through a wrapper that only calls the UTC | ||||||
|  | 	// versions of the accessor methods. | ||||||
|  |  | ||||||
|  | 	function makeUtcWrapper(d) { | ||||||
|  |  | ||||||
|  | 		function addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) { | ||||||
|  | 			sourceObj[sourceMethod] = function() { | ||||||
|  | 				return targetObj[targetMethod].apply(targetObj, arguments); | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		var utc = { | ||||||
|  | 			date: d | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// support strftime, if found | ||||||
|  |  | ||||||
|  | 		if (d.strftime != undefined) { | ||||||
|  | 			addProxyMethod(utc, "strftime", d, "strftime"); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		addProxyMethod(utc, "getTime", d, "getTime"); | ||||||
|  | 		addProxyMethod(utc, "setTime", d, "setTime"); | ||||||
|  |  | ||||||
|  | 		var props = ["Date", "Day", "FullYear", "Hours", "Milliseconds", "Minutes", "Month", "Seconds"]; | ||||||
|  |  | ||||||
|  | 		for (var p = 0; p < props.length; p++) { | ||||||
|  | 			addProxyMethod(utc, "get" + props[p], d, "getUTC" + props[p]); | ||||||
|  | 			addProxyMethod(utc, "set" + props[p], d, "setUTC" + props[p]); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return utc; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// select time zone strategy.  This returns a date-like object tied to the | ||||||
|  | 	// desired timezone | ||||||
|  |  | ||||||
|  | 	function dateGenerator(ts, opts) { | ||||||
|  | 		if (opts.timezone == "browser") { | ||||||
|  | 			return new Date(ts); | ||||||
|  | 		} else if (!opts.timezone || opts.timezone == "utc") { | ||||||
|  | 			return makeUtcWrapper(new Date(ts)); | ||||||
|  | 		} else if (typeof timezoneJS != "undefined" && typeof timezoneJS.Date != "undefined") { | ||||||
|  | 			var d = new timezoneJS.Date(); | ||||||
|  | 			// timezone-js is fickle, so be sure to set the time zone before | ||||||
|  | 			// setting the time. | ||||||
|  | 			d.setTimezone(opts.timezone); | ||||||
|  | 			d.setTime(ts); | ||||||
|  | 			return d; | ||||||
|  | 		} else { | ||||||
|  | 			return makeUtcWrapper(new Date(ts)); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	// map of app. size of time units in milliseconds | ||||||
|  |  | ||||||
|  | 	var timeUnitSize = { | ||||||
|  | 		"second": 1000, | ||||||
|  | 		"minute": 60 * 1000, | ||||||
|  | 		"hour": 60 * 60 * 1000, | ||||||
|  | 		"day": 24 * 60 * 60 * 1000, | ||||||
|  | 		"month": 30 * 24 * 60 * 60 * 1000, | ||||||
|  | 		"quarter": 3 * 30 * 24 * 60 * 60 * 1000, | ||||||
|  | 		"year": 365.2425 * 24 * 60 * 60 * 1000 | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	// the allowed tick sizes, after 1 year we use | ||||||
|  | 	// an integer algorithm | ||||||
|  |  | ||||||
|  | 	var baseSpec = [ | ||||||
|  | 		[1, "second"], [2, "second"], [5, "second"], [10, "second"], | ||||||
|  | 		[30, "second"],  | ||||||
|  | 		[1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], | ||||||
|  | 		[30, "minute"],  | ||||||
|  | 		[1, "hour"], [2, "hour"], [4, "hour"], | ||||||
|  | 		[8, "hour"], [12, "hour"], | ||||||
|  | 		[1, "day"], [2, "day"], [3, "day"], | ||||||
|  | 		[0.25, "month"], [0.5, "month"], [1, "month"], | ||||||
|  | 		[2, "month"] | ||||||
|  | 	]; | ||||||
|  |  | ||||||
|  | 	// we don't know which variant(s) we'll need yet, but generating both is | ||||||
|  | 	// cheap | ||||||
|  |  | ||||||
|  | 	var specMonths = baseSpec.concat([[3, "month"], [6, "month"], | ||||||
|  | 		[1, "year"]]); | ||||||
|  | 	var specQuarters = baseSpec.concat([[1, "quarter"], [2, "quarter"], | ||||||
|  | 		[1, "year"]]); | ||||||
|  |  | ||||||
|  | 	function init(plot) { | ||||||
|  | 		plot.hooks.processOptions.push(function (plot, options) { | ||||||
|  | 			$.each(plot.getAxes(), function(axisName, axis) { | ||||||
|  |  | ||||||
|  | 				var opts = axis.options; | ||||||
|  |  | ||||||
|  | 				if (opts.mode == "time") { | ||||||
|  | 					axis.tickGenerator = function(axis) { | ||||||
|  |  | ||||||
|  | 						var ticks = []; | ||||||
|  | 						var d = dateGenerator(axis.min, opts); | ||||||
|  | 						var minSize = 0; | ||||||
|  |  | ||||||
|  | 						// make quarter use a possibility if quarters are | ||||||
|  | 						// mentioned in either of these options | ||||||
|  |  | ||||||
|  | 						var spec = (opts.tickSize && opts.tickSize[1] === | ||||||
|  | 							"quarter") || | ||||||
|  | 							(opts.minTickSize && opts.minTickSize[1] === | ||||||
|  | 							"quarter") ? specQuarters : specMonths; | ||||||
|  |  | ||||||
|  | 						if (opts.minTickSize != null) { | ||||||
|  | 							if (typeof opts.tickSize == "number") { | ||||||
|  | 								minSize = opts.tickSize; | ||||||
|  | 							} else { | ||||||
|  | 								minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]]; | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						for (var i = 0; i < spec.length - 1; ++i) { | ||||||
|  | 							if (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]] | ||||||
|  | 											  + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2 | ||||||
|  | 								&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) { | ||||||
|  | 								break; | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						var size = spec[i][0]; | ||||||
|  | 						var unit = spec[i][1]; | ||||||
|  |  | ||||||
|  | 						// special-case the possibility of several years | ||||||
|  |  | ||||||
|  | 						if (unit == "year") { | ||||||
|  |  | ||||||
|  | 							// if given a minTickSize in years, just use it, | ||||||
|  | 							// ensuring that it's an integer | ||||||
|  |  | ||||||
|  | 							if (opts.minTickSize != null && opts.minTickSize[1] == "year") { | ||||||
|  | 								size = Math.floor(opts.minTickSize[0]); | ||||||
|  | 							} else { | ||||||
|  |  | ||||||
|  | 								var magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10)); | ||||||
|  | 								var norm = (axis.delta / timeUnitSize.year) / magn; | ||||||
|  |  | ||||||
|  | 								if (norm < 1.5) { | ||||||
|  | 									size = 1; | ||||||
|  | 								} else if (norm < 3) { | ||||||
|  | 									size = 2; | ||||||
|  | 								} else if (norm < 7.5) { | ||||||
|  | 									size = 5; | ||||||
|  | 								} else { | ||||||
|  | 									size = 10; | ||||||
|  | 								} | ||||||
|  |  | ||||||
|  | 								size *= magn; | ||||||
|  | 							} | ||||||
|  |  | ||||||
|  | 							// minimum size for years is 1 | ||||||
|  |  | ||||||
|  | 							if (size < 1) { | ||||||
|  | 								size = 1; | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						axis.tickSize = opts.tickSize || [size, unit]; | ||||||
|  | 						var tickSize = axis.tickSize[0]; | ||||||
|  | 						unit = axis.tickSize[1]; | ||||||
|  |  | ||||||
|  | 						var step = tickSize * timeUnitSize[unit]; | ||||||
|  |  | ||||||
|  | 						if (unit == "second") { | ||||||
|  | 							d.setSeconds(floorInBase(d.getSeconds(), tickSize)); | ||||||
|  | 						} else if (unit == "minute") { | ||||||
|  | 							d.setMinutes(floorInBase(d.getMinutes(), tickSize)); | ||||||
|  | 						} else if (unit == "hour") { | ||||||
|  | 							d.setHours(floorInBase(d.getHours(), tickSize)); | ||||||
|  | 						} else if (unit == "month") { | ||||||
|  | 							d.setMonth(floorInBase(d.getMonth(), tickSize)); | ||||||
|  | 						} else if (unit == "quarter") { | ||||||
|  | 							d.setMonth(3 * floorInBase(d.getMonth() / 3, | ||||||
|  | 								tickSize)); | ||||||
|  | 						} else if (unit == "year") { | ||||||
|  | 							d.setFullYear(floorInBase(d.getFullYear(), tickSize)); | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						// reset smaller components | ||||||
|  |  | ||||||
|  | 						d.setMilliseconds(0); | ||||||
|  |  | ||||||
|  | 						if (step >= timeUnitSize.minute) { | ||||||
|  | 							d.setSeconds(0); | ||||||
|  | 						} | ||||||
|  | 						if (step >= timeUnitSize.hour) { | ||||||
|  | 							d.setMinutes(0); | ||||||
|  | 						} | ||||||
|  | 						if (step >= timeUnitSize.day) { | ||||||
|  | 							d.setHours(0); | ||||||
|  | 						} | ||||||
|  | 						if (step >= timeUnitSize.day * 4) { | ||||||
|  | 							d.setDate(1); | ||||||
|  | 						} | ||||||
|  | 						if (step >= timeUnitSize.month * 2) { | ||||||
|  | 							d.setMonth(floorInBase(d.getMonth(), 3)); | ||||||
|  | 						} | ||||||
|  | 						if (step >= timeUnitSize.quarter * 2) { | ||||||
|  | 							d.setMonth(floorInBase(d.getMonth(), 6)); | ||||||
|  | 						} | ||||||
|  | 						if (step >= timeUnitSize.year) { | ||||||
|  | 							d.setMonth(0); | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						var carry = 0; | ||||||
|  | 						var v = Number.NaN; | ||||||
|  | 						var prev; | ||||||
|  |  | ||||||
|  | 						do { | ||||||
|  |  | ||||||
|  | 							prev = v; | ||||||
|  | 							v = d.getTime(); | ||||||
|  | 							ticks.push(v); | ||||||
|  |  | ||||||
|  | 							if (unit == "month" || unit == "quarter") { | ||||||
|  | 								if (tickSize < 1) { | ||||||
|  |  | ||||||
|  | 									// a bit complicated - we'll divide the | ||||||
|  | 									// month/quarter up but we need to take | ||||||
|  | 									// care of fractions so we don't end up in | ||||||
|  | 									// the middle of a day | ||||||
|  |  | ||||||
|  | 									d.setDate(1); | ||||||
|  | 									var start = d.getTime(); | ||||||
|  | 									d.setMonth(d.getMonth() + | ||||||
|  | 										(unit == "quarter" ? 3 : 1)); | ||||||
|  | 									var end = d.getTime(); | ||||||
|  | 									d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize); | ||||||
|  | 									carry = d.getHours(); | ||||||
|  | 									d.setHours(0); | ||||||
|  | 								} else { | ||||||
|  | 									d.setMonth(d.getMonth() + | ||||||
|  | 										tickSize * (unit == "quarter" ? 3 : 1)); | ||||||
|  | 								} | ||||||
|  | 							} else if (unit == "year") { | ||||||
|  | 								d.setFullYear(d.getFullYear() + tickSize); | ||||||
|  | 							} else { | ||||||
|  | 								d.setTime(v + step); | ||||||
|  | 							} | ||||||
|  | 						} while (v < axis.max && v != prev); | ||||||
|  |  | ||||||
|  | 						return ticks; | ||||||
|  | 					}; | ||||||
|  |  | ||||||
|  | 					axis.tickFormatter = function (v, axis) { | ||||||
|  |  | ||||||
|  | 						var d = dateGenerator(v, axis.options); | ||||||
|  |  | ||||||
|  | 						// first check global format | ||||||
|  |  | ||||||
|  | 						if (opts.timeformat != null) { | ||||||
|  | 							return formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames); | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						// possibly use quarters if quarters are mentioned in | ||||||
|  | 						// any of these places | ||||||
|  |  | ||||||
|  | 						var useQuarters = (axis.options.tickSize && | ||||||
|  | 								axis.options.tickSize[1] == "quarter") || | ||||||
|  | 							(axis.options.minTickSize && | ||||||
|  | 								axis.options.minTickSize[1] == "quarter"); | ||||||
|  |  | ||||||
|  | 						var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]]; | ||||||
|  | 						var span = axis.max - axis.min; | ||||||
|  | 						var suffix = (opts.twelveHourClock) ? " %p" : ""; | ||||||
|  | 						var hourCode = (opts.twelveHourClock) ? "%I" : "%H"; | ||||||
|  | 						var fmt; | ||||||
|  |  | ||||||
|  | 						if (t < timeUnitSize.minute) { | ||||||
|  | 							fmt = hourCode + ":%M:%S" + suffix; | ||||||
|  | 						} else if (t < timeUnitSize.day) { | ||||||
|  | 							if (span < 2 * timeUnitSize.day) { | ||||||
|  | 								fmt = hourCode + ":%M" + suffix; | ||||||
|  | 							} else { | ||||||
|  | 								fmt = "%b %d " + hourCode + ":%M" + suffix; | ||||||
|  | 							} | ||||||
|  | 						} else if (t < timeUnitSize.month) { | ||||||
|  | 							fmt = "%b %d"; | ||||||
|  | 						} else if ((useQuarters && t < timeUnitSize.quarter) || | ||||||
|  | 							(!useQuarters && t < timeUnitSize.year)) { | ||||||
|  | 							if (span < timeUnitSize.year) { | ||||||
|  | 								fmt = "%b"; | ||||||
|  | 							} else { | ||||||
|  | 								fmt = "%b %Y"; | ||||||
|  | 							} | ||||||
|  | 						} else if (useQuarters && t < timeUnitSize.year) { | ||||||
|  | 							if (span < timeUnitSize.year) { | ||||||
|  | 								fmt = "Q%q"; | ||||||
|  | 							} else { | ||||||
|  | 								fmt = "Q%q %Y"; | ||||||
|  | 							} | ||||||
|  | 						} else { | ||||||
|  | 							fmt = "%Y"; | ||||||
|  | 						} | ||||||
|  |  | ||||||
|  | 						var rt = formatDate(d, fmt, opts.monthNames, opts.dayNames); | ||||||
|  |  | ||||||
|  | 						return rt; | ||||||
|  | 					}; | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	$.plot.plugins.push({ | ||||||
|  | 		init: init, | ||||||
|  | 		options: options, | ||||||
|  | 		name: 'time', | ||||||
|  | 		version: '1.0' | ||||||
|  | 	}); | ||||||
|  |  | ||||||
|  | 	// Time-axis support used to be in Flot core, which exposed the | ||||||
|  | 	// formatDate function on the plot object.  Various plugins depend | ||||||
|  | 	// on the function, so we need to re-expose it here. | ||||||
|  |  | ||||||
|  | 	$.plot.formatDate = formatDate; | ||||||
|  | 	$.plot.dateGenerator = dateGenerator; | ||||||
|  |  | ||||||
|  | })(jQuery); | ||||||