├── .gitignore ├── LICENSE ├── README.md ├── conf ├── mysql.cnf ├── redis.conf ├── uwsgi.ini └── web_nginx ├── contributors.txt ├── deploy.sh ├── doc ├── Info.md ├── Packages.md └── README.md ├── install_production.sh ├── logs ├── access_log │ └── .gitkeep ├── django_log │ └── .gitkeep └── error_log │ └── .gitkeep ├── pip.sh ├── requirements ├── base.txt ├── extension.txt └── test.txt ├── run.sh ├── scripts ├── deploy.sh ├── init.sh ├── install.sh ├── install_production.sh ├── mange_frontend.sh ├── pip.sh ├── product_run.sh ├── run.sh └── test.sh └── web ├── __init__.py ├── accounts ├── __init__.py ├── admin.py ├── models.py ├── tests.py └── views.py ├── apps ├── __init__.py └── web │ ├── __init__.py │ ├── admin.py │ ├── form.py │ ├── migrations │ └── __init__.py │ ├── models.py │ ├── templatetags │ └── __init__.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── manage.py └── quantvc ├── __init__.py ├── assets ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.css.map │ └── bootstrap.min.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 └── js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── jquery-2.1.1.js │ ├── jquery-2.1.4.js │ ├── jquery-2.1.4.min.js │ └── npm.js ├── locale └── .gitkeep ├── media └── .gitkeep ├── settings ├── __init__.py ├── base.py ├── common.py ├── dev.py ├── local.py ├── product.py └── test.py ├── static_files └── robots.txt ├── templates ├── base │ ├── 403.html │ ├── 404.html │ ├── 500.html │ ├── base.html │ └── base_site.html └── index.html ├── urls.py └── wsgi.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | lib/ 17 | lib64/ 18 | parts/ 19 | sdist/ 20 | var/ 21 | *.egg-info/ 22 | .installed.cfg 23 | *.egg 24 | 25 | # PyInstaller 26 | # Usually these files are written by a python script from a template 27 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 28 | *.manifest 29 | *.spec 30 | 31 | # Installer logs 32 | pip-log.txt 33 | pip-delete-this-directory.txt 34 | 35 | # Unit test / coverage reports 36 | htmlcov/ 37 | .tox/ 38 | .coverage 39 | .cache 40 | nosetests.xml 41 | coverage.xml 42 | 43 | # Translations 44 | *.mo 45 | *.pot 46 | 47 | # Django stuff: 48 | *.log 49 | 50 | # Sphinx documentation 51 | docs/_build/ 52 | 53 | # PyBuilder 54 | target/ 55 | 56 | 57 | 58 | ### JetBrains template 59 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm 60 | 61 | *.iml 62 | 63 | ## Directory-based project format: 64 | .idea/ 65 | # if you remove the above rule, at least ignore the following: 66 | 67 | # User-specific stuff: 68 | # .idea/workspace.xml 69 | # .idea/tasks.xml 70 | # .idea/dictionaries 71 | 72 | # Sensitive or high-churn files: 73 | # .idea/dataSources.ids 74 | # .idea/dataSources.xml 75 | # .idea/sqlDataSources.xml 76 | # .idea/dynamic.xml 77 | # .idea/uiDesigner.xml 78 | 79 | # Gradle: 80 | # .idea/gradle.xml 81 | # .idea/libraries 82 | 83 | # Mongo Explorer plugin: 84 | # .idea/mongoSettings.xml 85 | 86 | ## File-based project format: 87 | *.ipr 88 | *.iws 89 | 90 | ## Plugin-specific files: 91 | 92 | # IntelliJ 93 | out/ 94 | 95 | # mpeltonen/sbt-idea plugin 96 | .idea_modules/ 97 | 98 | # JIRA plugin 99 | atlassian-ide-plugin.xml 100 | 101 | # Crashlytics plugin (for Android Studio and IntelliJ) 102 | com_crashlytics_export_strings.xml 103 | crashlytics.properties 104 | crashlytics-build.properties 105 | 106 | web/quantvc/static/ 107 | 108 | 109 | -------------------------------------------------------------------------------- /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 | 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | simple-django 2 | ============= 3 | 4 | Userful django apps framework demo. Integrated with the useful django apps. 5 | -------------------------------------------------------------------------------- /conf/mysql.cnf: -------------------------------------------------------------------------------- 1 | [client] 2 | default-character-set=utf8 3 | 4 | [mysql] 5 | default-character-set=utf8 6 | 7 | [mysqld] 8 | collation-server = utf8_unicode_ci 9 | character-set-server = utf8 -------------------------------------------------------------------------------- /conf/redis.conf: -------------------------------------------------------------------------------- 1 | 2 | # Note on units: when memory size is needed, it is possible to specify 3 | # it in the usual form of 1k 5GB 4M and so forth: 4 | # 5 | # 1k => 1000 bytes 6 | # 1kb => 1024 bytes 7 | # 1m => 1000000 bytes 8 | # 1mb => 1024*1024 bytes 9 | # 1g => 1000000000 bytes 10 | # 1gb => 1024*1024*1024 bytes 11 | # 12 | # units are case insensitive so 1GB 1Gb 1gB are all the same. 13 | 14 | ################################## INCLUDES ################################### 15 | 16 | # Include one or more other config files here. This is useful if you 17 | # have a standard template that goes to all Redis servers but also need 18 | # to customize a few per-server settings. Include files can include 19 | # other files, so use this wisely. 20 | # 21 | # Notice option "include" won't be rewritten by command "CONFIG REWRITE" 22 | # from admin or Redis Sentinel. Since Redis always uses the last processed 23 | # line as value of a configuration directive, you'd better put includes 24 | # at the beginning of this file to avoid overwriting config change at runtime. 25 | # 26 | # If instead you are interested in using includes to override configuration 27 | # options, it is better to use include as the last line. 28 | # 29 | # include /path/to/local.conf 30 | # include /path/to/other.conf 31 | 32 | ################################ GENERAL ##################################### 33 | 34 | # By default Redis does not run as a daemon. Use 'yes' if you need it. 35 | # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. 36 | daemonize no 37 | 38 | # When running daemonized, Redis writes a pid file in /var/run/redis.pid by 39 | # default. You can specify a custom pid file location here. 40 | pidfile /var/run/redis.pid 41 | 42 | # Accept connections on the specified port, default is 6379. 43 | # If port 0 is specified Redis will not listen on a TCP socket. 44 | port 6379 45 | 46 | # TCP listen() backlog. 47 | # 48 | # In high requests-per-second environments you need an high backlog in order 49 | # to avoid slow clients connections issues. Note that the Linux kernel 50 | # will silently truncate it to the value of /proc/sys/net/core/somaxconn so 51 | # make sure to raise both the value of somaxconn and tcp_max_syn_backlog 52 | # in order to get the desired effect. 53 | tcp-backlog 511 54 | 55 | # By default Redis listens for connections from all the network interfaces 56 | # available on the server. It is possible to listen to just one or multiple 57 | # interfaces using the "bind" configuration directive, followed by one or 58 | # more IP addresses. 59 | # 60 | # Examples: 61 | # 62 | # bind 192.168.1.100 10.0.0.1 63 | # bind 127.0.0.1 64 | 65 | # Specify the path for the Unix socket that will be used to listen for 66 | # incoming connections. There is no default, so Redis will not listen 67 | # on a unix socket when not specified. 68 | # 69 | # unixsocket /tmp/redis.sock 70 | # unixsocketperm 700 71 | 72 | # Close the connection after a client is idle for N seconds (0 to disable) 73 | timeout 0 74 | 75 | # TCP keepalive. 76 | # 77 | # If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence 78 | # of communication. This is useful for two reasons: 79 | # 80 | # 1) Detect dead peers. 81 | # 2) Take the connection alive from the point of view of network 82 | # equipment in the middle. 83 | # 84 | # On Linux, the specified value (in seconds) is the period used to send ACKs. 85 | # Note that to close the connection the double of the time is needed. 86 | # On other kernels the period depends on the kernel configuration. 87 | # 88 | # A reasonable value for this option is 60 seconds. 89 | tcp-keepalive 0 90 | 91 | # Specify the server verbosity level. 92 | # This can be one of: 93 | # debug (a lot of information, useful for development/testing) 94 | # verbose (many rarely useful info, but not a mess like the debug level) 95 | # notice (moderately verbose, what you want in production probably) 96 | # warning (only very important / critical messages are logged) 97 | loglevel notice 98 | 99 | # Specify the log file name. Also the empty string can be used to force 100 | # Redis to log on the standard output. Note that if you use standard 101 | # output for logging but daemonize, logs will be sent to /dev/null 102 | logfile "" 103 | 104 | # To enable logging to the system logger, just set 'syslog-enabled' to yes, 105 | # and optionally update the other syslog parameters to suit your needs. 106 | # syslog-enabled no 107 | 108 | # Specify the syslog identity. 109 | # syslog-ident redis 110 | 111 | # Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. 112 | # syslog-facility local0 113 | 114 | # Set the number of databases. The default database is DB 0, you can select 115 | # a different one on a per-connection basis using SELECT where 116 | # dbid is a number between 0 and 'databases'-1 117 | databases 16 118 | 119 | ################################ SNAPSHOTTING ################################ 120 | # 121 | # Save the DB on disk: 122 | # 123 | # save 124 | # 125 | # Will save the DB if both the given number of seconds and the given 126 | # number of write operations against the DB occurred. 127 | # 128 | # In the example below the behaviour will be to save: 129 | # after 900 sec (15 min) if at least 1 key changed 130 | # after 300 sec (5 min) if at least 10 keys changed 131 | # after 60 sec if at least 10000 keys changed 132 | # 133 | # Note: you can disable saving completely by commenting out all "save" lines. 134 | # 135 | # It is also possible to remove all the previously configured save 136 | # points by adding a save directive with a single empty string argument 137 | # like in the following example: 138 | # 139 | # save "" 140 | 141 | save 900 1 142 | save 300 10 143 | save 60 10000 144 | 145 | # By default Redis will stop accepting writes if RDB snapshots are enabled 146 | # (at least one save point) and the latest background save failed. 147 | # This will make the user aware (in a hard way) that data is not persisting 148 | # on disk properly, otherwise chances are that no one will notice and some 149 | # disaster will happen. 150 | # 151 | # If the background saving process will start working again Redis will 152 | # automatically allow writes again. 153 | # 154 | # However if you have setup your proper monitoring of the Redis server 155 | # and persistence, you may want to disable this feature so that Redis will 156 | # continue to work as usual even if there are problems with disk, 157 | # permissions, and so forth. 158 | stop-writes-on-bgsave-error yes 159 | 160 | # Compress string objects using LZF when dump .rdb databases? 161 | # For default that's set to 'yes' as it's almost always a win. 162 | # If you want to save some CPU in the saving child set it to 'no' but 163 | # the dataset will likely be bigger if you have compressible values or keys. 164 | rdbcompression yes 165 | 166 | # Since version 5 of RDB a CRC64 checksum is placed at the end of the file. 167 | # This makes the format more resistant to corruption but there is a performance 168 | # hit to pay (around 10%) when saving and loading RDB files, so you can disable it 169 | # for maximum performances. 170 | # 171 | # RDB files created with checksum disabled have a checksum of zero that will 172 | # tell the loading code to skip the check. 173 | rdbchecksum yes 174 | 175 | # The filename where to dump the DB 176 | dbfilename dump.rdb 177 | 178 | # The working directory. 179 | # 180 | # The DB will be written inside this directory, with the filename specified 181 | # above using the 'dbfilename' configuration directive. 182 | # 183 | # The Append Only File will also be created inside this directory. 184 | # 185 | # Note that you must specify a directory here, not a file name. 186 | dir ./ 187 | 188 | ################################# REPLICATION ################################# 189 | 190 | # Master-Slave replication. Use slaveof to make a Redis instance a copy of 191 | # another Redis server. A few things to understand ASAP about Redis replication. 192 | # 193 | # 1) Redis replication is asynchronous, but you can configure a master to 194 | # stop accepting writes if it appears to be not connected with at least 195 | # a given number of slaves. 196 | # 2) Redis slaves are able to perform a partial resynchronization with the 197 | # master if the replication link is lost for a relatively small amount of 198 | # time. You may want to configure the replication backlog size (see the next 199 | # sections of this file) with a sensible value depending on your needs. 200 | # 3) Replication is automatic and does not need user intervention. After a 201 | # network partition slaves automatically try to reconnect to masters 202 | # and resynchronize with them. 203 | # 204 | # slaveof 205 | 206 | # If the master is password protected (using the "requirepass" configuration 207 | # directive below) it is possible to tell the slave to authenticate before 208 | # starting the replication synchronization process, otherwise the master will 209 | # refuse the slave request. 210 | # 211 | # masterauth 212 | 213 | # When a slave loses its connection with the master, or when the replication 214 | # is still in progress, the slave can act in two different ways: 215 | # 216 | # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will 217 | # still reply to client requests, possibly with out of date data, or the 218 | # data set may just be empty if this is the first synchronization. 219 | # 220 | # 2) if slave-serve-stale-data is set to 'no' the slave will reply with 221 | # an error "SYNC with master in progress" to all the kind of commands 222 | # but to INFO and SLAVEOF. 223 | # 224 | slave-serve-stale-data yes 225 | 226 | # You can configure a slave instance to accept writes or not. Writing against 227 | # a slave instance may be useful to store some ephemeral data (because data 228 | # written on a slave will be easily deleted after resync with the master) but 229 | # may also cause problems if clients are writing to it because of a 230 | # misconfiguration. 231 | # 232 | # Since Redis 2.6 by default slaves are read-only. 233 | # 234 | # Note: read only slaves are not designed to be exposed to untrusted clients 235 | # on the internet. It's just a protection layer against misuse of the instance. 236 | # Still a read only slave exports by default all the administrative commands 237 | # such as CONFIG, DEBUG, and so forth. To a limited extent you can improve 238 | # security of read only slaves using 'rename-command' to shadow all the 239 | # administrative / dangerous commands. 240 | slave-read-only yes 241 | 242 | # Replication SYNC strategy: disk or socket. 243 | # 244 | # ------------------------------------------------------- 245 | # WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY 246 | # ------------------------------------------------------- 247 | # 248 | # New slaves and reconnecting slaves that are not able to continue the replication 249 | # process just receiving differences, need to do what is called a "full 250 | # synchronization". An RDB file is transmitted from the master to the slaves. 251 | # The transmission can happen in two different ways: 252 | # 253 | # 1) Disk-backed: The Redis master creates a new process that writes the RDB 254 | # file on disk. Later the file is transferred by the parent 255 | # process to the slaves incrementally. 256 | # 2) Diskless: The Redis master creates a new process that directly writes the 257 | # RDB file to slave sockets, without touching the disk at all. 258 | # 259 | # With disk-backed replication, while the RDB file is generated, more slaves 260 | # can be queued and served with the RDB file as soon as the current child producing 261 | # the RDB file finishes its work. With diskless replication instead once 262 | # the transfer starts, new slaves arriving will be queued and a new transfer 263 | # will start when the current one terminates. 264 | # 265 | # When diskless replication is used, the master waits a configurable amount of 266 | # time (in seconds) before starting the transfer in the hope that multiple slaves 267 | # will arrive and the transfer can be parallelized. 268 | # 269 | # With slow disks and fast (large bandwidth) networks, diskless replication 270 | # works better. 271 | repl-diskless-sync no 272 | 273 | # When diskless replication is enabled, it is possible to configure the delay 274 | # the server waits in order to spawn the child that transfers the RDB via socket 275 | # to the slaves. 276 | # 277 | # This is important since once the transfer starts, it is not possible to serve 278 | # new slaves arriving, that will be queued for the next RDB transfer, so the server 279 | # waits a delay in order to let more slaves arrive. 280 | # 281 | # The delay is specified in seconds, and by default is 5 seconds. To disable 282 | # it entirely just set it to 0 seconds and the transfer will start ASAP. 283 | repl-diskless-sync-delay 5 284 | 285 | # Slaves send PINGs to server in a predefined interval. It's possible to change 286 | # this interval with the repl_ping_slave_period option. The default value is 10 287 | # seconds. 288 | # 289 | # repl-ping-slave-period 10 290 | 291 | # The following option sets the replication timeout for: 292 | # 293 | # 1) Bulk transfer I/O during SYNC, from the point of view of slave. 294 | # 2) Master timeout from the point of view of slaves (data, pings). 295 | # 3) Slave timeout from the point of view of masters (REPLCONF ACK pings). 296 | # 297 | # It is important to make sure that this value is greater than the value 298 | # specified for repl-ping-slave-period otherwise a timeout will be detected 299 | # every time there is low traffic between the master and the slave. 300 | # 301 | # repl-timeout 60 302 | 303 | # Disable TCP_NODELAY on the slave socket after SYNC? 304 | # 305 | # If you select "yes" Redis will use a smaller number of TCP packets and 306 | # less bandwidth to send data to slaves. But this can add a delay for 307 | # the data to appear on the slave side, up to 40 milliseconds with 308 | # Linux kernels using a default configuration. 309 | # 310 | # If you select "no" the delay for data to appear on the slave side will 311 | # be reduced but more bandwidth will be used for replication. 312 | # 313 | # By default we optimize for low latency, but in very high traffic conditions 314 | # or when the master and slaves are many hops away, turning this to "yes" may 315 | # be a good idea. 316 | repl-disable-tcp-nodelay no 317 | 318 | # Set the replication backlog size. The backlog is a buffer that accumulates 319 | # slave data when slaves are disconnected for some time, so that when a slave 320 | # wants to reconnect again, often a full resync is not needed, but a partial 321 | # resync is enough, just passing the portion of data the slave missed while 322 | # disconnected. 323 | # 324 | # The bigger the replication backlog, the longer the time the slave can be 325 | # disconnected and later be able to perform a partial resynchronization. 326 | # 327 | # The backlog is only allocated once there is at least a slave connected. 328 | # 329 | # repl-backlog-size 1mb 330 | 331 | # After a master has no longer connected slaves for some time, the backlog 332 | # will be freed. The following option configures the amount of seconds that 333 | # need to elapse, starting from the time the last slave disconnected, for 334 | # the backlog buffer to be freed. 335 | # 336 | # A value of 0 means to never release the backlog. 337 | # 338 | # repl-backlog-ttl 3600 339 | 340 | # The slave priority is an integer number published by Redis in the INFO output. 341 | # It is used by Redis Sentinel in order to select a slave to promote into a 342 | # master if the master is no longer working correctly. 343 | # 344 | # A slave with a low priority number is considered better for promotion, so 345 | # for instance if there are three slaves with priority 10, 100, 25 Sentinel will 346 | # pick the one with priority 10, that is the lowest. 347 | # 348 | # However a special priority of 0 marks the slave as not able to perform the 349 | # role of master, so a slave with priority of 0 will never be selected by 350 | # Redis Sentinel for promotion. 351 | # 352 | # By default the priority is 100. 353 | slave-priority 100 354 | 355 | # It is possible for a master to stop accepting writes if there are less than 356 | # N slaves connected, having a lag less or equal than M seconds. 357 | # 358 | # The N slaves need to be in "online" state. 359 | # 360 | # The lag in seconds, that must be <= the specified value, is calculated from 361 | # the last ping received from the slave, that is usually sent every second. 362 | # 363 | # This option does not GUARANTEE that N replicas will accept the write, but 364 | # will limit the window of exposure for lost writes in case not enough slaves 365 | # are available, to the specified number of seconds. 366 | # 367 | # For example to require at least 3 slaves with a lag <= 10 seconds use: 368 | # 369 | # min-slaves-to-write 3 370 | # min-slaves-max-lag 10 371 | # 372 | # Setting one or the other to 0 disables the feature. 373 | # 374 | # By default min-slaves-to-write is set to 0 (feature disabled) and 375 | # min-slaves-max-lag is set to 10. 376 | 377 | ################################## SECURITY ################################### 378 | 379 | # Require clients to issue AUTH before processing any other 380 | # commands. This might be useful in environments in which you do not trust 381 | # others with access to the host running redis-server. 382 | # 383 | # This should stay commented out for backward compatibility and because most 384 | # people do not need auth (e.g. they run their own servers). 385 | # 386 | # Warning: since Redis is pretty fast an outside user can try up to 387 | # 150k passwords per second against a good box. This means that you should 388 | # use a very strong password otherwise it will be very easy to break. 389 | # 390 | # requirepass foobared 391 | 392 | # Command renaming. 393 | # 394 | # It is possible to change the name of dangerous commands in a shared 395 | # environment. For instance the CONFIG command may be renamed into something 396 | # hard to guess so that it will still be available for internal-use tools 397 | # but not available for general clients. 398 | # 399 | # Example: 400 | # 401 | # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 402 | # 403 | # It is also possible to completely kill a command by renaming it into 404 | # an empty string: 405 | # 406 | # rename-command CONFIG "" 407 | # 408 | # Please note that changing the name of commands that are logged into the 409 | # AOF file or transmitted to slaves may cause problems. 410 | 411 | ################################### LIMITS #################################### 412 | 413 | # Set the max number of connected clients at the same time. By default 414 | # this limit is set to 10000 clients, however if the Redis server is not 415 | # able to configure the process file limit to allow for the specified limit 416 | # the max number of allowed clients is set to the current file limit 417 | # minus 32 (as Redis reserves a few file descriptors for internal uses). 418 | # 419 | # Once the limit is reached Redis will close all the new connections sending 420 | # an error 'max number of clients reached'. 421 | # 422 | # maxclients 10000 423 | 424 | # Don't use more memory than the specified amount of bytes. 425 | # When the memory limit is reached Redis will try to remove keys 426 | # according to the eviction policy selected (see maxmemory-policy). 427 | # 428 | # If Redis can't remove keys according to the policy, or if the policy is 429 | # set to 'noeviction', Redis will start to reply with errors to commands 430 | # that would use more memory, like SET, LPUSH, and so on, and will continue 431 | # to reply to read-only commands like GET. 432 | # 433 | # This option is usually useful when using Redis as an LRU cache, or to set 434 | # a hard memory limit for an instance (using the 'noeviction' policy). 435 | # 436 | # WARNING: If you have slaves attached to an instance with maxmemory on, 437 | # the size of the output buffers needed to feed the slaves are subtracted 438 | # from the used memory count, so that network problems / resyncs will 439 | # not trigger a loop where keys are evicted, and in turn the output 440 | # buffer of slaves is full with DELs of keys evicted triggering the deletion 441 | # of more keys, and so forth until the database is completely emptied. 442 | # 443 | # In short... if you have slaves attached it is suggested that you set a lower 444 | # limit for maxmemory so that there is some free RAM on the system for slave 445 | # output buffers (but this is not needed if the policy is 'noeviction'). 446 | # 447 | # maxmemory 448 | 449 | # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory 450 | # is reached. You can select among five behaviors: 451 | # 452 | # volatile-lru -> remove the key with an expire set using an LRU algorithm 453 | # allkeys-lru -> remove any key according to the LRU algorithm 454 | # volatile-random -> remove a random key with an expire set 455 | # allkeys-random -> remove a random key, any key 456 | # volatile-ttl -> remove the key with the nearest expire time (minor TTL) 457 | # noeviction -> don't expire at all, just return an error on write operations 458 | # 459 | # Note: with any of the above policies, Redis will return an error on write 460 | # operations, when there are no suitable keys for eviction. 461 | # 462 | # At the date of writing these commands are: set setnx setex append 463 | # incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd 464 | # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby 465 | # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby 466 | # getset mset msetnx exec sort 467 | # 468 | # The default is: 469 | # 470 | # maxmemory-policy noeviction 471 | 472 | # LRU and minimal TTL algorithms are not precise algorithms but approximated 473 | # algorithms (in order to save memory), so you can tune it for speed or 474 | # accuracy. For default Redis will check five keys and pick the one that was 475 | # used less recently, you can change the sample size using the following 476 | # configuration directive. 477 | # 478 | # The default of 5 produces good enough results. 10 Approximates very closely 479 | # true LRU but costs a bit more CPU. 3 is very fast but not very accurate. 480 | # 481 | # maxmemory-samples 5 482 | 483 | ############################## APPEND ONLY MODE ############################### 484 | 485 | # By default Redis asynchronously dumps the dataset on disk. This mode is 486 | # good enough in many applications, but an issue with the Redis process or 487 | # a power outage may result into a few minutes of writes lost (depending on 488 | # the configured save points). 489 | # 490 | # The Append Only File is an alternative persistence mode that provides 491 | # much better durability. For instance using the default data fsync policy 492 | # (see later in the config file) Redis can lose just one second of writes in a 493 | # dramatic event like a server power outage, or a single write if something 494 | # wrong with the Redis process itself happens, but the operating system is 495 | # still running correctly. 496 | # 497 | # AOF and RDB persistence can be enabled at the same time without problems. 498 | # If the AOF is enabled on startup Redis will load the AOF, that is the file 499 | # with the better durability guarantees. 500 | # 501 | # Please check http://redis.io/topics/persistence for more information. 502 | 503 | appendonly no 504 | 505 | # The name of the append only file (default: "appendonly.aof") 506 | 507 | appendfilename "appendonly.aof" 508 | 509 | # The fsync() call tells the Operating System to actually write data on disk 510 | # instead of waiting for more data in the output buffer. Some OS will really flush 511 | # data on disk, some other OS will just try to do it ASAP. 512 | # 513 | # Redis supports three different modes: 514 | # 515 | # no: don't fsync, just let the OS flush the data when it wants. Faster. 516 | # always: fsync after every write to the append only log. Slow, Safest. 517 | # everysec: fsync only one time every second. Compromise. 518 | # 519 | # The default is "everysec", as that's usually the right compromise between 520 | # speed and data safety. It's up to you to understand if you can relax this to 521 | # "no" that will let the operating system flush the output buffer when 522 | # it wants, for better performances (but if you can live with the idea of 523 | # some data loss consider the default persistence mode that's snapshotting), 524 | # or on the contrary, use "always" that's very slow but a bit safer than 525 | # everysec. 526 | # 527 | # More details please check the following article: 528 | # http://antirez.com/post/redis-persistence-demystified.html 529 | # 530 | # If unsure, use "everysec". 531 | 532 | # appendfsync always 533 | appendfsync everysec 534 | # appendfsync no 535 | 536 | # When the AOF fsync policy is set to always or everysec, and a background 537 | # saving process (a background save or AOF log background rewriting) is 538 | # performing a lot of I/O against the disk, in some Linux configurations 539 | # Redis may block too long on the fsync() call. Note that there is no fix for 540 | # this currently, as even performing fsync in a different thread will block 541 | # our synchronous write(2) call. 542 | # 543 | # In order to mitigate this problem it's possible to use the following option 544 | # that will prevent fsync() from being called in the main process while a 545 | # BGSAVE or BGREWRITEAOF is in progress. 546 | # 547 | # This means that while another child is saving, the durability of Redis is 548 | # the same as "appendfsync none". In practical terms, this means that it is 549 | # possible to lose up to 30 seconds of log in the worst scenario (with the 550 | # default Linux settings). 551 | # 552 | # If you have latency problems turn this to "yes". Otherwise leave it as 553 | # "no" that is the safest pick from the point of view of durability. 554 | 555 | no-appendfsync-on-rewrite no 556 | 557 | # Automatic rewrite of the append only file. 558 | # Redis is able to automatically rewrite the log file implicitly calling 559 | # BGREWRITEAOF when the AOF log size grows by the specified percentage. 560 | # 561 | # This is how it works: Redis remembers the size of the AOF file after the 562 | # latest rewrite (if no rewrite has happened since the restart, the size of 563 | # the AOF at startup is used). 564 | # 565 | # This base size is compared to the current size. If the current size is 566 | # bigger than the specified percentage, the rewrite is triggered. Also 567 | # you need to specify a minimal size for the AOF file to be rewritten, this 568 | # is useful to avoid rewriting the AOF file even if the percentage increase 569 | # is reached but it is still pretty small. 570 | # 571 | # Specify a percentage of zero in order to disable the automatic AOF 572 | # rewrite feature. 573 | 574 | auto-aof-rewrite-percentage 100 575 | auto-aof-rewrite-min-size 64mb 576 | 577 | # An AOF file may be found to be truncated at the end during the Redis 578 | # startup process, when the AOF data gets loaded back into memory. 579 | # This may happen when the system where Redis is running 580 | # crashes, especially when an ext4 filesystem is mounted without the 581 | # data=ordered option (however this can't happen when Redis itself 582 | # crashes or aborts but the operating system still works correctly). 583 | # 584 | # Redis can either exit with an error when this happens, or load as much 585 | # data as possible (the default now) and start if the AOF file is found 586 | # to be truncated at the end. The following option controls this behavior. 587 | # 588 | # If aof-load-truncated is set to yes, a truncated AOF file is loaded and 589 | # the Redis server starts emitting a log to inform the user of the event. 590 | # Otherwise if the option is set to no, the server aborts with an error 591 | # and refuses to start. When the option is set to no, the user requires 592 | # to fix the AOF file using the "redis-check-aof" utility before to restart 593 | # the server. 594 | # 595 | # Note that if the AOF file will be found to be corrupted in the middle 596 | # the server will still exit with an error. This option only applies when 597 | # Redis will try to read more data from the AOF file but not enough bytes 598 | # will be found. 599 | aof-load-truncated yes 600 | 601 | ################################ LUA SCRIPTING ############################### 602 | 603 | # Max execution time of a Lua script in milliseconds. 604 | # 605 | # If the maximum execution time is reached Redis will log that a script is 606 | # still in execution after the maximum allowed time and will start to 607 | # reply to queries with an error. 608 | # 609 | # When a long running script exceeds the maximum execution time only the 610 | # SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be 611 | # used to stop a script that did not yet called write commands. The second 612 | # is the only way to shut down the server in the case a write command was 613 | # already issued by the script but the user doesn't want to wait for the natural 614 | # termination of the script. 615 | # 616 | # Set it to 0 or a negative value for unlimited execution without warnings. 617 | lua-time-limit 5000 618 | 619 | ################################ REDIS CLUSTER ############################### 620 | # 621 | # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 622 | # WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however 623 | # in order to mark it as "mature" we need to wait for a non trivial percentage 624 | # of users to deploy it in production. 625 | # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 626 | # 627 | # Normal Redis instances can't be part of a Redis Cluster; only nodes that are 628 | # started as cluster nodes can. In order to start a Redis instance as a 629 | # cluster node enable the cluster support uncommenting the following: 630 | # 631 | # cluster-enabled yes 632 | 633 | # Every cluster node has a cluster configuration file. This file is not 634 | # intended to be edited by hand. It is created and updated by Redis nodes. 635 | # Every Redis Cluster node requires a different cluster configuration file. 636 | # Make sure that instances running in the same system do not have 637 | # overlapping cluster configuration file names. 638 | # 639 | # cluster-config-file nodes-6379.conf 640 | 641 | # Cluster node timeout is the amount of milliseconds a node must be unreachable 642 | # for it to be considered in failure state. 643 | # Most other internal time limits are multiple of the node timeout. 644 | # 645 | # cluster-node-timeout 15000 646 | 647 | # A slave of a failing master will avoid to start a failover if its data 648 | # looks too old. 649 | # 650 | # There is no simple way for a slave to actually have a exact measure of 651 | # its "data age", so the following two checks are performed: 652 | # 653 | # 1) If there are multiple slaves able to failover, they exchange messages 654 | # in order to try to give an advantage to the slave with the best 655 | # replication offset (more data from the master processed). 656 | # Slaves will try to get their rank by offset, and apply to the start 657 | # of the failover a delay proportional to their rank. 658 | # 659 | # 2) Every single slave computes the time of the last interaction with 660 | # its master. This can be the last ping or command received (if the master 661 | # is still in the "connected" state), or the time that elapsed since the 662 | # disconnection with the master (if the replication link is currently down). 663 | # If the last interaction is too old, the slave will not try to failover 664 | # at all. 665 | # 666 | # The point "2" can be tuned by user. Specifically a slave will not perform 667 | # the failover if, since the last interaction with the master, the time 668 | # elapsed is greater than: 669 | # 670 | # (node-timeout * slave-validity-factor) + repl-ping-slave-period 671 | # 672 | # So for example if node-timeout is 30 seconds, and the slave-validity-factor 673 | # is 10, and assuming a default repl-ping-slave-period of 10 seconds, the 674 | # slave will not try to failover if it was not able to talk with the master 675 | # for longer than 310 seconds. 676 | # 677 | # A large slave-validity-factor may allow slaves with too old data to failover 678 | # a master, while a too small value may prevent the cluster from being able to 679 | # elect a slave at all. 680 | # 681 | # For maximum availability, it is possible to set the slave-validity-factor 682 | # to a value of 0, which means, that slaves will always try to failover the 683 | # master regardless of the last time they interacted with the master. 684 | # (However they'll always try to apply a delay proportional to their 685 | # offset rank). 686 | # 687 | # Zero is the only value able to guarantee that when all the partitions heal 688 | # the cluster will always be able to continue. 689 | # 690 | # cluster-slave-validity-factor 10 691 | 692 | # Cluster slaves are able to migrate to orphaned masters, that are masters 693 | # that are left without working slaves. This improves the cluster ability 694 | # to resist to failures as otherwise an orphaned master can't be failed over 695 | # in case of failure if it has no working slaves. 696 | # 697 | # Slaves migrate to orphaned masters only if there are still at least a 698 | # given number of other working slaves for their old master. This number 699 | # is the "migration barrier". A migration barrier of 1 means that a slave 700 | # will migrate only if there is at least 1 other working slave for its master 701 | # and so forth. It usually reflects the number of slaves you want for every 702 | # master in your cluster. 703 | # 704 | # Default is 1 (slaves migrate only if their masters remain with at least 705 | # one slave). To disable migration just set it to a very large value. 706 | # A value of 0 can be set but is useful only for debugging and dangerous 707 | # in production. 708 | # 709 | # cluster-migration-barrier 1 710 | 711 | # By default Redis Cluster nodes stop accepting queries if they detect there 712 | # is at least an hash slot uncovered (no available node is serving it). 713 | # This way if the cluster is partially down (for example a range of hash slots 714 | # are no longer covered) all the cluster becomes, eventually, unavailable. 715 | # It automatically returns available as soon as all the slots are covered again. 716 | # 717 | # However sometimes you want the subset of the cluster which is working, 718 | # to continue to accept queries for the part of the key space that is still 719 | # covered. In order to do so, just set the cluster-require-full-coverage 720 | # option to no. 721 | # 722 | # cluster-require-full-coverage yes 723 | 724 | # In order to setup your cluster make sure to read the documentation 725 | # available at http://redis.io web site. 726 | 727 | ################################## SLOW LOG ################################### 728 | 729 | # The Redis Slow Log is a system to log queries that exceeded a specified 730 | # execution time. The execution time does not include the I/O operations 731 | # like talking with the client, sending the reply and so forth, 732 | # but just the time needed to actually execute the command (this is the only 733 | # stage of command execution where the thread is blocked and can not serve 734 | # other requests in the meantime). 735 | # 736 | # You can configure the slow log with two parameters: one tells Redis 737 | # what is the execution time, in microseconds, to exceed in order for the 738 | # command to get logged, and the other parameter is the length of the 739 | # slow log. When a new command is logged the oldest one is removed from the 740 | # queue of logged commands. 741 | 742 | # The following time is expressed in microseconds, so 1000000 is equivalent 743 | # to one second. Note that a negative number disables the slow log, while 744 | # a value of zero forces the logging of every command. 745 | slowlog-log-slower-than 10000 746 | 747 | # There is no limit to this length. Just be aware that it will consume memory. 748 | # You can reclaim memory used by the slow log with SLOWLOG RESET. 749 | slowlog-max-len 128 750 | 751 | ################################ LATENCY MONITOR ############################## 752 | 753 | # The Redis latency monitoring subsystem samples different operations 754 | # at runtime in order to collect data related to possible sources of 755 | # latency of a Redis instance. 756 | # 757 | # Via the LATENCY command this information is available to the user that can 758 | # print graphs and obtain reports. 759 | # 760 | # The system only logs operations that were performed in a time equal or 761 | # greater than the amount of milliseconds specified via the 762 | # latency-monitor-threshold configuration directive. When its value is set 763 | # to zero, the latency monitor is turned off. 764 | # 765 | # By default latency monitoring is disabled since it is mostly not needed 766 | # if you don't have latency issues, and collecting data has a performance 767 | # impact, that while very small, can be measured under big load. Latency 768 | # monitoring can easily be enabled at runtime using the command 769 | # "CONFIG SET latency-monitor-threshold " if needed. 770 | latency-monitor-threshold 0 771 | 772 | ############################# EVENT NOTIFICATION ############################## 773 | 774 | # Redis can notify Pub/Sub clients about events happening in the key space. 775 | # This feature is documented at http://redis.io/topics/notifications 776 | # 777 | # For instance if keyspace events notification is enabled, and a client 778 | # performs a DEL operation on key "foo" stored in the Database 0, two 779 | # messages will be published via Pub/Sub: 780 | # 781 | # PUBLISH __keyspace@0__:foo del 782 | # PUBLISH __keyevent@0__:del foo 783 | # 784 | # It is possible to select the events that Redis will notify among a set 785 | # of classes. Every class is identified by a single character: 786 | # 787 | # K Keyspace events, published with __keyspace@__ prefix. 788 | # E Keyevent events, published with __keyevent@__ prefix. 789 | # g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... 790 | # $ String commands 791 | # l List commands 792 | # s Set commands 793 | # h Hash commands 794 | # z Sorted set commands 795 | # x Expired events (events generated every time a key expires) 796 | # e Evicted events (events generated when a key is evicted for maxmemory) 797 | # A Alias for g$lshzxe, so that the "AKE" string means all the events. 798 | # 799 | # The "notify-keyspace-events" takes as argument a string that is composed 800 | # of zero or multiple characters. The empty string means that notifications 801 | # are disabled. 802 | # 803 | # Example: to enable list and generic events, from the point of view of the 804 | # event name, use: 805 | # 806 | # notify-keyspace-events Elg 807 | # 808 | # Example 2: to get the stream of the expired keys subscribing to channel 809 | # name __keyevent@0__:expired use: 810 | # 811 | # notify-keyspace-events Ex 812 | # 813 | # By default all notifications are disabled because most users don't need 814 | # this feature and the feature has some overhead. Note that if you don't 815 | # specify at least one of K or E, no events will be delivered. 816 | notify-keyspace-events "" 817 | 818 | ############################### ADVANCED CONFIG ############################### 819 | 820 | # Hashes are encoded using a memory efficient data structure when they have a 821 | # small number of entries, and the biggest entry does not exceed a given 822 | # threshold. These thresholds can be configured using the following directives. 823 | hash-max-ziplist-entries 512 824 | hash-max-ziplist-value 64 825 | 826 | # Similarly to hashes, small lists are also encoded in a special way in order 827 | # to save a lot of space. The special representation is only used when 828 | # you are under the following limits: 829 | list-max-ziplist-entries 512 830 | list-max-ziplist-value 64 831 | 832 | # Sets have a special encoding in just one case: when a set is composed 833 | # of just strings that happen to be integers in radix 10 in the range 834 | # of 64 bit signed integers. 835 | # The following configuration setting sets the limit in the size of the 836 | # set in order to use this special memory saving encoding. 837 | set-max-intset-entries 512 838 | 839 | # Similarly to hashes and lists, sorted sets are also specially encoded in 840 | # order to save a lot of space. This encoding is only used when the length and 841 | # elements of a sorted set are below the following limits: 842 | zset-max-ziplist-entries 128 843 | zset-max-ziplist-value 64 844 | 845 | # HyperLogLog sparse representation bytes limit. The limit includes the 846 | # 16 bytes header. When an HyperLogLog using the sparse representation crosses 847 | # this limit, it is converted into the dense representation. 848 | # 849 | # A value greater than 16000 is totally useless, since at that point the 850 | # dense representation is more memory efficient. 851 | # 852 | # The suggested value is ~ 3000 in order to have the benefits of 853 | # the space efficient encoding without slowing down too much PFADD, 854 | # which is O(N) with the sparse encoding. The value can be raised to 855 | # ~ 10000 when CPU is not a concern, but space is, and the data set is 856 | # composed of many HyperLogLogs with cardinality in the 0 - 15000 range. 857 | hll-sparse-max-bytes 3000 858 | 859 | # Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in 860 | # order to help rehashing the main Redis hash table (the one mapping top-level 861 | # keys to values). The hash table implementation Redis uses (see dict.c) 862 | # performs a lazy rehashing: the more operation you run into a hash table 863 | # that is rehashing, the more rehashing "steps" are performed, so if the 864 | # server is idle the rehashing is never complete and some more memory is used 865 | # by the hash table. 866 | # 867 | # The default is to use this millisecond 10 times every second in order to 868 | # actively rehash the main dictionaries, freeing memory when possible. 869 | # 870 | # If unsure: 871 | # use "activerehashing no" if you have hard latency requirements and it is 872 | # not a good thing in your environment that Redis can reply from time to time 873 | # to queries with 2 milliseconds delay. 874 | # 875 | # use "activerehashing yes" if you don't have such hard requirements but 876 | # want to free memory asap when possible. 877 | activerehashing yes 878 | 879 | # The client output buffer limits can be used to force disconnection of clients 880 | # that are not reading data from the server fast enough for some reason (a 881 | # common reason is that a Pub/Sub client can't consume messages as fast as the 882 | # publisher can produce them). 883 | # 884 | # The limit can be set differently for the three different classes of clients: 885 | # 886 | # normal -> normal clients including MONITOR clients 887 | # slave -> slave clients 888 | # pubsub -> clients subscribed to at least one pubsub channel or pattern 889 | # 890 | # The syntax of every client-output-buffer-limit directive is the following: 891 | # 892 | # client-output-buffer-limit 893 | # 894 | # A client is immediately disconnected once the hard limit is reached, or if 895 | # the soft limit is reached and remains reached for the specified number of 896 | # seconds (continuously). 897 | # So for instance if the hard limit is 32 megabytes and the soft limit is 898 | # 16 megabytes / 10 seconds, the client will get disconnected immediately 899 | # if the size of the output buffers reach 32 megabytes, but will also get 900 | # disconnected if the client reaches 16 megabytes and continuously overcomes 901 | # the limit for 10 seconds. 902 | # 903 | # By default normal clients are not limited because they don't receive data 904 | # without asking (in a push way), but just after a request, so only 905 | # asynchronous clients may create a scenario where data is requested faster 906 | # than it can read. 907 | # 908 | # Instead there is a default limit for pubsub and slave clients, since 909 | # subscribers and slaves receive data in a push fashion. 910 | # 911 | # Both the hard or the soft limit can be disabled by setting them to zero. 912 | client-output-buffer-limit normal 0 0 0 913 | client-output-buffer-limit slave 256mb 64mb 60 914 | client-output-buffer-limit pubsub 32mb 8mb 60 915 | 916 | # Redis calls an internal function to perform many background tasks, like 917 | # closing connections of clients in timeout, purging expired keys that are 918 | # never requested, and so forth. 919 | # 920 | # Not all tasks are performed with the same frequency, but Redis checks for 921 | # tasks to perform according to the specified "hz" value. 922 | # 923 | # By default "hz" is set to 10. Raising the value will use more CPU when 924 | # Redis is idle, but at the same time will make Redis more responsive when 925 | # there are many keys expiring at the same time, and timeouts may be 926 | # handled with more precision. 927 | # 928 | # The range is between 1 and 500, however a value over 100 is usually not 929 | # a good idea. Most users should use the default of 10 and raise this up to 930 | # 100 only in environments where very low latency is required. 931 | hz 10 932 | 933 | # When a child rewrites the AOF file, if the following option is enabled 934 | # the file will be fsync-ed every 32 MB of data generated. This is useful 935 | # in order to commit the file to the disk more incrementally and avoid 936 | # big latency spikes. 937 | aof-rewrite-incremental-fsync yes -------------------------------------------------------------------------------- /conf/uwsgi.ini: -------------------------------------------------------------------------------- 1 | # mysite_uwsgi.ini file 2 | [uwsgi] 3 | 4 | socket = 127.0.0.1:3400 5 | # Django-related settings 6 | # the django project directory (full path) 7 | chdir = /home/web/website/web 8 | # Django's wsgi file 9 | module = quantvc.wsgi 10 | 11 | # process-related settings 12 | # master 13 | master = true 14 | # maximum number of worker processes 15 | processes = 4 16 | 17 | threads = 4 18 | max-requests = 6000 19 | 20 | # ... with appropriate permissions - may be needed 21 | chmod-socket = 664 22 | # clear environment on exit 23 | vacuum = true 24 | 25 | # reload if rss memory is higher than specified megabytes ,256 means 256MB 26 | reload-on-rss = 512 27 | # reload if address space is higher than specified megabytes 28 | reload-on-as = 512 29 | 30 | # set the maximum time (in seconds) we wait for 31 | # workers and other processes to die during reload/shutdown 32 | reload-mercy = 10 33 | 34 | pidfile = django.pid 35 | 36 | daemonize = /home/web/website/logs/django_log/uwsgi.log 37 | 38 | # set for virtulenv 39 | home = ~/.virtualenvs/web -------------------------------------------------------------------------------- /conf/web_nginx: -------------------------------------------------------------------------------- 1 | 2 | 3 | server { 4 | listen 80; 5 | server_name www.quant.vc quant.vc; 6 | access_log /home/web/logs/access_log/access.log; 7 | error_log /home/web/logs/error_log/error.log; 8 | charset utf-8; 9 | 10 | root /home/web/website/; 11 | 12 | location / { 13 | uwsgi_pass 127.0.0.1:3400; 14 | include uwsgi_params; 15 | } 16 | location /static/ { 17 | alias /home/web/website/web/quantvc/static/; 18 | } 19 | location /media/ { 20 | alias /home/web/website/web/quantvc/media/; 21 | } 22 | error_page 400 403 404 /static/400.html; 23 | error_page 500 502 503 504 /static/500.html 24 | 25 | } -------------------------------------------------------------------------------- /contributors.txt: -------------------------------------------------------------------------------- 1 | winton wang 2 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | scripts/deploy.sh -------------------------------------------------------------------------------- /doc/Info.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/doc/Info.md -------------------------------------------------------------------------------- /doc/Packages.md: -------------------------------------------------------------------------------- 1 | # Django Packages 2 | 3 | ## Admin interface 4 | 5 | Packages that extend the Admin interface. 6 | 7 | [Github: django-suit](https://github.com/darklow/django-suit) 8 | [Document: django-suit](http://django-suit.readthedocs.org) 9 | 10 | ## Extension 11 | 12 | Packages that extend the django command and useful tools. 13 | 14 | [Github: django-extension](https://github.com/django-extensions/django-extensions/) 15 | [Document: django-extension](http://django-extensions.readthedocs.org/en/latest/) 16 | 17 | ## Debugging 18 | 19 | [Github: django-debug-toolbar](https://github.com/django-debug-toolbar/django-debug-toolbar/) 20 | [Document: django-debug-toolbar](http://django-debug-toolbar.readthedocs.org/en/latest/) 21 | 22 | ## Profiling 23 | Profiling for Django: Django-silk (Don't used!) 24 | 25 | [Github: django-silk](https://github.com/mtford90/silk) 26 | [Document: django-silk](https://github.com/mtford90/silk) 27 | 28 | ## Authentication 29 | 30 | Accounts management : django-userena 31 | 32 | [Github: django-userena](https://github.com/bread-and-pepper/django-userena/) 33 | [Document: django-userena](http://docs.django-userena.org/en/latest/index.html) 34 | 35 | Permission Control : django-guardian 36 | 37 | [Github: django-guardian](https://github.com/lukaszb/django-guardian) 38 | [Document: django-guardian](http://django-guardian.rtfd.org/) 39 | 40 | # Oauth2 41 | 42 | Oauth2 Toolkit : django-oauth-toolkit 43 | 44 | [Github:django-oauth-toolkit](https://github.com/evonove/django-oauth-toolkit) 45 | [Document: django-oauth-toolkit](https://django-oauth-toolkit.readthedocs.org/en/latest/) 46 | 47 | ## Image 48 | 49 | Image:easy-thumbnails 50 | 51 | [Github: easy-thumbnails](https://github.com/SmileyChris/easy-thumbnails) 52 | [Document: easy-thumbnails](http://easy-thumbnails.readthedocs.org/) 53 | 54 | Image:cropping 55 | 56 | [Github: django-image-cropping](https://github.com/jonasundderwolf/django-image-cropping) 57 | [Document: django-image-cropping](https://django-image-cropping.readthedocs.org/en/latest/) 58 | 59 | Image:automated image processing 60 | 61 | [Github: django-imagekit](https://github.com/matthewwithanm/django-imagekit) 62 | [Document: django-imagekit](django-imagekit.rtfd.org) 63 | 64 | ## Caching 65 | 66 | Cache: django Redis 67 | 68 | [Github: django-redis](https://github.com/niwibe/django-redis) 69 | [Document: django-redis](http://niwibe.github.io/django-redis/) 70 | 71 | 72 | ## Forms 73 | 74 | django-crispy-forms 75 | 76 | [Github: django-crispy-forms](https://github.com/maraujop/django-crispy-forms/) 77 | [Document: django-crispy=forms](http://django-crispy-forms.readthedocs.org/en/latest/) 78 | 79 | 80 | ## Security 81 | 82 | Helping you remember to do the stupid little things to improve your Django site's security. 83 | django-secure 84 | 85 | [Github: django-secure](https://github.com/carljm/django-secure/) 86 | [Document: django-secure](http://django-secure.readthedocs.org/en/v0.1.2/) 87 | 88 | 89 | ## SEO 90 | managing robots.txt files following the robots exclusion protocol 91 | 92 | [Github:django-robots](https://github.com/jezdez/django-robots) 93 | [Document:django-rbots](http://django-robots.readthedocs.org) 94 | 95 | 96 | 97 | ## Tagging 98 | 99 | django-taggit 100 | 101 | [Github: django-taggit](https://github.com/alex/django-taggit/) 102 | [Document: django-taggit](http://django-taggit.readthedocs.org) 103 | 104 | 105 | ## Task Queue 106 | 107 | djagno-celery : **THIS PROJECT IS NO LONGER REQUIRED** !!! 108 | 109 | Celery : Distributed Task Queue 110 | 111 | [Website: Celery](http://www.celeryproject.org) 112 | [Github: Celery](https://github.com/celery/celery) 113 | [Document: Celery](http://docs.celeryproject.org/en/latest/index.html) 114 | 115 | 116 | django-rq 117 | 118 | [Github: django-rq](https://github.com/ui/django-rq) 119 | [Document: django-rq](https://github.com/ui/django-rq) 120 | 121 | ## Filtering 122 | 123 | django-filter 124 | 125 | [Github: django-filter](https://github.com/alex/django-filter/) 126 | [Document: django-filter](https://django-filter.readthedocs.org/en/latest/) 127 | 128 | ## Support Apps 129 | 130 | django-braces: Mixins for Django's class-based views. 131 | 132 | [Github: django-braces](https://github.com/brack3t/django-braces/) 133 | [Document: django-braces](http://django-braces.readthedocs.org/en/latest/index.html) 134 | 135 | 136 | ## Testing 137 | 138 | django-nose 139 | 140 | [Github: django-nose](https://github.com/django-nose/django-nose/) 141 | [Document: django-nose](https://github.com/django-nose/django-nose/) 142 | 143 | django-coverage 144 | 145 | [Github: django-coverage](https://bitbucket.org/kmike/django-coverage) 146 | [Document: django-coverage](https://bitbucket.org/kmike/django-coverage) 147 | 148 | 149 | ## Translation 150 | 151 | django-rosetta 152 | 153 | [Github: django-rosetta](https://github.com/mbi/django-rosetta) 154 | [Document: django-rosetta](https://github.com/mbi/django-rosetta) 155 | 156 | 157 | ## Model Extension 158 | 159 | django model extension 160 | 161 | [Github: django-mptt](https://github.com/django-mptt/django-mptt/) 162 | [Document: django-mptt](http://django-mptt.github.io/django-mptt/) 163 | 164 | django model utils 165 | [Github: django-model-utils](https://github.com/carljm/django-model-utils/) 166 | [Document: django-model-uitls](https://django-model-utils.readthedocs.org) 167 | 168 | # Extra Views 169 | 170 | [Github:django-extra-view](https://django-extra-views.readthedocs.org/en/latest/) 171 | [Document:django-extra-view](https://django-extra-views.readthedocs.org/en/latest/) 172 | 173 | 174 | 175 | # HightLight Program Language Code 176 | 177 | [Pygments](http://pygments.org) 178 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /doc/README.md: -------------------------------------------------------------------------------- 1 | # -------------------------------------------------------------------------------- /install_production.sh: -------------------------------------------------------------------------------- 1 | scripts/install_production.sh -------------------------------------------------------------------------------- /logs/access_log/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/logs/access_log/.gitkeep -------------------------------------------------------------------------------- /logs/django_log/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/logs/django_log/.gitkeep -------------------------------------------------------------------------------- /logs/error_log/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/logs/error_log/.gitkeep -------------------------------------------------------------------------------- /pip.sh: -------------------------------------------------------------------------------- 1 | scripts/pip.sh -------------------------------------------------------------------------------- /requirements/base.txt: -------------------------------------------------------------------------------- 1 | django>=1.7 2 | django-suit 3 | django-extensions>=1.4.8 4 | django-debug-toolbar>=1.2.2 5 | easy-thumbnails>=2.2 6 | django-guardian>=1.2.4 7 | django-userena>=1.3.1 8 | django-allauth>=0.18.0 9 | django-cacheops>=2.2.1 10 | django-redis 11 | django-image-cropping 12 | django-imagekit 13 | django-crispy-forms>=1.4.0 14 | django-secure 15 | django-taggit>=0.12.1 16 | django-rq 17 | django-filter 18 | django-rosetta 19 | django-model-utils 20 | django-mptt 21 | django-oauth-toolkit>=0.8.1 22 | django-braces>=1.8.0 23 | django-robots>=1.1 24 | django-extra-views>=0.7.1 25 | 26 | -------------------------------------------------------------------------------- /requirements/extension.txt: -------------------------------------------------------------------------------- 1 | html5lib>=1.0b3 2 | Pillow>=2.6.1 3 | Unidecode>=0.04.16 4 | requests>=2.5.0 5 | requests-oauthlib>=0.4.2 6 | pytz>=2014.10 7 | python-openid>=2.2.5 8 | html2text>=2015.6.21 9 | sqlparse>=0.1.14 10 | redis>=2.10.3 11 | funcy>=1.3 12 | celery 13 | mysqlclient>=1.3.6 14 | rq 15 | pygments>=2.0.2 16 | -------------------------------------------------------------------------------- /requirements/test.txt: -------------------------------------------------------------------------------- 1 | coverage 2 | pylint 3 | pep8 4 | nose 5 | django-nose 6 | django-coverage 7 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | ./scripts/run.sh -------------------------------------------------------------------------------- /scripts/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # create dir 4 | mkdir /home/web/ 5 | mkdir /home/web/website/ 6 | mkdir /home/web/logs/ 7 | mkdir /home/web/static/ 8 | mkdir /home/web/media/ 9 | 10 | # packages 11 | sudo apt-get update 12 | sudo apt-get upgrade 13 | sudo apt-get install build-essential 14 | sudo apt-get install python3.4 python3.4-dev libmysqlclient-dev mysql-server-core-5.6 libevent-dev libjpeg-dev zlib1g-dev libpng12-dev 15 | sudo apt-get install libjpeg62-dev zlib1g-dev libfreetype6-dev liblcms1-dev 16 | sudo apt-get install python3-setuptools 17 | sudo apt-get install git-core 18 | sudo apt-get install redis-server redis-tools 19 | sudo apt-get install nginx 20 | sudo apt-get install libpcre3-dev 21 | sudo easy_install3 pip 22 | sudo pip3 install virtualenvwrapper 23 | 24 | # virtulenv 25 | # create the virtulenv path 26 | mkdir ~/.virtualenvs 27 | export WORKON_HOME=~/.virtualenvs 28 | 29 | sudo "VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3" >> ~/.bashrc 30 | sudo "source /user/local/bin/virtualenvwrapper.sh" >> ~/.bashrc 31 | 32 | source ~/.bashrc 33 | # create virtulenv python3 env 34 | mkvirtualenv web 35 | 36 | # python packages 37 | 38 | chmod +x ./scripts/pip.sh 39 | 40 | ./pip.sh 41 | 42 | # website deploy 43 | chmod +x ./scripts/install_production.sh 44 | ./install_production.sh 45 | 46 | # redis 47 | 48 | sudo redis-server config/redis.conf 49 | 50 | 51 | # nginx 52 | sudo service nginx stop 53 | sudo cp ./conf/web_nginx /etc/nginx/sites-avalilable/ 54 | 55 | sudo ln -s /etc/nginx/sites-avalilable/web_nginx /etc/nginx/sites-enabled/web_nginx 56 | sudo service nginx restart 57 | 58 | # uwsgi 59 | 60 | uwsgi --ini ./conf/uwsgi.ini 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /scripts/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | -------------------------------------------------------------------------------- /scripts/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | python manage.py syncdb --settings=quantvc.settings.dev --noinput 4 | python manage.py migrate --settings=quantvc.settings.dev 5 | python manage.py collectstatic --settings=quantvc.settings.dev --noinput -------------------------------------------------------------------------------- /scripts/install_production.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mysql -u root -e " CREATE DATABASE IF NOT EXISTS quantvc DEFAULT CHARSET utf8 COLLATE utf8_general_ci;" 4 | # python3.4 ./web/manage.py makemigrations --settings=quantvc.settings.product 5 | python3.4 ./web/manage.py syncdb --settings=quantvc.settings.product --noinput 6 | python3.4 ./web/manage.py collectstatic --settings=quantvc.settings.product --noinput --clear 7 | python3.4 ./web/manage.py check --settings=quantvc.settings.product -------------------------------------------------------------------------------- /scripts/mange_frontend.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | -------------------------------------------------------------------------------- /scripts/pip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | pip3.4 install -r requirements/base.txt --upgrade 4 | pip3.4 install -r requirements/extension.txt --upgrade 5 | pip3.4 install -r requirements/test.txt --upgrade 6 | # macos CC=gcc pip3.4 install uwsgi 7 | pip3.4 install uwsgi 8 | 9 | -------------------------------------------------------------------------------- /scripts/product_run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sudo nginx -s reload 4 | 5 | uwsgi --ini ./conf/uwsgi.ini -------------------------------------------------------------------------------- /scripts/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | python manage.py runserver --settings=quantvc.settings.local 4 | -------------------------------------------------------------------------------- /scripts/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | -------------------------------------------------------------------------------- /web/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'nooper' 2 | -------------------------------------------------------------------------------- /web/accounts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/web/accounts/__init__.py -------------------------------------------------------------------------------- /web/accounts/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /web/accounts/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | from django.utils.translation import ugettext_lazy as _ 4 | 5 | from userena.models import UserenaLanguageBaseProfile 6 | from userena.utils import user_model_label 7 | 8 | 9 | class Profile(UserenaLanguageBaseProfile): 10 | """ Default profile """ 11 | GENDER_CHOICES = ( 12 | (1, _('Male')), 13 | (2, _('Female')), 14 | ) 15 | user = models.OneToOneField(user_model_label, unique=True, verbose_name=_('user'), related_name='profile') 16 | gender = models.PositiveSmallIntegerField(verbose_name=_('gender'), choices=GENDER_CHOICES, blank=True, null=True) 17 | birth_date = models.DateField(verbose_name=_('birth date'), blank=True, null=True) 18 | about_me = models.TextField(verbose_name=_('about me'), blank=True) -------------------------------------------------------------------------------- /web/accounts/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /web/accounts/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /web/apps/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'nooper' 2 | -------------------------------------------------------------------------------- /web/apps/web/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/web/apps/web/__init__.py -------------------------------------------------------------------------------- /web/apps/web/admin.py: -------------------------------------------------------------------------------- 1 | # encoding:utf-8 2 | from django.contrib import admin 3 | 4 | # Register your models here. 5 | -------------------------------------------------------------------------------- /web/apps/web/form.py: -------------------------------------------------------------------------------- 1 | __author__ = 'nooper' 2 | -------------------------------------------------------------------------------- /web/apps/web/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/web/apps/web/migrations/__init__.py -------------------------------------------------------------------------------- /web/apps/web/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /web/apps/web/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'nooper' 2 | -------------------------------------------------------------------------------- /web/apps/web/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /web/apps/web/urls.py: -------------------------------------------------------------------------------- 1 | # encoding:utf-8 2 | 3 | from django.conf.urls import patterns, include, url 4 | from .views import IndexView 5 | 6 | urlpatterns = patterns('', 7 | url(r"^$",IndexView.as_view(),name="index") 8 | 9 | ) -------------------------------------------------------------------------------- /web/apps/web/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import TemplateView 3 | 4 | 5 | class IndexView(TemplateView): 6 | template_name = "index.html" 7 | -------------------------------------------------------------------------------- /web/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "quantvc.settings.dev") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /web/quantvc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/web/quantvc/__init__.py -------------------------------------------------------------------------------- /web/quantvc/assets/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default, 8 | .btn-primary, 9 | .btn-success, 10 | .btn-info, 11 | .btn-warning, 12 | .btn-danger { 13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 16 | } 17 | .btn-default:active, 18 | .btn-primary:active, 19 | .btn-success:active, 20 | .btn-info:active, 21 | .btn-warning:active, 22 | .btn-danger:active, 23 | .btn-default.active, 24 | .btn-primary.active, 25 | .btn-success.active, 26 | .btn-info.active, 27 | .btn-warning.active, 28 | .btn-danger.active { 29 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 31 | } 32 | .btn-default .badge, 33 | .btn-primary .badge, 34 | .btn-success .badge, 35 | .btn-info .badge, 36 | .btn-warning .badge, 37 | .btn-danger .badge { 38 | text-shadow: none; 39 | } 40 | .btn:active, 41 | .btn.active { 42 | background-image: none; 43 | } 44 | .btn-default { 45 | text-shadow: 0 1px 0 #fff; 46 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 47 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); 48 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); 49 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 50 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 51 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 52 | background-repeat: repeat-x; 53 | border-color: #dbdbdb; 54 | border-color: #ccc; 55 | } 56 | .btn-default:hover, 57 | .btn-default:focus { 58 | background-color: #e0e0e0; 59 | background-position: 0 -15px; 60 | } 61 | .btn-default:active, 62 | .btn-default.active { 63 | background-color: #e0e0e0; 64 | border-color: #dbdbdb; 65 | } 66 | .btn-default:disabled, 67 | .btn-default[disabled] { 68 | background-color: #e0e0e0; 69 | background-image: none; 70 | } 71 | .btn-primary { 72 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); 73 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); 74 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); 75 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); 76 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); 77 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 78 | background-repeat: repeat-x; 79 | border-color: #245580; 80 | } 81 | .btn-primary:hover, 82 | .btn-primary:focus { 83 | background-color: #265a88; 84 | background-position: 0 -15px; 85 | } 86 | .btn-primary:active, 87 | .btn-primary.active { 88 | background-color: #265a88; 89 | border-color: #245580; 90 | } 91 | .btn-primary:disabled, 92 | .btn-primary[disabled] { 93 | background-color: #265a88; 94 | background-image: none; 95 | } 96 | .btn-success { 97 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 98 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); 99 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); 100 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 101 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 102 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 103 | background-repeat: repeat-x; 104 | border-color: #3e8f3e; 105 | } 106 | .btn-success:hover, 107 | .btn-success:focus { 108 | background-color: #419641; 109 | background-position: 0 -15px; 110 | } 111 | .btn-success:active, 112 | .btn-success.active { 113 | background-color: #419641; 114 | border-color: #3e8f3e; 115 | } 116 | .btn-success:disabled, 117 | .btn-success[disabled] { 118 | background-color: #419641; 119 | background-image: none; 120 | } 121 | .btn-info { 122 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 123 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 124 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); 125 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 126 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 127 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 128 | background-repeat: repeat-x; 129 | border-color: #28a4c9; 130 | } 131 | .btn-info:hover, 132 | .btn-info:focus { 133 | background-color: #2aabd2; 134 | background-position: 0 -15px; 135 | } 136 | .btn-info:active, 137 | .btn-info.active { 138 | background-color: #2aabd2; 139 | border-color: #28a4c9; 140 | } 141 | .btn-info:disabled, 142 | .btn-info[disabled] { 143 | background-color: #2aabd2; 144 | background-image: none; 145 | } 146 | .btn-warning { 147 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 148 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 149 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); 150 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 151 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 152 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 153 | background-repeat: repeat-x; 154 | border-color: #e38d13; 155 | } 156 | .btn-warning:hover, 157 | .btn-warning:focus { 158 | background-color: #eb9316; 159 | background-position: 0 -15px; 160 | } 161 | .btn-warning:active, 162 | .btn-warning.active { 163 | background-color: #eb9316; 164 | border-color: #e38d13; 165 | } 166 | .btn-warning:disabled, 167 | .btn-warning[disabled] { 168 | background-color: #eb9316; 169 | background-image: none; 170 | } 171 | .btn-danger { 172 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 173 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 174 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); 175 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 176 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 177 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 178 | background-repeat: repeat-x; 179 | border-color: #b92c28; 180 | } 181 | .btn-danger:hover, 182 | .btn-danger:focus { 183 | background-color: #c12e2a; 184 | background-position: 0 -15px; 185 | } 186 | .btn-danger:active, 187 | .btn-danger.active { 188 | background-color: #c12e2a; 189 | border-color: #b92c28; 190 | } 191 | .btn-danger:disabled, 192 | .btn-danger[disabled] { 193 | background-color: #c12e2a; 194 | background-image: none; 195 | } 196 | .thumbnail, 197 | .img-thumbnail { 198 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 199 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 200 | } 201 | .dropdown-menu > li > a:hover, 202 | .dropdown-menu > li > a:focus { 203 | background-color: #e8e8e8; 204 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 205 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 206 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 207 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 208 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 209 | background-repeat: repeat-x; 210 | } 211 | .dropdown-menu > .active > a, 212 | .dropdown-menu > .active > a:hover, 213 | .dropdown-menu > .active > a:focus { 214 | background-color: #2e6da4; 215 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 216 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 217 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 218 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 219 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 220 | background-repeat: repeat-x; 221 | } 222 | .navbar-default { 223 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 224 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); 225 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); 226 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 227 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 228 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 229 | background-repeat: repeat-x; 230 | border-radius: 4px; 231 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 232 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 233 | } 234 | .navbar-default .navbar-nav > .open > a, 235 | .navbar-default .navbar-nav > .active > a { 236 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 237 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 238 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); 239 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); 240 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); 241 | background-repeat: repeat-x; 242 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 243 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 244 | } 245 | .navbar-brand, 246 | .navbar-nav > li > a { 247 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 248 | } 249 | .navbar-inverse { 250 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 251 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); 252 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); 253 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 254 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 255 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 256 | background-repeat: repeat-x; 257 | } 258 | .navbar-inverse .navbar-nav > .open > a, 259 | .navbar-inverse .navbar-nav > .active > a { 260 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); 261 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); 262 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); 263 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); 264 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); 265 | background-repeat: repeat-x; 266 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 267 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 268 | } 269 | .navbar-inverse .navbar-brand, 270 | .navbar-inverse .navbar-nav > li > a { 271 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 272 | } 273 | .navbar-static-top, 274 | .navbar-fixed-top, 275 | .navbar-fixed-bottom { 276 | border-radius: 0; 277 | } 278 | @media (max-width: 767px) { 279 | .navbar .navbar-nav .open .dropdown-menu > .active > a, 280 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, 281 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { 282 | color: #fff; 283 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 284 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 285 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 286 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 287 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 288 | background-repeat: repeat-x; 289 | } 290 | } 291 | .alert { 292 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 293 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 294 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 295 | } 296 | .alert-success { 297 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 298 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 299 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); 300 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 301 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 302 | background-repeat: repeat-x; 303 | border-color: #b2dba1; 304 | } 305 | .alert-info { 306 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 307 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 308 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); 309 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 310 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 311 | background-repeat: repeat-x; 312 | border-color: #9acfea; 313 | } 314 | .alert-warning { 315 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 316 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 317 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); 318 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 319 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 320 | background-repeat: repeat-x; 321 | border-color: #f5e79e; 322 | } 323 | .alert-danger { 324 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 325 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 326 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); 327 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 328 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 329 | background-repeat: repeat-x; 330 | border-color: #dca7a7; 331 | } 332 | .progress { 333 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 334 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 335 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); 336 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 337 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 338 | background-repeat: repeat-x; 339 | } 340 | .progress-bar { 341 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); 342 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); 343 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); 344 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); 345 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); 346 | background-repeat: repeat-x; 347 | } 348 | .progress-bar-success { 349 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 350 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); 351 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); 352 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 353 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 354 | background-repeat: repeat-x; 355 | } 356 | .progress-bar-info { 357 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 358 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 359 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); 360 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 361 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 362 | background-repeat: repeat-x; 363 | } 364 | .progress-bar-warning { 365 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 366 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 367 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); 368 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 369 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 370 | background-repeat: repeat-x; 371 | } 372 | .progress-bar-danger { 373 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 374 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); 375 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); 376 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 377 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 378 | background-repeat: repeat-x; 379 | } 380 | .progress-bar-striped { 381 | 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); 382 | 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); 383 | 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); 384 | } 385 | .list-group { 386 | border-radius: 4px; 387 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 388 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 389 | } 390 | .list-group-item.active, 391 | .list-group-item.active:hover, 392 | .list-group-item.active:focus { 393 | text-shadow: 0 -1px 0 #286090; 394 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); 395 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); 396 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); 397 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); 398 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); 399 | background-repeat: repeat-x; 400 | border-color: #2b669a; 401 | } 402 | .list-group-item.active .badge, 403 | .list-group-item.active:hover .badge, 404 | .list-group-item.active:focus .badge { 405 | text-shadow: none; 406 | } 407 | .panel { 408 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 409 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 410 | } 411 | .panel-default > .panel-heading { 412 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 413 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 414 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 415 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 416 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 417 | background-repeat: repeat-x; 418 | } 419 | .panel-primary > .panel-heading { 420 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 421 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 422 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 423 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 424 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 425 | background-repeat: repeat-x; 426 | } 427 | .panel-success > .panel-heading { 428 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 429 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 430 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); 431 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 432 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 433 | background-repeat: repeat-x; 434 | } 435 | .panel-info > .panel-heading { 436 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 437 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 438 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); 439 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 440 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 441 | background-repeat: repeat-x; 442 | } 443 | .panel-warning > .panel-heading { 444 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 445 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 446 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); 447 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 448 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 449 | background-repeat: repeat-x; 450 | } 451 | .panel-danger > .panel-heading { 452 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 453 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 454 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); 455 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 456 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 457 | background-repeat: repeat-x; 458 | } 459 | .well { 460 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 461 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 462 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); 463 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 464 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 465 | background-repeat: repeat-x; 466 | border-color: #dcdcdc; 467 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 468 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 469 | } 470 | /*# sourceMappingURL=bootstrap-theme.css.map */ 471 | -------------------------------------------------------------------------------- /web/quantvc/assets/css/bootstrap-theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAcA;;;;;;EAME,0CAAA;ECgDA,6FAAA;EACQ,qFAAA;EC5DT;AFgBC;;;;;;;;;;;;EC2CA,0DAAA;EACQ,kDAAA;EC7CT;AFVD;;;;;;EAiBI,mBAAA;EECH;AFgCC;;EAEE,wBAAA;EE9BH;AFmCD;EGlDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EA+B2C,2BAAA;EAA2B,oBAAA;EExBvE;AFLC;;EAEE,2BAAA;EACA,8BAAA;EEOH;AFJC;;EAEE,2BAAA;EACA,uBAAA;EEMH;AFHC;;EAEE,2BAAA;EACA,wBAAA;EEKH;AFUD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE+BD;AF7BC;;EAEE,2BAAA;EACA,8BAAA;EE+BH;AF5BC;;EAEE,2BAAA;EACA,uBAAA;EE8BH;AF3BC;;EAEE,2BAAA;EACA,wBAAA;EE6BH;AFbD;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEuDD;AFrDC;;EAEE,2BAAA;EACA,8BAAA;EEuDH;AFpDC;;EAEE,2BAAA;EACA,uBAAA;EEsDH;AFnDC;;EAEE,2BAAA;EACA,wBAAA;EEqDH;AFpCD;EGrDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE+ED;AF7EC;;EAEE,2BAAA;EACA,8BAAA;EE+EH;AF5EC;;EAEE,2BAAA;EACA,uBAAA;EE8EH;AF3EC;;EAEE,2BAAA;EACA,wBAAA;EE6EH;AF3DD;EGtDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEuGD;AFrGC;;EAEE,2BAAA;EACA,8BAAA;EEuGH;AFpGC;;EAEE,2BAAA;EACA,uBAAA;EEsGH;AFnGC;;EAEE,2BAAA;EACA,wBAAA;EEqGH;AFlFD;EGvDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE+HD;AF7HC;;EAEE,2BAAA;EACA,8BAAA;EE+HH;AF5HC;;EAEE,2BAAA;EACA,uBAAA;EE8HH;AF3HC;;EAEE,2BAAA;EACA,wBAAA;EE6HH;AFnGD;;ECfE,oDAAA;EACQ,4CAAA;ECsHT;AF9FD;;EGxEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHuEF,2BAAA;EEoGD;AFlGD;;;EG7EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH6EF,2BAAA;EEwGD;AF/FD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ4GA,oBAAA;EC9CA,6FAAA;EACQ,qFAAA;ECoJT;AF1GD;;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;EC8JT;AFvGD;;EAEE,gDAAA;EEyGD;AFrGD;EG7GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EFyOD;AF7GD;;EG7GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;ECoLT;AFvHD;;EAYI,2CAAA;EE+GH;AF1GD;;;EAGE,kBAAA;EE4GD;AF5FD;EAVI;;;IAGE,aAAA;IG1IF,0EAAA;IACA,qEAAA;IACA,+FAAA;IAAA,wEAAA;IACA,6BAAA;IACA,wHAAA;IDoPD;EACF;AFnGD;EACE,+CAAA;ECxGA,4FAAA;EACQ,oFAAA;EC8MT;AF3FD;EGnKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH2JF,uBAAA;EEuGD;AFlGD;EGpKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH2JF,uBAAA;EE+GD;AFzGD;EGrKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH2JF,uBAAA;EEuHD;AFhHD;EGtKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH2JF,uBAAA;EE+HD;AFhHD;EG9KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDiSH;AF7GD;EGxLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDwSH;AFnHD;EGzLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED+SH;AFzHD;EG1LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDsTH;AF/HD;EG3LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED6TH;AFrID;EG5LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDoUH;AFxID;EG/JI,+MAAA;EACA,0MAAA;EACA,uMAAA;ED0SH;AFpID;EACE,oBAAA;EC3JA,oDAAA;EACQ,4CAAA;ECkST;AFrID;;;EAGE,+BAAA;EGhNE,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8MF,uBAAA;EE2ID;AFhJD;;;EAQI,mBAAA;EE6IH;AFnID;EChLE,mDAAA;EACQ,2CAAA;ECsTT;AF7HD;EGzOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDyWH;AFnID;EG1OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDgXH;AFzID;EG3OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuXH;AF/ID;EG5OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8XH;AFrJD;EG7OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqYH;AF3JD;EG9OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4YH;AF3JD;EGrPI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHmPF,uBAAA;ECxMA,2FAAA;EACQ,mFAAA;EC0WT","file":"bootstrap-theme.css","sourcesContent":["\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 .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\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 background-color: darken(@btn-color, 12%);\n background-image: none;\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\n\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; // 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",".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 .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] {\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] {\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] {\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] {\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] {\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] {\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}\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 */","// 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"]} -------------------------------------------------------------------------------- /web/quantvc/assets/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{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-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.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-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .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:hover,.btn-default:focus{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]{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:hover,.btn-primary:focus{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]{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:hover,.btn-success:focus{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]{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:hover,.btn-info:focus{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]{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:hover,.btn-warning:focus{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]{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:hover,.btn-danger:focus{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]{background-color:#c12e2a;background-image:none}.thumbnail,.img-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:hover,.dropdown-menu>li>a:focus{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:hover,.dropdown-menu>.active>a:focus{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>.open>a,.navbar-default .navbar-nav>.active>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}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>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-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{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:hover,.list-group-item.active:focus{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:hover .badge,.list-group-item.active:focus .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)} -------------------------------------------------------------------------------- /web/quantvc/assets/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/web/quantvc/assets/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /web/quantvc/assets/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/web/quantvc/assets/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /web/quantvc/assets/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/web/quantvc/assets/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /web/quantvc/assets/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantvc/simple-django/b3411c72280ae0472f547c0a4b65766765f050e3/web/quantvc/assets/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /web/quantvc/assets/js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){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.1",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.1",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")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&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"),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=this.sliding=this.interval=this.$active=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.1",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="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},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="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,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(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),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"==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(this.options.trigger).filter('[href="#'+b.id+'"], [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.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},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.find("> .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":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(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 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.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('