├── .gitignore ├── LICENSE ├── README.md ├── css ├── bootstrap-theme.css.map ├── bootstrap-theme.min.css ├── bootstrap.css.map ├── bootstrap.min.css ├── main.css ├── ribbons.min.css ├── select2-bootstrap.css └── select2.css ├── examples └── Chinook_Sqlite.sqlite ├── fonts ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf ├── glyphicons-halflings-regular.woff └── glyphicons-halflings-regular.woff2 ├── img ├── icon.png ├── logo.svg ├── preview.png ├── select2-spinner.gif ├── select2.png ├── select2x2.png └── seriously.png ├── index.html └── js ├── ace ├── ace.js ├── mode-sql.js └── theme-chrome.js ├── bootstrap.min.js ├── filereader.js ├── jdataview.js.map ├── jquery-1.11.3.min.js ├── main.js ├── mindmup-editabletable.js ├── select2.min.js └── sql.js /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/* -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-SQLite%20Viewer-brightgreen.svg?style=flat)](http://android-arsenal.com/details/1/2497) 2 | 3 | SQLite Viewer 4 | ============ 5 | 6 | *View SQLite file online. Uses [sql.js](https://github.com/kripken/sql.js/) for parsing sqlite files.* 7 | 8 | You can also load remote files (using JS ajax, remote server must send `Access-Control-Allow-Origin:*`): 9 | `http://inloop.github.io/sqlite-viewer/?url=http://example.com/data.sqlite` 10 | 11 | ![](/img/preview.png?raw=true "Example sqlite") 12 | 13 | ### License 14 | Licensed under the Apache License, Version 2.0 (the "License"); 15 | you may not use this file except in compliance with the License. 16 | You may obtain a copy of the License at 17 | 18 | http://www.apache.org/licenses/LICENSE-2.0 19 | 20 | Unless required by applicable law or agreed to in writing, software 21 | distributed under the License is distributed on an "AS IS" BASIS, 22 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 23 | See the License for the specific language governing permissions and 24 | limitations under the License. 25 | -------------------------------------------------------------------------------- /css/bootstrap-theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} -------------------------------------------------------------------------------- /css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.5 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #f5f5f5; 3 | } 4 | 5 | footer { 6 | margin-top: 8px; 7 | margin-bottom: 8px; 8 | color: darkgray; 9 | text-align: center; 10 | } 11 | 12 | footer small a { 13 | color: #7AA7CF; 14 | } 15 | 16 | #main-container { 17 | position: relative; 18 | background: #ffffff; 19 | box-shadow: 0 1px 16px silver; 20 | z-index: 2; 21 | } 22 | 23 | .node-info { 24 | font-style: italic; 25 | display: none; 26 | margin: 0; 27 | padding: 0; 28 | } 29 | 30 | .drag { 31 | background-color: lightblue; 32 | } 33 | 34 | .info-items td { 35 | vertical-align: top; 36 | } 37 | 38 | .info-items td:first-child { 39 | width: 90px; 40 | } 41 | 42 | #header { 43 | background: #A0CFFF; 44 | color: #3474A8; 45 | padding: 16px; 46 | margin-left: -15px; 47 | margin-right: -15px; 48 | margin-bottom: 15px; 49 | 50 | } 51 | 52 | #header h3 { 53 | margin: 0; 54 | } 55 | 56 | #resizer { 57 | font-size: 26px; 58 | } 59 | 60 | #resizer i { 61 | padding-top: 15px; 62 | } 63 | 64 | #resizer i.glyphicon-resize-small { 65 | margin-right: 120px; 66 | } 67 | 68 | #dropzone { 69 | height: 450px; 70 | width: 100%; 71 | font-size: 1.2em; 72 | cursor: pointer; 73 | text-align: center; 74 | display: table; 75 | table-layout: fixed; 76 | } 77 | 78 | #dropzone .panel-body { 79 | display: table-cell; 80 | vertical-align: middle; 81 | } 82 | 83 | #output-box { 84 | display: none; 85 | margin-bottom: 20px; 86 | } 87 | 88 | #button-box { 89 | position: absolute; 90 | right: 40px; 91 | } 92 | 93 | .ace_hidden-cursors { 94 | opacity: 0 95 | } 96 | 97 | .table-hover tbody tr:hover td, .table-hover tbody tr:hover th { 98 | background-color: #F5F5E7; 99 | } 100 | 101 | #data { 102 | margin-bottom: 0; 103 | } 104 | 105 | #data th span { 106 | cursor: help; 107 | } 108 | 109 | #data th, #data td { 110 | max-width: 200px; 111 | overflow: hidden; 112 | text-overflow: ellipsis; 113 | white-space: nowrap; 114 | } 115 | 116 | #bottom-bar a:focus, a:hover { 117 | text-decoration: none; 118 | } 119 | 120 | #bottom-bar .inline { 121 | background: #fff; 122 | display: inline-block; 123 | padding: 15px; 124 | margin: -15px 125 | } 126 | 127 | #bottom-bar { 128 | z-index: 1; 129 | bottom: 0; 130 | padding: 15px; 131 | position: static; 132 | display: none; 133 | margin-left: -8px; 134 | } 135 | 136 | @media (min-width: 1300px) { 137 | #bottom-bar { 138 | position: fixed; 139 | } 140 | 141 | #pager { 142 | display: block; 143 | } 144 | } 145 | 146 | @media (min-width: 1450px) { 147 | #pager { 148 | display: inline-block; 149 | } 150 | } 151 | 152 | .ribbon { 153 | z-index: 3; 154 | } 155 | /* Animated loading icon */ 156 | 157 | .glyphicon-refresh-animate { 158 | -animation: spin .7s infinite linear; 159 | -webkit-animation: spin2 .7s infinite linear; 160 | } 161 | 162 | @-webkit-keyframes spin2 { 163 | from { 164 | -webkit-transform: rotate(0deg); 165 | } 166 | to { 167 | -webkit-transform: rotate(360deg); 168 | } 169 | } 170 | 171 | @keyframes spin { 172 | from { 173 | transform: scale(1) rotate(0deg); 174 | } 175 | to { 176 | transform: scale(1) rotate(360deg); 177 | } 178 | } 179 | -------------------------------------------------------------------------------- /css/ribbons.min.css: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Cabin+Condensed:500&text=Fork%20me%20on%20GitHub);body{overflow-x:hidden}.ribbon{position:absolute;top:42px;width:200px;padding:1px 0;background:#000;color:#eee;-moz-box-shadow:0 0 10px rgba(0,0,0,0.5);-webkit-box-shadow:0 0 10px rgba(0,0,0,0.5);box-shadow:0 0 10px rgba(0,0,0,0.5)}.ribbon.left{left:-42px;-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.ribbon.right{right:-42px;-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.ribbon a,.ribbon a:visited,.ribbon a:active,.ribbon a:hover{display:block;padding:1px 0;height:24px;line-height:24px;color:inherit;text-align:center;text-decoration:none;font-family:'Cabin Condensed',sans-serif;font-size:16px;font-weight:500;border:1px solid rgba(255,255,255,0.3);-moz-text-shadow:0 0 10px rgba(0,0,0,0.31);-webkit-text-shadow:0 0 10px rgba(0,0,0,0.31);text-shadow:0 0 10px rgba(0,0,0,0.31)}.ribbon.black{background:#000}.ribbon.red{background:#c00}.ribbon.blue{background:#09e}.ribbon.green{background:#0a0}.ribbon.orange{background:#d80}.ribbon.purple{background:#c0c}.ribbon.grey{background:#888}.ribbon.white{background:#eee;color:black}.ribbon.white a{border:2px dotted rgba(100,100,100,0.2)} -------------------------------------------------------------------------------- /css/select2-bootstrap.css: -------------------------------------------------------------------------------- 1 | /*! Select2 Bootstrap 3 CSS v1.4.6 | MIT License | github.com/t0m/select2-bootstrap-css */ 2 | /** 3 | * Reset Bootstrap 3 .form-control styles which - if applied to the 4 | * original element Select2 is replacing not be properly being hidden 488 | * when used in a "Bootstrap Input Group with Addon". 489 | **/ 490 | .select2-offscreen, 491 | .select2-offscreen:focus { 492 | width: 1px !important; 493 | height: 1px !important; 494 | position: absolute !important; 495 | } -------------------------------------------------------------------------------- /css/select2.css: -------------------------------------------------------------------------------- 1 | /* 2 | Version: 3.5.4 Timestamp: Sun Aug 30 13:30:32 EDT 2015 3 | */ 4 | .select2-container { 5 | margin: 0; 6 | position: relative; 7 | display: inline-block; 8 | vertical-align: middle; 9 | } 10 | 11 | .select2-container, 12 | .select2-drop, 13 | .select2-search, 14 | .select2-search input { 15 | /* 16 | Force border-box so that % widths fit the parent 17 | container without overlap because of margin/padding. 18 | More Info : http://www.quirksmode.org/css/box.html 19 | */ 20 | -webkit-box-sizing: border-box; /* webkit */ 21 | -moz-box-sizing: border-box; /* firefox */ 22 | box-sizing: border-box; /* css3 */ 23 | } 24 | 25 | .select2-container .select2-choice { 26 | display: block; 27 | height: 26px; 28 | padding: 0 0 0 8px; 29 | overflow: hidden; 30 | position: relative; 31 | 32 | border: 1px solid #aaa; 33 | white-space: nowrap; 34 | line-height: 26px; 35 | color: #444; 36 | text-decoration: none; 37 | 38 | border-radius: 4px; 39 | 40 | background-clip: padding-box; 41 | 42 | -webkit-touch-callout: none; 43 | -webkit-user-select: none; 44 | -moz-user-select: none; 45 | -ms-user-select: none; 46 | user-select: none; 47 | 48 | background-color: #fff; 49 | background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff)); 50 | background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%); 51 | background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%); 52 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0); 53 | background-image: linear-gradient(to top, #eee 0%, #fff 50%); 54 | } 55 | 56 | html[dir="rtl"] .select2-container .select2-choice { 57 | padding: 0 8px 0 0; 58 | } 59 | 60 | .select2-container.select2-drop-above .select2-choice { 61 | border-bottom-color: #aaa; 62 | 63 | border-radius: 0 0 4px 4px; 64 | 65 | background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff)); 66 | background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%); 67 | background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%); 68 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0); 69 | background-image: linear-gradient(to bottom, #eee 0%, #fff 90%); 70 | } 71 | 72 | .select2-container.select2-allowclear .select2-choice .select2-chosen { 73 | margin-right: 42px; 74 | } 75 | 76 | .select2-container .select2-choice > .select2-chosen { 77 | margin-right: 26px; 78 | display: block; 79 | overflow: hidden; 80 | 81 | white-space: nowrap; 82 | 83 | text-overflow: ellipsis; 84 | float: none; 85 | width: auto; 86 | } 87 | 88 | html[dir="rtl"] .select2-container .select2-choice > .select2-chosen { 89 | margin-left: 26px; 90 | margin-right: 0; 91 | } 92 | 93 | .select2-container .select2-choice abbr { 94 | display: none; 95 | width: 12px; 96 | height: 12px; 97 | position: absolute; 98 | right: 24px; 99 | top: 8px; 100 | 101 | font-size: 1px; 102 | text-decoration: none; 103 | 104 | border: 0; 105 | background: url('../img/select2.png') right top no-repeat; 106 | cursor: pointer; 107 | outline: 0; 108 | } 109 | 110 | .select2-container.select2-allowclear .select2-choice abbr { 111 | display: inline-block; 112 | } 113 | 114 | .select2-container .select2-choice abbr:hover { 115 | background-position: right -11px; 116 | cursor: pointer; 117 | } 118 | 119 | .select2-drop-mask { 120 | border: 0; 121 | margin: 0; 122 | padding: 0; 123 | position: fixed; 124 | left: 0; 125 | top: 0; 126 | min-height: 100%; 127 | min-width: 100%; 128 | height: auto; 129 | width: auto; 130 | opacity: 0; 131 | z-index: 9998; 132 | /* styles required for IE to work */ 133 | background-color: #fff; 134 | filter: alpha(opacity=0); 135 | } 136 | 137 | .select2-drop { 138 | width: 100%; 139 | margin-top: -1px; 140 | position: absolute; 141 | z-index: 9999; 142 | top: 100%; 143 | 144 | background: #fff; 145 | color: #000; 146 | border: 1px solid #aaa; 147 | border-top: 0; 148 | 149 | border-radius: 0 0 4px 4px; 150 | 151 | -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); 152 | box-shadow: 0 4px 5px rgba(0, 0, 0, .15); 153 | } 154 | 155 | .select2-drop.select2-drop-above { 156 | margin-top: 1px; 157 | border-top: 1px solid #aaa; 158 | border-bottom: 0; 159 | 160 | border-radius: 4px 4px 0 0; 161 | 162 | -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); 163 | box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); 164 | } 165 | 166 | .select2-drop-active { 167 | border: 1px solid #5897fb; 168 | border-top: none; 169 | } 170 | 171 | .select2-drop.select2-drop-above.select2-drop-active { 172 | border-top: 1px solid #5897fb; 173 | } 174 | 175 | .select2-drop-auto-width { 176 | border-top: 1px solid #aaa; 177 | width: auto; 178 | } 179 | 180 | .select2-container .select2-choice .select2-arrow { 181 | display: inline-block; 182 | width: 18px; 183 | height: 100%; 184 | position: absolute; 185 | right: 0; 186 | top: 0; 187 | 188 | border-left: 1px solid #aaa; 189 | border-radius: 0 4px 4px 0; 190 | 191 | background-clip: padding-box; 192 | 193 | background: #ccc; 194 | background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); 195 | background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); 196 | background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); 197 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0); 198 | background-image: linear-gradient(to top, #ccc 0%, #eee 60%); 199 | } 200 | 201 | html[dir="rtl"] .select2-container .select2-choice .select2-arrow { 202 | left: 0; 203 | right: auto; 204 | 205 | border-left: none; 206 | border-right: 1px solid #aaa; 207 | border-radius: 4px 0 0 4px; 208 | } 209 | 210 | .select2-container .select2-choice .select2-arrow b { 211 | display: block; 212 | width: 100%; 213 | height: 100%; 214 | background: url('../img/select2.png') no-repeat 0 1px; 215 | } 216 | 217 | html[dir="rtl"] .select2-container .select2-choice .select2-arrow b { 218 | background-position: 2px 1px; 219 | } 220 | 221 | .select2-search { 222 | display: inline-block; 223 | width: 100%; 224 | min-height: 26px; 225 | margin: 0; 226 | padding: 4px 4px 0 4px; 227 | 228 | position: relative; 229 | z-index: 10000; 230 | 231 | white-space: nowrap; 232 | } 233 | 234 | .select2-search input { 235 | width: 100%; 236 | height: auto !important; 237 | min-height: 26px; 238 | padding: 4px 20px 4px 5px; 239 | margin: 0; 240 | 241 | outline: 0; 242 | font-family: sans-serif; 243 | font-size: 1em; 244 | 245 | border: 1px solid #aaa; 246 | border-radius: 0; 247 | 248 | -webkit-box-shadow: none; 249 | box-shadow: none; 250 | 251 | background: #fff url('../img/select2.png') no-repeat 100% -22px; 252 | background: url('../img/select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); 253 | background: url('../img/select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); 254 | background: url('../img/select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); 255 | background: url('../img/select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; 256 | } 257 | 258 | html[dir="rtl"] .select2-search input { 259 | padding: 4px 5px 4px 20px; 260 | 261 | background: #fff url('../img/select2.png') no-repeat -37px -22px; 262 | background: url('../img/select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); 263 | background: url('../img/select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); 264 | background: url('../img/select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); 265 | background: url('../img/select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; 266 | } 267 | 268 | .select2-search input.select2-active { 269 | background: #fff url('../img/select2-spinner.gif') no-repeat 100%; 270 | background: url('../img/select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee)); 271 | background: url('../img/select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%); 272 | background: url('../img/select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%); 273 | background: url('../img/select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0; 274 | } 275 | 276 | .select2-container-active .select2-choice, 277 | .select2-container-active .select2-choices { 278 | border: 1px solid #5897fb; 279 | outline: none; 280 | 281 | -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); 282 | box-shadow: 0 0 5px rgba(0, 0, 0, .3); 283 | } 284 | 285 | .select2-dropdown-open .select2-choice { 286 | border-bottom-color: transparent; 287 | -webkit-box-shadow: 0 1px 0 #fff inset; 288 | box-shadow: 0 1px 0 #fff inset; 289 | 290 | border-bottom-left-radius: 0; 291 | border-bottom-right-radius: 0; 292 | 293 | background-color: #eee; 294 | background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee)); 295 | background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%); 296 | background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%); 297 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); 298 | background-image: linear-gradient(to top, #fff 0%, #eee 50%); 299 | } 300 | 301 | .select2-dropdown-open.select2-drop-above .select2-choice, 302 | .select2-dropdown-open.select2-drop-above .select2-choices { 303 | border: 1px solid #5897fb; 304 | border-top-color: transparent; 305 | 306 | background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee)); 307 | background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%); 308 | background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%); 309 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0); 310 | background-image: linear-gradient(to bottom, #fff 0%, #eee 50%); 311 | } 312 | 313 | .select2-dropdown-open .select2-choice .select2-arrow { 314 | background: transparent; 315 | border-left: none; 316 | filter: none; 317 | } 318 | html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow { 319 | border-right: none; 320 | } 321 | 322 | .select2-dropdown-open .select2-choice .select2-arrow b { 323 | background-position: -18px 1px; 324 | } 325 | 326 | html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b { 327 | background-position: -16px 1px; 328 | } 329 | 330 | .select2-hidden-accessible { 331 | border: 0; 332 | clip: rect(0 0 0 0); 333 | height: 1px; 334 | margin: -1px; 335 | overflow: hidden; 336 | padding: 0; 337 | position: absolute; 338 | width: 1px; 339 | } 340 | 341 | /* results */ 342 | .select2-results { 343 | max-height: 200px; 344 | padding: 0 0 0 4px; 345 | margin: 4px 4px 4px 0; 346 | position: relative; 347 | overflow-x: hidden; 348 | overflow-y: auto; 349 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 350 | } 351 | 352 | html[dir="rtl"] .select2-results { 353 | padding: 0 4px 0 0; 354 | margin: 4px 0 4px 4px; 355 | } 356 | 357 | .select2-results ul.select2-result-sub { 358 | margin: 0; 359 | padding-left: 0; 360 | } 361 | 362 | .select2-results li { 363 | list-style: none; 364 | display: list-item; 365 | background-image: none; 366 | } 367 | 368 | .select2-results li.select2-result-with-children > .select2-result-label { 369 | font-weight: bold; 370 | } 371 | 372 | .select2-results .select2-result-label { 373 | padding: 3px 7px 4px; 374 | margin: 0; 375 | cursor: pointer; 376 | 377 | min-height: 1em; 378 | 379 | -webkit-touch-callout: none; 380 | -webkit-user-select: none; 381 | -moz-user-select: none; 382 | -ms-user-select: none; 383 | user-select: none; 384 | } 385 | 386 | .select2-results-dept-1 .select2-result-label { padding-left: 20px } 387 | .select2-results-dept-2 .select2-result-label { padding-left: 40px } 388 | .select2-results-dept-3 .select2-result-label { padding-left: 60px } 389 | .select2-results-dept-4 .select2-result-label { padding-left: 80px } 390 | .select2-results-dept-5 .select2-result-label { padding-left: 100px } 391 | .select2-results-dept-6 .select2-result-label { padding-left: 110px } 392 | .select2-results-dept-7 .select2-result-label { padding-left: 120px } 393 | 394 | .select2-results .select2-highlighted { 395 | background: #3875d7; 396 | color: #fff; 397 | } 398 | 399 | .select2-results li em { 400 | background: #feffde; 401 | font-style: normal; 402 | } 403 | 404 | .select2-results .select2-highlighted em { 405 | background: transparent; 406 | } 407 | 408 | .select2-results .select2-highlighted ul { 409 | background: #fff; 410 | color: #000; 411 | } 412 | 413 | .select2-results .select2-no-results, 414 | .select2-results .select2-searching, 415 | .select2-results .select2-ajax-error, 416 | .select2-results .select2-selection-limit { 417 | background: #f4f4f4; 418 | display: list-item; 419 | padding-left: 5px; 420 | } 421 | 422 | /* 423 | disabled look for disabled choices in the results dropdown 424 | */ 425 | .select2-results .select2-disabled.select2-highlighted { 426 | color: #666; 427 | background: #f4f4f4; 428 | display: list-item; 429 | cursor: default; 430 | } 431 | .select2-results .select2-disabled { 432 | background: #f4f4f4; 433 | display: list-item; 434 | cursor: default; 435 | } 436 | 437 | .select2-results .select2-selected { 438 | display: none; 439 | } 440 | 441 | .select2-more-results.select2-active { 442 | background: #f4f4f4 url('../img/select2-spinner.gif') no-repeat 100%; 443 | } 444 | 445 | .select2-results .select2-ajax-error { 446 | background: rgba(255, 50, 50, .2); 447 | } 448 | 449 | .select2-more-results { 450 | background: #f4f4f4; 451 | display: list-item; 452 | } 453 | 454 | /* disabled styles */ 455 | 456 | .select2-container.select2-container-disabled .select2-choice { 457 | background-color: #f4f4f4; 458 | background-image: none; 459 | border: 1px solid #ddd; 460 | cursor: default; 461 | } 462 | 463 | .select2-container.select2-container-disabled .select2-choice .select2-arrow { 464 | background-color: #f4f4f4; 465 | background-image: none; 466 | border-left: 0; 467 | } 468 | 469 | .select2-container.select2-container-disabled .select2-choice abbr { 470 | display: none; 471 | } 472 | 473 | 474 | /* multiselect */ 475 | 476 | .select2-container-multi .select2-choices { 477 | height: auto !important; 478 | height: 1%; 479 | margin: 0; 480 | padding: 0 5px 0 0; 481 | position: relative; 482 | 483 | border: 1px solid #aaa; 484 | cursor: text; 485 | overflow: hidden; 486 | 487 | background-color: #fff; 488 | background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff)); 489 | background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%); 490 | background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%); 491 | background-image: linear-gradient(to bottom, #eee 1%, #fff 15%); 492 | } 493 | 494 | html[dir="rtl"] .select2-container-multi .select2-choices { 495 | padding: 0 0 0 5px; 496 | } 497 | 498 | .select2-locked { 499 | padding: 3px 5px 3px 5px !important; 500 | } 501 | 502 | .select2-container-multi .select2-choices { 503 | min-height: 26px; 504 | } 505 | 506 | .select2-container-multi.select2-container-active .select2-choices { 507 | border: 1px solid #5897fb; 508 | outline: none; 509 | 510 | -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3); 511 | box-shadow: 0 0 5px rgba(0, 0, 0, .3); 512 | } 513 | .select2-container-multi .select2-choices li { 514 | float: left; 515 | list-style: none; 516 | } 517 | html[dir="rtl"] .select2-container-multi .select2-choices li 518 | { 519 | float: right; 520 | } 521 | .select2-container-multi .select2-choices .select2-search-field { 522 | margin: 0; 523 | padding: 0; 524 | white-space: nowrap; 525 | } 526 | 527 | .select2-container-multi .select2-choices .select2-search-field input { 528 | padding: 5px; 529 | margin: 1px 0; 530 | 531 | font-family: sans-serif; 532 | font-size: 100%; 533 | color: #666; 534 | outline: 0; 535 | border: 0; 536 | -webkit-box-shadow: none; 537 | box-shadow: none; 538 | background: transparent !important; 539 | } 540 | 541 | .select2-container-multi .select2-choices .select2-search-field input.select2-active { 542 | background: #fff url('../img/select2-spinner.gif') no-repeat 100% !important; 543 | } 544 | 545 | .select2-default { 546 | color: #999 !important; 547 | } 548 | 549 | .select2-container-multi .select2-choices .select2-search-choice { 550 | padding: 3px 5px 3px 18px; 551 | margin: 3px 0 3px 5px; 552 | position: relative; 553 | 554 | line-height: 13px; 555 | color: #333; 556 | cursor: default; 557 | border: 1px solid #aaaaaa; 558 | 559 | border-radius: 3px; 560 | 561 | -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); 562 | box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05); 563 | 564 | background-clip: padding-box; 565 | 566 | -webkit-touch-callout: none; 567 | -webkit-user-select: none; 568 | -moz-user-select: none; 569 | -ms-user-select: none; 570 | user-select: none; 571 | 572 | background-color: #e4e4e4; 573 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0); 574 | background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee)); 575 | background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); 576 | background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); 577 | background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%); 578 | } 579 | html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice 580 | { 581 | margin: 3px 5px 3px 0; 582 | padding: 3px 18px 3px 5px; 583 | } 584 | .select2-container-multi .select2-choices .select2-search-choice .select2-chosen { 585 | cursor: default; 586 | } 587 | .select2-container-multi .select2-choices .select2-search-choice-focus { 588 | background: #d4d4d4; 589 | } 590 | 591 | .select2-search-choice-close { 592 | display: block; 593 | width: 12px; 594 | height: 13px; 595 | position: absolute; 596 | right: 3px; 597 | top: 4px; 598 | 599 | font-size: 1px; 600 | outline: none; 601 | background: url('../img/select2.png') right top no-repeat; 602 | } 603 | html[dir="rtl"] .select2-search-choice-close { 604 | right: auto; 605 | left: 3px; 606 | } 607 | 608 | .select2-container-multi .select2-search-choice-close { 609 | left: 3px; 610 | } 611 | 612 | html[dir="rtl"] .select2-container-multi .select2-search-choice-close { 613 | left: auto; 614 | right: 2px; 615 | } 616 | 617 | .select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover { 618 | background-position: right -11px; 619 | } 620 | .select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close { 621 | background-position: right -11px; 622 | } 623 | 624 | /* disabled styles */ 625 | .select2-container-multi.select2-container-disabled .select2-choices { 626 | background-color: #f4f4f4; 627 | background-image: none; 628 | border: 1px solid #ddd; 629 | cursor: default; 630 | } 631 | 632 | .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { 633 | padding: 3px 5px 3px 5px; 634 | border: 1px solid #ddd; 635 | background-image: none; 636 | background-color: #f4f4f4; 637 | } 638 | 639 | .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none; 640 | background: none; 641 | } 642 | /* end multiselect */ 643 | 644 | 645 | .select2-result-selectable .select2-match, 646 | .select2-result-unselectable .select2-match { 647 | text-decoration: underline; 648 | } 649 | 650 | .select2-offscreen, .select2-offscreen:focus { 651 | clip: rect(0 0 0 0) !important; 652 | width: 1px !important; 653 | height: 1px !important; 654 | border: 0 !important; 655 | margin: 0 !important; 656 | padding: 0 !important; 657 | overflow: hidden !important; 658 | position: absolute !important; 659 | outline: 0 !important; 660 | left: 0px !important; 661 | top: 0px !important; 662 | } 663 | 664 | .select2-display-none { 665 | display: none; 666 | } 667 | 668 | .select2-measure-scrollbar { 669 | position: absolute; 670 | top: -10000px; 671 | left: -10000px; 672 | width: 100px; 673 | height: 100px; 674 | overflow: scroll; 675 | } 676 | 677 | /* Retina-ize icons */ 678 | 679 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) { 680 | .select2-search input, 681 | .select2-search-choice-close, 682 | .select2-container .select2-choice abbr, 683 | .select2-container .select2-choice .select2-arrow b { 684 | background-image: url('../img/select2x2.png') !important; 685 | background-repeat: no-repeat !important; 686 | background-size: 60px 40px !important; 687 | } 688 | 689 | .select2-search input { 690 | background-position: 100% -21px !important; 691 | } 692 | } 693 | -------------------------------------------------------------------------------- /examples/Chinook_Sqlite.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/examples/Chinook_Sqlite.sqlite -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/img/icon.png -------------------------------------------------------------------------------- /img/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 42 | 44 | 46 | 47 | 49 | image/svg+xml 50 | 52 | 53 | 54 | 55 | 56 | 61 | 70 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /img/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/img/preview.png -------------------------------------------------------------------------------- /img/select2-spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/img/select2-spinner.gif -------------------------------------------------------------------------------- /img/select2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/img/select2.png -------------------------------------------------------------------------------- /img/select2x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/img/select2x2.png -------------------------------------------------------------------------------- /img/seriously.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/System32-0101/sqlite-viewer/a10ac60b739ad8879ca3faaef92dacfbf75badef/img/seriously.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | SQLite Viewer 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 43 | 44 | 51 | 52 |
53 |
54 | Drop file here to load content or click on this box to open file dialog.
55 | 56 |
No file will be uploaded - uses only JavaScript HTML5 FileReader.

57 |
58 | 59 | … or download & try this sample file 60 |
61 | 64 |
65 | 66 |
67 | 68 |
69 |
70 |
71 |
72 | 73 |
74 |
75 |
76 | 77 |
78 | 79 |
80 | 81 |
82 | 83 |
84 | 85 | 86 | 87 | 88 | 89 |
90 |
91 | 92 | 93 | 94 |
95 | 96 |
97 | 98 |
99 | 100 | 101 | 102 | 103 |
104 | 105 |
106 |
107 | 108 | 109 | 110 |
111 |
112 | 113 |
114 | 118 |
119 | 120 | 121 | 122 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 145 | 146 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /js/ace/mode-sql.js: -------------------------------------------------------------------------------- 1 | ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|when|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|foreign|not|references|default|null|inner|cross|natural|database|drop|grant",t="true|false",n="avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nv|",r="int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|money|real|number|integer",i=this.createKeywordMapper({"support.function":n,keyword:e,"constant.language":t,"storage.type":r},"identifier",!0);this.$rules={start:[{token:"comment",regex:"--.*$"},{token:"comment",start:"/\\*",end:"\\*/"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:i,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"text",regex:"\\s+"}]},this.normalizeRules()};r.inherits(s,i),t.SqlHighlightRules=s}),ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules","ace/range"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./sql_highlight_rules").SqlHighlightRules,o=e("../range").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart="--",this.$id="ace/mode/sql"}.call(u.prototype),t.Mode=u}) -------------------------------------------------------------------------------- /js/ace/theme-chrome.js: -------------------------------------------------------------------------------- 1 | ace.define("ace/theme/chrome",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-chrome",t.cssText='.ace-chrome .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-chrome .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-chrome {background-color: #FFFFFF;color: black;}.ace-chrome .ace_cursor {color: black;}.ace-chrome .ace_invisible {color: rgb(191, 191, 191);}.ace-chrome .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-chrome .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-chrome .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-chrome .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-chrome .ace_fold {}.ace-chrome .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-chrome .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-chrome .ace_support.ace_type,.ace-chrome .ace_support.ace_class.ace-chrome .ace_support.ace_other {color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter {font-style:italic;color:#FD971F;}.ace-chrome .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-chrome .ace_comment {color: #236e24;}.ace-chrome .ace_comment.ace_doc {color: #236e24;}.ace-chrome .ace_comment.ace_doc.ace_tag {color: #236e24;}.ace-chrome .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-chrome .ace_variable {color: rgb(49, 132, 149);}.ace-chrome .ace_xml-pe {color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-chrome .ace_heading {color: rgb(12, 7, 255);}.ace-chrome .ace_list {color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_gutter-active-line {background-color : #dcdcdc;}.ace-chrome .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_keyword,.ace-chrome .ace_meta.ace_tag {color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-chrome .ace_string {color: #1A1AA6;}.ace-chrome .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-chrome .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}) -------------------------------------------------------------------------------- /js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.5 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under the MIT license 5 | */ 6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); -------------------------------------------------------------------------------- /js/filereader.js: -------------------------------------------------------------------------------- 1 | /*! 2 | FileReader.js - v0.99 3 | A lightweight wrapper for common FileReader usage. 4 | Copyright 2014 Brian Grinstead - MIT License. 5 | See http://github.com/bgrins/filereader.js for documentation. 6 | */ 7 | 8 | (function(window, document) { 9 | 10 | var FileReader = window.FileReader; 11 | var FileReaderSyncSupport = false; 12 | var workerScript = "self.addEventListener('message', function(e) { var data=e.data; try { var reader = new FileReaderSync; postMessage({ result: reader[data.readAs](data.file), extra: data.extra, file: data.file})} catch(e){ postMessage({ result:'error', extra:data.extra, file:data.file}); } }, false);"; 13 | var syncDetectionScript = "onmessage = function(e) { postMessage(!!FileReaderSync); };"; 14 | var fileReaderEvents = ['loadstart', 'progress', 'load', 'abort', 'error', 'loadend']; 15 | var sync = false; 16 | var FileReaderJS = window.FileReaderJS = { 17 | enabled: false, 18 | setupInput: setupInput, 19 | setupDrop: setupDrop, 20 | setupClipboard: setupClipboard, 21 | setSync: function (value) { 22 | sync = value; 23 | 24 | if (sync && !FileReaderSyncSupport) { 25 | checkFileReaderSyncSupport(); 26 | } 27 | }, 28 | getSync: function() { 29 | return sync && FileReaderSyncSupport; 30 | }, 31 | output: [], 32 | opts: { 33 | dragClass: "drag", 34 | accept: false, 35 | readAsDefault: 'DataURL', 36 | readAsMap: { 37 | }, 38 | on: { 39 | loadstart: noop, 40 | progress: noop, 41 | load: noop, 42 | abort: noop, 43 | error: noop, 44 | loadend: noop, 45 | skip: noop, 46 | groupstart: noop, 47 | groupend: noop, 48 | beforestart: noop 49 | } 50 | } 51 | }; 52 | 53 | // Setup jQuery plugin (if available) 54 | if (typeof(jQuery) !== "undefined") { 55 | jQuery.fn.fileReaderJS = function(opts) { 56 | return this.each(function() { 57 | if (jQuery(this).is("input")) { 58 | setupInput(this, opts); 59 | } 60 | else { 61 | setupDrop(this, opts); 62 | } 63 | }); 64 | }; 65 | 66 | jQuery.fn.fileClipboard = function(opts) { 67 | return this.each(function() { 68 | setupClipboard(this, opts); 69 | }); 70 | }; 71 | } 72 | 73 | // Not all browsers support the FileReader interface. Return with the enabled bit = false. 74 | if (!FileReader) { 75 | return; 76 | } 77 | 78 | 79 | // makeWorker is a little wrapper for generating web workers from strings 80 | function makeWorker(script) { 81 | var URL = window.URL || window.webkitURL; 82 | var Blob = window.Blob; 83 | var Worker = window.Worker; 84 | 85 | if (!URL || !Blob || !Worker || !script) { 86 | return null; 87 | } 88 | 89 | var blob = new Blob([script]); 90 | var worker = new Worker(URL.createObjectURL(blob)); 91 | return worker; 92 | } 93 | 94 | // setupClipboard: bind to clipboard events (intended for document.body) 95 | function setupClipboard(element, opts) { 96 | 97 | if (!FileReaderJS.enabled) { 98 | return; 99 | } 100 | var instanceOptions = extend(extend({}, FileReaderJS.opts), opts); 101 | 102 | element.addEventListener("paste", onpaste, false); 103 | 104 | function onpaste(e) { 105 | var files = []; 106 | var clipboardData = e.clipboardData || {}; 107 | var items = clipboardData.items || []; 108 | 109 | for (var i = 0; i < items.length; i++) { 110 | var file = items[i].getAsFile(); 111 | 112 | if (file) { 113 | 114 | // Create a fake file name for images from clipboard, since this data doesn't get sent 115 | var matches = new RegExp("/\(.*\)").exec(file.type); 116 | if (!file.name && matches) { 117 | var extension = matches[1]; 118 | file.name = "clipboard" + i + "." + extension; 119 | } 120 | 121 | files.push(file); 122 | } 123 | } 124 | 125 | if (files.length) { 126 | processFileList(e, files, instanceOptions); 127 | e.preventDefault(); 128 | e.stopPropagation(); 129 | } 130 | } 131 | } 132 | 133 | // setupInput: bind the 'change' event to an input[type=file] 134 | function setupInput(input, opts) { 135 | 136 | if (!FileReaderJS.enabled) { 137 | return; 138 | } 139 | var instanceOptions = extend(extend({}, FileReaderJS.opts), opts); 140 | 141 | input.addEventListener("change", inputChange, false); 142 | input.addEventListener("drop", inputDrop, false); 143 | 144 | function inputChange(e) { 145 | processFileList(e, input.files, instanceOptions); 146 | } 147 | 148 | function inputDrop(e) { 149 | e.stopPropagation(); 150 | e.preventDefault(); 151 | processFileList(e, e.dataTransfer.files, instanceOptions); 152 | } 153 | } 154 | 155 | // setupDrop: bind the 'drop' event for a DOM element 156 | function setupDrop(dropbox, opts) { 157 | 158 | if (!FileReaderJS.enabled) { 159 | return; 160 | } 161 | var instanceOptions = extend(extend({}, FileReaderJS.opts), opts); 162 | var dragClass = instanceOptions.dragClass; 163 | var initializedOnBody = false; 164 | 165 | // Bind drag events to the dropbox to add the class while dragging, and accept the drop data transfer. 166 | dropbox.addEventListener("dragenter", onlyWithFiles(dragenter), false); 167 | dropbox.addEventListener("dragleave", onlyWithFiles(dragleave), false); 168 | dropbox.addEventListener("dragover", onlyWithFiles(dragover), false); 169 | dropbox.addEventListener("drop", onlyWithFiles(drop), false); 170 | 171 | // Bind to body to prevent the dropbox events from firing when it was initialized on the page. 172 | document.body.addEventListener("dragstart", bodydragstart, true); 173 | document.body.addEventListener("dragend", bodydragend, true); 174 | document.body.addEventListener("drop", bodydrop, false); 175 | 176 | function bodydragend(e) { 177 | initializedOnBody = false; 178 | } 179 | 180 | function bodydragstart(e) { 181 | initializedOnBody = true; 182 | } 183 | 184 | function bodydrop(e) { 185 | if (e.dataTransfer.files && e.dataTransfer.files.length ){ 186 | e.stopPropagation(); 187 | e.preventDefault(); 188 | } 189 | } 190 | 191 | function onlyWithFiles(fn) { 192 | return function() { 193 | if (!initializedOnBody) { 194 | fn.apply(this, arguments); 195 | } 196 | }; 197 | } 198 | 199 | function drop(e) { 200 | e.stopPropagation(); 201 | e.preventDefault(); 202 | if (dragClass) { 203 | removeClass(dropbox, dragClass); 204 | } 205 | processFileList(e, e.dataTransfer.files, instanceOptions); 206 | } 207 | 208 | function dragenter(e) { 209 | e.stopPropagation(); 210 | e.preventDefault(); 211 | if (dragClass) { 212 | addClass(dropbox, dragClass); 213 | } 214 | } 215 | 216 | function dragleave(e) { 217 | if (dragClass) { 218 | removeClass(dropbox, dragClass); 219 | } 220 | } 221 | 222 | function dragover(e) { 223 | e.stopPropagation(); 224 | e.preventDefault(); 225 | if (dragClass) { 226 | addClass(dropbox, dragClass); 227 | } 228 | } 229 | } 230 | 231 | // setupCustomFileProperties: modify the file object with extra properties 232 | function setupCustomFileProperties(files, groupID) { 233 | for (var i = 0; i < files.length; i++) { 234 | var file = files[i]; 235 | file.extra = { 236 | nameNoExtension: file.name.substring(0, file.name.lastIndexOf('.')), 237 | extension: file.name.substring(file.name.lastIndexOf('.') + 1), 238 | fileID: i, 239 | uniqueID: getUniqueID(), 240 | groupID: groupID, 241 | prettySize: prettySize(file.size) 242 | }; 243 | } 244 | } 245 | 246 | // getReadAsMethod: return method name for 'readAs*' - http://www.w3.org/TR/FileAPI/#reading-a-file 247 | function getReadAsMethod(type, readAsMap, readAsDefault) { 248 | for (var r in readAsMap) { 249 | if (type.match(new RegExp(r))) { 250 | return 'readAs' + readAsMap[r]; 251 | } 252 | } 253 | return 'readAs' + readAsDefault; 254 | } 255 | 256 | // processFileList: read the files with FileReader, send off custom events. 257 | function processFileList(e, files, opts) { 258 | 259 | var filesLeft = files.length; 260 | var group = { 261 | groupID: getGroupID(), 262 | files: files, 263 | started: new Date() 264 | }; 265 | 266 | function groupEnd() { 267 | group.ended = new Date(); 268 | opts.on.groupend(group); 269 | } 270 | 271 | function groupFileDone() { 272 | if (--filesLeft === 0) { 273 | groupEnd(); 274 | } 275 | } 276 | 277 | FileReaderJS.output.push(group); 278 | setupCustomFileProperties(files, group.groupID); 279 | 280 | opts.on.groupstart(group); 281 | 282 | // No files in group - end immediately 283 | if (!files.length) { 284 | groupEnd(); 285 | return; 286 | } 287 | 288 | var supportsSync = sync && FileReaderSyncSupport; 289 | var syncWorker; 290 | 291 | // Only initialize the synchronous worker if the option is enabled - to prevent the overhead 292 | if (supportsSync) { 293 | syncWorker = makeWorker(workerScript); 294 | syncWorker.onmessage = function(e) { 295 | var file = e.data.file; 296 | var result = e.data.result; 297 | 298 | // Workers seem to lose the custom property on the file object. 299 | if (!file.extra) { 300 | file.extra = e.data.extra; 301 | } 302 | 303 | file.extra.ended = new Date(); 304 | 305 | // Call error or load event depending on success of the read from the worker. 306 | opts.on[result === "error" ? "error" : "load"]({ target: { result: result } }, file); 307 | groupFileDone(); 308 | }; 309 | } 310 | 311 | Array.prototype.forEach.call(files, function(file) { 312 | 313 | file.extra.started = new Date(); 314 | 315 | if (opts.accept && !file.type.match(new RegExp(opts.accept))) { 316 | opts.on.skip(file); 317 | groupFileDone(); 318 | return; 319 | } 320 | 321 | if (opts.on.beforestart(file) === false) { 322 | opts.on.skip(file); 323 | groupFileDone(); 324 | return; 325 | } 326 | 327 | var readAs = getReadAsMethod(file.type, opts.readAsMap, opts.readAsDefault); 328 | 329 | if (syncWorker) { 330 | syncWorker.postMessage({ 331 | file: file, 332 | extra: file.extra, 333 | readAs: readAs 334 | }); 335 | } 336 | else { 337 | 338 | var reader = new FileReader(); 339 | reader.originalEvent = e; 340 | 341 | fileReaderEvents.forEach(function(eventName) { 342 | reader['on' + eventName] = function(e) { 343 | if (eventName == 'load' || eventName == 'error') { 344 | file.extra.ended = new Date(); 345 | } 346 | opts.on[eventName](e, file); 347 | if (eventName == 'loadend') { 348 | groupFileDone(); 349 | } 350 | }; 351 | }); 352 | reader[readAs](file); 353 | } 354 | }); 355 | } 356 | 357 | // checkFileReaderSyncSupport: Create a temporary worker and see if FileReaderSync exists 358 | function checkFileReaderSyncSupport() { 359 | var worker = makeWorker(syncDetectionScript); 360 | if (worker) { 361 | worker.onmessage =function(e) { 362 | FileReaderSyncSupport = e.data; 363 | }; 364 | worker.postMessage({}); 365 | } 366 | } 367 | 368 | // noop: do nothing 369 | function noop() { 370 | 371 | } 372 | 373 | // extend: used to make deep copies of options object 374 | function extend(destination, source) { 375 | for (var property in source) { 376 | if (source[property] && source[property].constructor && 377 | source[property].constructor === Object) { 378 | destination[property] = destination[property] || {}; 379 | arguments.callee(destination[property], source[property]); 380 | } 381 | else { 382 | destination[property] = source[property]; 383 | } 384 | } 385 | return destination; 386 | } 387 | 388 | // hasClass: does an element have the css class? 389 | function hasClass(el, name) { 390 | return new RegExp("(?:^|\\s+)" + name + "(?:\\s+|$)").test(el.className); 391 | } 392 | 393 | // addClass: add the css class for the element. 394 | function addClass(el, name) { 395 | if (!hasClass(el, name)) { 396 | el.className = el.className ? [el.className, name].join(' ') : name; 397 | } 398 | } 399 | 400 | // removeClass: remove the css class from the element. 401 | function removeClass(el, name) { 402 | if (hasClass(el, name)) { 403 | var c = el.className; 404 | el.className = c.replace(new RegExp("(?:^|\\s+)" + name + "(?:\\s+|$)", "g"), " ").replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 405 | } 406 | } 407 | 408 | // prettySize: convert bytes to a more readable string. 409 | function prettySize(bytes) { 410 | var s = ['bytes', 'kb', 'MB', 'GB', 'TB', 'PB']; 411 | var e = Math.floor(Math.log(bytes)/Math.log(1024)); 412 | return (bytes/Math.pow(1024, Math.floor(e))).toFixed(2)+" "+s[e]; 413 | } 414 | 415 | // getGroupID: generate a unique int ID for groups. 416 | var getGroupID = (function(id) { 417 | return function() { 418 | return id++; 419 | }; 420 | })(0); 421 | 422 | // getUniqueID: generate a unique int ID for files 423 | var getUniqueID = (function(id) { 424 | return function() { 425 | return id++; 426 | }; 427 | })(0); 428 | 429 | // The interface is supported, bind the FileReaderJS callbacks 430 | FileReaderJS.enabled = true; 431 | 432 | })(this, document); -------------------------------------------------------------------------------- /js/jdataview.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"jdataview.js","sources":["../../umd/header.js","../../src/jdataview.js","../../umd/footer.js"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | var SQL_FROM_REGEX = /FROM\s+([^\s;]+)/mi; 2 | var SQL_LIMIT_REGEX = /LIMIT\s+(\d+)(?:\s*,\s*(\d+))?/mi; 3 | var SQL_SELECT_REGEX = /SELECT\s+[^;]+\s+FROM\s+/mi; 4 | 5 | var db = null; 6 | var rowCounts = []; 7 | var editor = ace.edit("sql-editor"); 8 | var bottomBarDefaultPos = null, bottomBarDisplayStyle = null; 9 | var errorBox = $("#error"); 10 | var lastCachedQueryCount = {}; 11 | 12 | $.urlParam = function(name){ 13 | var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); 14 | if (results==null){ 15 | return null; 16 | } 17 | else{ 18 | return results[1] || 0; 19 | } 20 | }; 21 | 22 | var fileReaderOpts = { 23 | readAsDefault: "ArrayBuffer", on: { 24 | load: function (e, file) { 25 | loadDB(e.target.result); 26 | } 27 | } 28 | }; 29 | 30 | var selectFormatter = function (item) { 31 | var index = item.text.indexOf("("); 32 | if (index > -1) { 33 | var name = item.text.substring(0, index); 34 | return name + '' + item.text.substring(index - 1) + ""; 35 | } else { 36 | return item.text; 37 | } 38 | }; 39 | 40 | var windowResize = function () { 41 | positionFooter(); 42 | var container = $("#main-container"); 43 | var cleft = container.offset().left + container.outerWidth(); 44 | $("#bottom-bar").css("left", cleft); 45 | }; 46 | 47 | var positionFooter = function () { 48 | var footer = $("#bottom-bar"); 49 | var pager = footer.find("#pager"); 50 | var container = $("#main-container"); 51 | var containerHeight = container.height(); 52 | var footerTop = ($(window).scrollTop()+$(window).height()); 53 | 54 | if (bottomBarDefaultPos === null) { 55 | bottomBarDefaultPos = footer.css("position"); 56 | } 57 | 58 | if (bottomBarDisplayStyle === null) { 59 | bottomBarDisplayStyle = pager.css("display"); 60 | } 61 | 62 | if (footerTop > containerHeight) { 63 | footer.css({ 64 | position: "static" 65 | }); 66 | pager.css("display", "inline-block"); 67 | } else { 68 | footer.css({ 69 | position: bottomBarDefaultPos 70 | }); 71 | pager.css("display", bottomBarDisplayStyle); 72 | } 73 | }; 74 | 75 | var toggleFullScreen = function () { 76 | var container = $("#main-container"); 77 | var resizerIcon = $("#resizer i"); 78 | 79 | container.toggleClass('container container-fluid'); 80 | resizerIcon.toggleClass('glyphicon-resize-full glyphicon-resize-small'); 81 | } 82 | $('#resizer').click(toggleFullScreen); 83 | 84 | if (typeof FileReader === "undefined") { 85 | $('#dropzone, #dropzone-dialog').hide(); 86 | $('#compat-error').show(); 87 | } else { 88 | $('#dropzone, #dropzone-dialog').fileReaderJS(fileReaderOpts); 89 | } 90 | 91 | //Initialize editor 92 | editor.setTheme("ace/theme/chrome"); 93 | editor.renderer.setShowGutter(false); 94 | editor.renderer.setShowPrintMargin(false); 95 | editor.renderer.setPadding(20); 96 | editor.renderer.setScrollMargin(8, 8, 0, 0); 97 | editor.setHighlightActiveLine(false); 98 | editor.getSession().setUseWrapMode(true); 99 | editor.getSession().setMode("ace/mode/sql"); 100 | editor.setOptions({ maxLines: 5 }); 101 | editor.setFontSize(16); 102 | 103 | //Update pager position 104 | $(window).resize(windowResize).scroll(positionFooter); 105 | windowResize(); 106 | 107 | $(".no-propagate").on("click", function (el) { el.stopPropagation(); }); 108 | 109 | //Check url to load remote DB 110 | var loadUrlDB = $.urlParam('url'); 111 | if (loadUrlDB != null) { 112 | setIsLoading(true); 113 | var xhr = new XMLHttpRequest(); 114 | xhr.open('GET', decodeURIComponent(loadUrlDB), true); 115 | xhr.responseType = 'arraybuffer'; 116 | 117 | xhr.onload = function(e) { 118 | loadDB(this.response); 119 | }; 120 | xhr.onerror = function (e) { 121 | setIsLoading(false); 122 | }; 123 | xhr.send(); 124 | } 125 | 126 | function loadDB(arrayBuffer) { 127 | setIsLoading(true); 128 | 129 | resetTableList(); 130 | 131 | initSqlJs().then(function(SQL){ 132 | var tables; 133 | try { 134 | db = new SQL.Database(new Uint8Array(arrayBuffer)); 135 | 136 | //Get all table names from master table 137 | tables = db.prepare("SELECT * FROM sqlite_master WHERE type='table' OR type='view' ORDER BY name"); 138 | } catch (ex) { 139 | setIsLoading(false); 140 | alert(ex); 141 | return; 142 | } 143 | 144 | var firstTableName = null; 145 | var tableList = $("#tables"); 146 | 147 | while (tables.step()) { 148 | var rowObj = tables.getAsObject(); 149 | var name = rowObj.name; 150 | 151 | if (firstTableName === null) { 152 | firstTableName = name; 153 | } 154 | var rowCount = getTableRowsCount(name); 155 | rowCounts[name] = rowCount; 156 | tableList.append(''); 157 | } 158 | 159 | //Select first table and show It 160 | tableList.select2("val", firstTableName); 161 | doDefaultSelect(firstTableName); 162 | 163 | $("#output-box").fadeIn(); 164 | $(".nouploadinfo").hide(); 165 | $("#sample-db-link").hide(); 166 | $("#dropzone").delay(50).animate({height: 50}, 500); 167 | $("#success-box").show(); 168 | 169 | setIsLoading(false); 170 | }); 171 | } 172 | 173 | function getTableRowsCount(name) { 174 | var sel = db.prepare("SELECT COUNT(*) AS count FROM '" + name + "'"); 175 | if (sel.step()) { 176 | return sel.getAsObject().count; 177 | } else { 178 | return -1; 179 | } 180 | } 181 | 182 | function getQueryRowCount(query) { 183 | if (query === lastCachedQueryCount.select) { 184 | return lastCachedQueryCount.count; 185 | } 186 | 187 | var queryReplaced = query.replace(SQL_SELECT_REGEX, "SELECT COUNT(*) AS count_sv FROM "); 188 | 189 | if (queryReplaced !== query) { 190 | queryReplaced = queryReplaced.replace(SQL_LIMIT_REGEX, ""); 191 | var sel = db.prepare(queryReplaced); 192 | if (sel.step()) { 193 | var count = sel.getAsObject().count_sv; 194 | 195 | lastCachedQueryCount.select = query; 196 | lastCachedQueryCount.count = count; 197 | 198 | return count; 199 | } else { 200 | return -1; 201 | } 202 | } else { 203 | return -1; 204 | } 205 | } 206 | 207 | function getTableColumnTypes(tableName) { 208 | var result = []; 209 | var sel = db.prepare("PRAGMA table_info('" + tableName + "')"); 210 | 211 | while (sel.step()) { 212 | var obj = sel.getAsObject(); 213 | result[obj.name] = obj.type; 214 | /*if (obj.notnull === 1) { 215 | result[obj.name] += " NOTNULL"; 216 | }*/ 217 | } 218 | 219 | return result; 220 | } 221 | 222 | function resetTableList() { 223 | var tables = $("#tables"); 224 | rowCounts = []; 225 | tables.empty(); 226 | tables.append(""); 227 | tables.select2({ 228 | placeholder: "Select a table", 229 | formatSelection: selectFormatter, 230 | formatResult: selectFormatter 231 | }); 232 | tables.on("change", function (e) { 233 | doDefaultSelect(e.val); 234 | }); 235 | } 236 | 237 | function setIsLoading(isLoading) { 238 | var dropText = $("#drop-text"); 239 | var loading = $("#drop-loading"); 240 | if (isLoading) { 241 | dropText.hide(); 242 | loading.show(); 243 | } else { 244 | dropText.show(); 245 | loading.hide(); 246 | } 247 | } 248 | 249 | function extractFileNameWithoutExt(filename) { 250 | var dotIndex = filename.lastIndexOf("."); 251 | if (dotIndex > -1) { 252 | return filename.substr(0, dotIndex); 253 | } else { 254 | return filename; 255 | } 256 | } 257 | 258 | function dropzoneClick() { 259 | $("#dropzone-dialog").click(); 260 | } 261 | 262 | function doDefaultSelect(name) { 263 | var defaultSelect = "SELECT * FROM '" + name + "' LIMIT 0,30"; 264 | editor.setValue(defaultSelect, -1); 265 | renderQuery(defaultSelect); 266 | } 267 | 268 | function executeSql() { 269 | var query = editor.getValue(); 270 | renderQuery(query); 271 | $("#tables").select2("val", getTableNameFromQuery(query)); 272 | } 273 | 274 | function getTableNameFromQuery(query) { 275 | var sqlRegex = SQL_FROM_REGEX.exec(query); 276 | if (sqlRegex != null) { 277 | return sqlRegex[1].replace(/"|'/gi, ""); 278 | } else { 279 | return null; 280 | } 281 | } 282 | 283 | function parseLimitFromQuery(query, tableName) { 284 | var sqlRegex = SQL_LIMIT_REGEX.exec(query); 285 | if (sqlRegex != null) { 286 | var result = {}; 287 | 288 | if (sqlRegex.length > 2 && typeof sqlRegex[2] !== "undefined") { 289 | result.offset = parseInt(sqlRegex[1]); 290 | result.max = parseInt(sqlRegex[2]); 291 | } else { 292 | result.offset = 0; 293 | result.max = parseInt(sqlRegex[1]); 294 | } 295 | 296 | if (result.max == 0) { 297 | result.pages = 0; 298 | result.currentPage = 0; 299 | return result; 300 | } 301 | 302 | if (typeof tableName === "undefined") { 303 | tableName = getTableNameFromQuery(query); 304 | } 305 | 306 | var queryRowsCount = getQueryRowCount(query); 307 | if (queryRowsCount != -1) { 308 | result.pages = Math.ceil(queryRowsCount / result.max); 309 | } 310 | result.currentPage = Math.floor(result.offset / result.max) + 1; 311 | result.rowCount = queryRowsCount; 312 | 313 | return result; 314 | } else { 315 | return null; 316 | } 317 | } 318 | 319 | function setPage(el, next) { 320 | if ($(el).hasClass("disabled")) return; 321 | 322 | var query = editor.getValue(); 323 | var limit = parseLimitFromQuery(query); 324 | 325 | var pageToSet; 326 | if (typeof next !== "undefined") { 327 | pageToSet = (next ? limit.currentPage : limit.currentPage - 2 ); 328 | } else { 329 | var page = prompt("Go to page"); 330 | if (!isNaN(page) && page >= 1 && page <= limit.pages) { 331 | pageToSet = page - 1; 332 | } else { 333 | return; 334 | } 335 | } 336 | 337 | var offset = (pageToSet * limit.max); 338 | editor.setValue(query.replace(SQL_LIMIT_REGEX, "LIMIT " + offset + "," + limit.max), -1); 339 | 340 | executeSql(); 341 | } 342 | 343 | function refreshPagination(query, tableName) { 344 | var limit = parseLimitFromQuery(query, tableName); 345 | if (limit !== null && limit.pages > 0) { 346 | 347 | var pager = $("#pager"); 348 | pager.attr("title", "Row count: " + limit.rowCount); 349 | pager.tooltip('fixTitle'); 350 | pager.text(limit.currentPage + " / " + limit.pages); 351 | 352 | if (limit.currentPage <= 1) { 353 | $("#page-prev").addClass("disabled"); 354 | } else { 355 | $("#page-prev").removeClass("disabled"); 356 | } 357 | 358 | if ((limit.currentPage + 1) > limit.pages) { 359 | $("#page-next").addClass("disabled"); 360 | } else { 361 | $("#page-next").removeClass("disabled"); 362 | } 363 | 364 | $("#bottom-bar").show(); 365 | } else { 366 | $("#bottom-bar").hide(); 367 | } 368 | } 369 | 370 | function showError(msg) { 371 | $("#data").hide(); 372 | $("#bottom-bar").hide(); 373 | errorBox.show(); 374 | errorBox.text(msg); 375 | } 376 | 377 | function htmlEncode(value){ 378 | return $('
').text(value).html(); 379 | } 380 | 381 | function renderQuery(query) { 382 | var dataBox = $("#data"); 383 | var thead = dataBox.find("thead").find("tr"); 384 | var tbody = dataBox.find("tbody"); 385 | 386 | thead.empty(); 387 | tbody.empty(); 388 | errorBox.hide(); 389 | dataBox.show(); 390 | 391 | var columnTypes = []; 392 | var tableName = getTableNameFromQuery(query); 393 | if (tableName != null) { 394 | columnTypes = getTableColumnTypes(tableName); 395 | } 396 | 397 | var sel; 398 | try { 399 | sel = db.prepare(query); 400 | } catch (ex) { 401 | showError(ex); 402 | return; 403 | } 404 | 405 | var addedColums = false; 406 | while (sel.step()) { 407 | if (!addedColums) { 408 | addedColums = true; 409 | var columnNames = sel.getColumnNames(); 410 | for (var i = 0; i < columnNames.length; i++) { 411 | var type = columnTypes[columnNames[i]]; 412 | thead.append('' + columnNames[i] + ""); 413 | } 414 | } 415 | 416 | var tr = $(''); 417 | var s = sel.get(); 418 | for (var i = 0; i < s.length; i++) { 419 | tr.append('' + htmlEncode(s[i]) + ''); 420 | } 421 | tbody.append(tr); 422 | } 423 | 424 | refreshPagination(query, tableName); 425 | 426 | $('[data-toggle="tooltip"]').tooltip({html: true}); 427 | dataBox.editableTableWidget(); 428 | 429 | setTimeout(function () { 430 | positionFooter(); 431 | }, 100); 432 | } 433 | -------------------------------------------------------------------------------- /js/mindmup-editabletable.js: -------------------------------------------------------------------------------- 1 | /*global $, window*/ 2 | $.fn.editableTableWidget = function (options) { 3 | 'use strict'; 4 | return $(this).each(function () { 5 | var buildDefaultOptions = function () { 6 | var opts = $.extend({}, $.fn.editableTableWidget.defaultOptions); 7 | opts.editor = opts.editor.clone(); 8 | return opts; 9 | }, 10 | activeOptions = $.extend(buildDefaultOptions(), options), 11 | ARROW_LEFT = 37, ARROW_UP = 38, ARROW_RIGHT = 39, ARROW_DOWN = 40, ENTER = 13, ESC = 27, TAB = 9, 12 | element = $(this), 13 | editor = activeOptions.editor.css('position', 'absolute').hide().appendTo(element.parent()), 14 | active, 15 | isEllipsisActive = function(obj) { 16 | return (obj.outerWidth() < obj[0].scrollWidth); 17 | }, 18 | showEditor = function (select) { 19 | active = element.find('td:focus'); 20 | 21 | if (active.length) { 22 | var height = active.height(); 23 | var width = active.width(); 24 | if (isEllipsisActive(active)) { 25 | height *= 2; 26 | width = Math.max(width, 250); 27 | } 28 | 29 | editor.val(active.text()) 30 | .removeClass('error') 31 | .show() 32 | .offset(active.offset()) 33 | .css(active.css(activeOptions.cloneProperties)) 34 | .width(width) 35 | .height(height) 36 | .focus(); 37 | if (select) { 38 | editor.select(); 39 | } 40 | } 41 | }, 42 | setActiveText = function () { 43 | var text = editor.val(), 44 | evt = $.Event('change'), 45 | originalContent; 46 | if (active.text() === text || editor.hasClass('error')) { 47 | return true; 48 | } 49 | originalContent = active.html(); 50 | active.text(text).trigger(evt, text); 51 | if (evt.result === false) { 52 | active.html(originalContent); 53 | } 54 | }, 55 | movement = function (element, keycode) { 56 | if (keycode === ARROW_RIGHT) { 57 | return element.next('td'); 58 | } else if (keycode === ARROW_LEFT) { 59 | return element.prev('td'); 60 | } else if (keycode === ARROW_UP) { 61 | return element.parent().prev().children().eq(element.index()); 62 | } else if (keycode === ARROW_DOWN) { 63 | return element.parent().next().children().eq(element.index()); 64 | } 65 | return []; 66 | }; 67 | editor.blur(function () { 68 | setActiveText(); 69 | editor.hide(); 70 | }).keydown(function (e) { 71 | if (e.which === ENTER) { 72 | setActiveText(); 73 | editor.hide(); 74 | active.focus(); 75 | e.preventDefault(); 76 | e.stopPropagation(); 77 | } else if (e.which === ESC) { 78 | editor.val(active.text()); 79 | e.preventDefault(); 80 | e.stopPropagation(); 81 | editor.hide(); 82 | active.focus(); 83 | } else if (e.which === TAB) { 84 | active.focus(); 85 | } else if (this.selectionEnd - this.selectionStart === this.value.length) { 86 | var possibleMove = movement(active, e.which); 87 | if (possibleMove.length > 0) { 88 | possibleMove.focus(); 89 | e.preventDefault(); 90 | e.stopPropagation(); 91 | } 92 | } 93 | }) 94 | .on('input paste', function () { 95 | var evt = $.Event('validate'); 96 | active.trigger(evt, editor.val()); 97 | if (evt.result === false) { 98 | editor.addClass('error'); 99 | } else { 100 | editor.removeClass('error'); 101 | } 102 | }); 103 | element.on('click keypress dblclick', showEditor) 104 | //.css('cursor', 'pointer') 105 | .keydown(function (e) { 106 | var prevent = true, 107 | possibleMove = movement($(e.target), e.which); 108 | if (possibleMove.length > 0) { 109 | possibleMove.focus(); 110 | } else if (e.which === ENTER) { 111 | showEditor(false); 112 | } else if (e.which === 17 || e.which === 91 || e.which === 93) { 113 | showEditor(true); 114 | prevent = false; 115 | } else { 116 | prevent = false; 117 | } 118 | if (prevent) { 119 | e.stopPropagation(); 120 | e.preventDefault(); 121 | } 122 | }); 123 | 124 | element.find('td').prop('tabindex', 1); 125 | 126 | $(window).on('resize', function () { 127 | if (editor.is(':visible')) { 128 | editor.offset(active.offset()) 129 | .width(active.width()) 130 | .height(active.height()); 131 | } 132 | }); 133 | }); 134 | 135 | }; 136 | $.fn.editableTableWidget.defaultOptions = { 137 | cloneProperties: ['padding', 'padding-top', 'padding-bottom', 'padding-left', 'padding-right', 138 | 'text-align', 'font', 'font-size', 'font-family', 'font-weight', 139 | 'border', 'border-top', 'border-bottom', 'border-left', 'border-right'], 140 | editor: $('