├── .gitignore ├── LICENSE.txt ├── Procfile ├── README.md ├── apiary.apib ├── local-data-store.cert ├── local-data-store.key ├── package-lock.json ├── package.json ├── public ├── index.html └── lib │ ├── css │ └── bootstrap.min.css │ └── img │ ├── glyphicons-halflings-white.png │ └── glyphicons-halflings.png ├── sample.env └── web.js /.gitignore: -------------------------------------------------------------------------------- 1 | # osx noise 2 | .DS_Store 3 | 4 | # node noise 5 | node_modules/ 6 | 7 | # live config 8 | config.js 9 | .env 10 | 11 | # backups 12 | _backups/ 13 | 14 | *.rej 15 | 16 | *.log -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node web.js -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MIT Annotation Data Store 2 | Data Store and RESTful web API for Annotation Studio, compatible with OKFN Annotator. See: https://github.com/okfn/annotator 3 | 4 | ## Derivation 5 | ### An alternative to OKFN annotator-store 6 | https://github.com/openannotation/annotator-store 7 | 8 | ## Setup 9 | ### Using Heroku 10 | + Create a heroku app `heroku apps:create $appname` 11 | + Add the Heroku add-on MongoLab `heroku addons:add mongolab` 12 | + Get MongoLab configuration settings `heroku config:pull` 13 | + Edit the file named `.env` replace the word `MONGOLAB_URI` with `DB` 14 | + Tell Heroku about your environment: 15 | 16 | ```heroku config:add `cat .env` ``` 17 | 18 | ## Dependencies 19 | ### [Annotator](http://annotatorjs.org/) 20 | https://github.com/openannotation/annotator/ 21 | 22 | ## Other 23 | See package.json (NOTE: you will need the versions of node and npm specified in that package file). 24 | 25 | ## Installation 26 | See https://github.com/hyperstudio/MIT-Annotation-Data-Store/wiki/Installation 27 | 28 | ## Author 29 | - Lab: MIT HyperStudio 30 | - http://hyperstudio.mit.edu/ 31 | - Developer: Jamie Folsom 32 | - jfolsom@mit.edu 33 | 34 | ## License 35 | GPL2 36 | © MIT 2013 37 | -------------------------------------------------------------------------------- /apiary.apib: -------------------------------------------------------------------------------- 1 | FORMAT: 1A 2 | HOST: http://www.google.com 3 | 4 | # Annotations 5 | The MIT Annotation Data Store API is an OKFN Annotator-compatible data store for annotations, built to be used with Annotation Studio. 6 | 7 | # Group Notes 8 | Notes related resources of the **Notes API** 9 | 10 | ## Notes Collection [/notes] 11 | ### List all Notes [GET] 12 | + Response 200 (application/json) 13 | 14 | [{ 15 | "id": 1, "title": "Jogging in park" 16 | }, { 17 | "id": 2, "title": "Pick-up posters from post-office" 18 | }] 19 | 20 | ### Create a Note [POST] 21 | + Request (application/json) 22 | 23 | { "title": "Buy cheese and bread for breakfast." } 24 | 25 | + Response 201 (application/json) 26 | 27 | { "id": 3, "title": "Buy cheese and bread for breakfast." } 28 | 29 | ## Note [/notes/{id}] 30 | A single Note object with all its details 31 | 32 | + Parameters 33 | + id (required, number, `1`) ... Numeric `id` of the Note to perform action with. Has example value. 34 | 35 | ### Retrieve a Note [GET] 36 | + Response 200 (application/json) 37 | 38 | + Header 39 | 40 | X-My-Header: The Value 41 | 42 | + Body 43 | 44 | { "id": 2, "title": "Pick-up posters from post-office" } 45 | 46 | ### Remove a Note [DELETE] 47 | + Response 204 48 | -------------------------------------------------------------------------------- /local-data-store.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICsDCCAZgCCQDPg5mav3RE5jANBgkqhkiG9w0BAQsFADAaMQswCQYDVQQGEwJ1 3 | czELMAkGA1UECAwCbWEwHhcNMjAwMzE4MjEyNTIxWhcNMjAwNDE3MjEyNTIxWjAa 4 | MQswCQYDVQQGEwJ1czELMAkGA1UECAwCbWEwggEiMA0GCSqGSIb3DQEBAQUAA4IB 5 | DwAwggEKAoIBAQChlxjWlcO5FxC7XP7qjHpn45oJkJsfKue+GCSWOkaz7ITWNnkg 6 | N7SwOGbtbCJADV4qbLOq3oNHWdLTXoPoivQdObQh6MVB20WCjlwEyUKNCnBhRcO2 7 | V2churVzR982geEV7y45LtD5AfkN3vSoBCFd26QllzoNthNynlV2PePtnKsxthke 8 | yxJvbFR3Gqe1hScFL5enHBodERaARWAGl+LA+BRlkUoNWk2FYPjUp/1Z2z+1BJ05 9 | IlrvKdy3qb9SSEbgBHLwoQAOrReYWmuf/7FvJyxEzbv3vrlr2e4tolDvdZwirQHz 10 | woGFzOmzB3r4KcT3xCHIHsc23CSGxv5Elo9PAgMBAAEwDQYJKoZIhvcNAQELBQAD 11 | ggEBADs42Nd0D1XUm0YNp3m1nyBiSMapBTRULIstJ+fh2i9M0ZSd5GhSwcG9zvRj 12 | kfevYxkWUKo9MqpmrfrLtyVI1qpr3K6JqN5HWmYTwPx6vYtRXbjETmL2nHDq6s7w 13 | H3T2JMO08NsJA9v7mkjuJElQwHS2L7k7yyMMmgDheu4RrTNAVdqD7sODT/uS3cW3 14 | cCzq8K0o5dGJdGNiU2mQ7LVW7RvDm6oTfto//IsAT9jEniOHC49JkJQ2c0zjIh/G 15 | efpr7Zk/GcpopmIPxIwVg2P/eWB8kpzVQuTkQ/HJfZKZWOI75Ber+D5W4l7dOfuW 16 | uFGBknToc5OK6ojSQo3VQtOCgA4= 17 | -----END CERTIFICATE----- 18 | -------------------------------------------------------------------------------- /local-data-store.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChlxjWlcO5FxC7 3 | XP7qjHpn45oJkJsfKue+GCSWOkaz7ITWNnkgN7SwOGbtbCJADV4qbLOq3oNHWdLT 4 | XoPoivQdObQh6MVB20WCjlwEyUKNCnBhRcO2V2churVzR982geEV7y45LtD5AfkN 5 | 3vSoBCFd26QllzoNthNynlV2PePtnKsxthkeyxJvbFR3Gqe1hScFL5enHBodERaA 6 | RWAGl+LA+BRlkUoNWk2FYPjUp/1Z2z+1BJ05IlrvKdy3qb9SSEbgBHLwoQAOrReY 7 | Wmuf/7FvJyxEzbv3vrlr2e4tolDvdZwirQHzwoGFzOmzB3r4KcT3xCHIHsc23CSG 8 | xv5Elo9PAgMBAAECggEAMtstFAwah1w9Bdrk18jSlXPKfQwn5g1I1kke6rD4o5Pi 9 | 0tBeGsetdHCr5DlOJj6OzmdbvIE/a+tXMPLkLQHehnwstyddPbbXD5niWBdHfMA2 10 | Ukb0q6Sibrkmdlu+YpdJ0e9u6sxTNKtsSPNMqLx0C+gepz4LJVmSkVZHq2kbHSLb 11 | m2tVjBqlNLyj4WYvKmcI/HEs3//f+G+OmQrxYk5Byo+ql3RJgbFwtCnX4UjdRsaL 12 | ORunhp1ihhUVXx44nkmlw2Aef7i4e7SDxh1theUnWrtK+9WsDZJHwCAyO02avjFh 13 | jawONf5ZCZGjifCxgm2kTCIwKXOnb3ncJ+W8pLtCwQKBgQDSvVAGRzsITLdNdxse 14 | V70eyBaXSjiNNpw7MjUxg5XepLBE5yHVlZRmmi178aLVAS3DX8yLkD9fgsYKZmJT 15 | yQxsWrr5hEJk6dTVPh2pdlZtajPrfWlvd89/I45ySmzLImGx23NjcoGRbKHayB/o 16 | vu3uM3Adr8kD/eG1RKDLRbPvHwKBgQDES4DlMw7YH/QlCQ7LtgZYeSSAwgI1DDF/ 17 | ua1Brzjfr1bDtr949gk99AgFrC1DwWiG/H2XJ5jSUrP1BIGiI/PXYVg+3iSqoNLN 18 | +WmeQJCAakttkgn4HF15poxw/xZegjwbVx3eUwa3DlZC7VWX/lB7keG6IHqwMbBk 19 | XTUpKO/J0QKBgQCtAgRvkwzQrIKT0yNtTqSRX7zEKYexztKF+psW8isYpGWdu47Y 20 | VLuHXC3ZIjAG5LfYPI6lSR/t3mONaC5zEIvlbLsxWzZSuHElO6CIXgFoRBcpzkS/ 21 | 4UF05BDunVEhlzFTHZFmZDwg0mkyPreLkSuuMYZqqMTDRSuGcDf9iVTGCwKBgGl2 22 | k4MRQpl12YuIaU2jt5cTRzxygBMWQQX5sY+H4Au2PeybJBaOQfrqQOEjV5J+uHVF 23 | 9QggOyhNTOiIikmd/WWrpGjqm1KdY4VMyqU+1SRZd7sf6oFGZCZ3CB+xvcf7OuYJ 24 | kT+g5gu2BTyiHQmzlnQ9tcR1rNU7bSUPOv+pQePxAoGAYpB+mZa8qqNBG1pimm58 25 | hxAKETEnJStk94yTasoq/rXEvtgc5/mn/1WSVOiY7qoXtLs5ZeMiFSOrNcNjBVGO 26 | 0j1JUTf3YYD6ldC/6CRr8Uaj1KaJPUm/2cbIEnRsAd7ZM/dCtuTCI9rrtOPM5Gl6 27 | SYy85wUUB21ba7etZNEIHxY= 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mit-annotation-data-store", 3 | "version": "0.1.6", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/bson": { 8 | "version": "4.0.3", 9 | "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", 10 | "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", 11 | "requires": { 12 | "@types/node": "*" 13 | } 14 | }, 15 | "@types/mongodb": { 16 | "version": "3.6.3", 17 | "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.3.tgz", 18 | "integrity": "sha512-6YNqGP1hk5bjUFaim+QoFFuI61WjHiHE1BNeB41TA00Xd2K7zG4lcWyLLq/XtIp36uMavvS5hoAUJ+1u/GcX2Q==", 19 | "requires": { 20 | "@types/bson": "*", 21 | "@types/node": "*" 22 | } 23 | }, 24 | "@types/node": { 25 | "version": "14.14.22", 26 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", 27 | "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==" 28 | }, 29 | "accepts": { 30 | "version": "1.3.7", 31 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 32 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 33 | "requires": { 34 | "mime-types": "~2.1.24", 35 | "negotiator": "0.6.2" 36 | } 37 | }, 38 | "ajv": { 39 | "version": "6.10.2", 40 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", 41 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", 42 | "optional": true, 43 | "requires": { 44 | "fast-deep-equal": "^2.0.1", 45 | "fast-json-stable-stringify": "^2.0.0", 46 | "json-schema-traverse": "^0.4.1", 47 | "uri-js": "^4.2.2" 48 | } 49 | }, 50 | "array-flatten": { 51 | "version": "1.1.1", 52 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 53 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 54 | }, 55 | "asap": { 56 | "version": "2.0.6", 57 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 58 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", 59 | "optional": true 60 | }, 61 | "asn1": { 62 | "version": "0.2.4", 63 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 64 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 65 | "optional": true, 66 | "requires": { 67 | "safer-buffer": "~2.1.0" 68 | } 69 | }, 70 | "assert-plus": { 71 | "version": "1.0.0", 72 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 73 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 74 | "optional": true 75 | }, 76 | "asynckit": { 77 | "version": "0.4.0", 78 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 79 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 80 | "optional": true 81 | }, 82 | "aws-sign2": { 83 | "version": "0.7.0", 84 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 85 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 86 | "optional": true 87 | }, 88 | "aws4": { 89 | "version": "1.8.0", 90 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 91 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", 92 | "optional": true 93 | }, 94 | "bcrypt-pbkdf": { 95 | "version": "1.0.2", 96 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 97 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 98 | "optional": true, 99 | "requires": { 100 | "tweetnacl": "^0.14.3" 101 | } 102 | }, 103 | "bl": { 104 | "version": "2.2.1", 105 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 106 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 107 | "requires": { 108 | "readable-stream": "^2.3.5", 109 | "safe-buffer": "^5.1.1" 110 | } 111 | }, 112 | "bluebird": { 113 | "version": "3.5.1", 114 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 115 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 116 | }, 117 | "body-parser": { 118 | "version": "1.19.0", 119 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 120 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 121 | "requires": { 122 | "bytes": "3.1.0", 123 | "content-type": "~1.0.4", 124 | "debug": "2.6.9", 125 | "depd": "~1.1.2", 126 | "http-errors": "1.7.2", 127 | "iconv-lite": "0.4.24", 128 | "on-finished": "~2.3.0", 129 | "qs": "6.7.0", 130 | "raw-body": "2.4.0", 131 | "type-is": "~1.6.17" 132 | } 133 | }, 134 | "bson": { 135 | "version": "1.1.5", 136 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", 137 | "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" 138 | }, 139 | "bytes": { 140 | "version": "3.1.0", 141 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 142 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 143 | }, 144 | "caseless": { 145 | "version": "0.12.0", 146 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 147 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 148 | "optional": true 149 | }, 150 | "clone": { 151 | "version": "2.1.2", 152 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", 153 | "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" 154 | }, 155 | "combined-stream": { 156 | "version": "1.0.8", 157 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 158 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 159 | "optional": true, 160 | "requires": { 161 | "delayed-stream": "~1.0.0" 162 | } 163 | }, 164 | "content-disposition": { 165 | "version": "0.5.3", 166 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 167 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 168 | "requires": { 169 | "safe-buffer": "5.1.2" 170 | } 171 | }, 172 | "content-type": { 173 | "version": "1.0.4", 174 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 175 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 176 | }, 177 | "cookie": { 178 | "version": "0.4.0", 179 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 180 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 181 | }, 182 | "cookie-signature": { 183 | "version": "1.0.6", 184 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 185 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 186 | }, 187 | "core-util-is": { 188 | "version": "1.0.2", 189 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 190 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 191 | }, 192 | "dashdash": { 193 | "version": "1.14.1", 194 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 195 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 196 | "optional": true, 197 | "requires": { 198 | "assert-plus": "^1.0.0" 199 | } 200 | }, 201 | "debug": { 202 | "version": "2.6.9", 203 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 204 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 205 | "requires": { 206 | "ms": "2.0.0" 207 | } 208 | }, 209 | "delayed-stream": { 210 | "version": "1.0.0", 211 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 212 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 213 | "optional": true 214 | }, 215 | "denque": { 216 | "version": "1.5.0", 217 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", 218 | "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" 219 | }, 220 | "depd": { 221 | "version": "1.1.2", 222 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 223 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 224 | }, 225 | "destroy": { 226 | "version": "1.0.4", 227 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 228 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 229 | }, 230 | "ecc-jsbn": { 231 | "version": "0.1.2", 232 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 233 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 234 | "optional": true, 235 | "requires": { 236 | "jsbn": "~0.1.0", 237 | "safer-buffer": "^2.1.0" 238 | } 239 | }, 240 | "ee-first": { 241 | "version": "1.1.1", 242 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 243 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 244 | }, 245 | "encodeurl": { 246 | "version": "1.0.2", 247 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 248 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 249 | }, 250 | "errno": { 251 | "version": "0.1.7", 252 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", 253 | "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", 254 | "optional": true, 255 | "requires": { 256 | "prr": "~1.0.1" 257 | } 258 | }, 259 | "errorhandler": { 260 | "version": "1.5.1", 261 | "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", 262 | "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", 263 | "requires": { 264 | "accepts": "~1.3.7", 265 | "escape-html": "~1.0.3" 266 | } 267 | }, 268 | "escape-html": { 269 | "version": "1.0.3", 270 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 271 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 272 | }, 273 | "etag": { 274 | "version": "1.8.1", 275 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 276 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 277 | }, 278 | "express": { 279 | "version": "4.17.1", 280 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 281 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 282 | "requires": { 283 | "accepts": "~1.3.7", 284 | "array-flatten": "1.1.1", 285 | "body-parser": "1.19.0", 286 | "content-disposition": "0.5.3", 287 | "content-type": "~1.0.4", 288 | "cookie": "0.4.0", 289 | "cookie-signature": "1.0.6", 290 | "debug": "2.6.9", 291 | "depd": "~1.1.2", 292 | "encodeurl": "~1.0.2", 293 | "escape-html": "~1.0.3", 294 | "etag": "~1.8.1", 295 | "finalhandler": "~1.1.2", 296 | "fresh": "0.5.2", 297 | "merge-descriptors": "1.0.1", 298 | "methods": "~1.1.2", 299 | "on-finished": "~2.3.0", 300 | "parseurl": "~1.3.3", 301 | "path-to-regexp": "0.1.7", 302 | "proxy-addr": "~2.0.5", 303 | "qs": "6.7.0", 304 | "range-parser": "~1.2.1", 305 | "safe-buffer": "5.1.2", 306 | "send": "0.17.1", 307 | "serve-static": "1.14.1", 308 | "setprototypeof": "1.1.1", 309 | "statuses": "~1.5.0", 310 | "type-is": "~1.6.18", 311 | "utils-merge": "1.0.1", 312 | "vary": "~1.1.2" 313 | } 314 | }, 315 | "extend": { 316 | "version": "3.0.2", 317 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 318 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 319 | "optional": true 320 | }, 321 | "extsprintf": { 322 | "version": "1.3.0", 323 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 324 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 325 | "optional": true 326 | }, 327 | "fast-deep-equal": { 328 | "version": "2.0.1", 329 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 330 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 331 | "optional": true 332 | }, 333 | "fast-json-stable-stringify": { 334 | "version": "2.0.0", 335 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 336 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 337 | "optional": true 338 | }, 339 | "finalhandler": { 340 | "version": "1.1.2", 341 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 342 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 343 | "requires": { 344 | "debug": "2.6.9", 345 | "encodeurl": "~1.0.2", 346 | "escape-html": "~1.0.3", 347 | "on-finished": "~2.3.0", 348 | "parseurl": "~1.3.3", 349 | "statuses": "~1.5.0", 350 | "unpipe": "~1.0.0" 351 | } 352 | }, 353 | "forever-agent": { 354 | "version": "0.6.1", 355 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 356 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 357 | "optional": true 358 | }, 359 | "form-data": { 360 | "version": "2.3.3", 361 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 362 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 363 | "optional": true, 364 | "requires": { 365 | "asynckit": "^0.4.0", 366 | "combined-stream": "^1.0.6", 367 | "mime-types": "^2.1.12" 368 | } 369 | }, 370 | "forwarded": { 371 | "version": "0.1.2", 372 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 373 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 374 | }, 375 | "fresh": { 376 | "version": "0.5.2", 377 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 378 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 379 | }, 380 | "fs": { 381 | "version": "0.0.1-security", 382 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 383 | "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=", 384 | "dev": true 385 | }, 386 | "function-bind": { 387 | "version": "1.1.1", 388 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 389 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 390 | }, 391 | "getpass": { 392 | "version": "0.1.7", 393 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 394 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 395 | "optional": true, 396 | "requires": { 397 | "assert-plus": "^1.0.0" 398 | } 399 | }, 400 | "graceful-fs": { 401 | "version": "4.2.0", 402 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", 403 | "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", 404 | "optional": true 405 | }, 406 | "har-schema": { 407 | "version": "2.0.0", 408 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 409 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 410 | "optional": true 411 | }, 412 | "har-validator": { 413 | "version": "5.1.3", 414 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 415 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 416 | "optional": true, 417 | "requires": { 418 | "ajv": "^6.5.5", 419 | "har-schema": "^2.0.0" 420 | } 421 | }, 422 | "has": { 423 | "version": "1.0.3", 424 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 425 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 426 | "requires": { 427 | "function-bind": "^1.1.1" 428 | } 429 | }, 430 | "http-errors": { 431 | "version": "1.7.2", 432 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 433 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 434 | "requires": { 435 | "depd": "~1.1.2", 436 | "inherits": "2.0.3", 437 | "setprototypeof": "1.1.1", 438 | "statuses": ">= 1.5.0 < 2", 439 | "toidentifier": "1.0.0" 440 | }, 441 | "dependencies": { 442 | "inherits": { 443 | "version": "2.0.3", 444 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 445 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 446 | } 447 | } 448 | }, 449 | "http-signature": { 450 | "version": "1.2.0", 451 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 452 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 453 | "optional": true, 454 | "requires": { 455 | "assert-plus": "^1.0.0", 456 | "jsprim": "^1.2.2", 457 | "sshpk": "^1.7.0" 458 | } 459 | }, 460 | "https": { 461 | "version": "1.0.0", 462 | "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", 463 | "integrity": "sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q=", 464 | "dev": true 465 | }, 466 | "iconv-lite": { 467 | "version": "0.4.24", 468 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 469 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 470 | "requires": { 471 | "safer-buffer": ">= 2.1.2 < 3" 472 | } 473 | }, 474 | "image-size": { 475 | "version": "0.5.5", 476 | "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", 477 | "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", 478 | "optional": true 479 | }, 480 | "inherits": { 481 | "version": "2.0.4", 482 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 483 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 484 | }, 485 | "ipaddr.js": { 486 | "version": "1.9.0", 487 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", 488 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" 489 | }, 490 | "is": { 491 | "version": "3.3.0", 492 | "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", 493 | "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==" 494 | }, 495 | "is-typedarray": { 496 | "version": "1.0.0", 497 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 498 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 499 | "optional": true 500 | }, 501 | "isarray": { 502 | "version": "1.0.0", 503 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 504 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 505 | }, 506 | "isstream": { 507 | "version": "0.1.2", 508 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 509 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 510 | "optional": true 511 | }, 512 | "jsbn": { 513 | "version": "0.1.1", 514 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 515 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 516 | "optional": true 517 | }, 518 | "json-schema": { 519 | "version": "0.2.3", 520 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 521 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 522 | "optional": true 523 | }, 524 | "json-schema-traverse": { 525 | "version": "0.4.1", 526 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 527 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 528 | "optional": true 529 | }, 530 | "json-stringify-safe": { 531 | "version": "5.0.1", 532 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 533 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 534 | "optional": true 535 | }, 536 | "jsprim": { 537 | "version": "1.4.1", 538 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 539 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 540 | "optional": true, 541 | "requires": { 542 | "assert-plus": "1.0.0", 543 | "extsprintf": "1.3.0", 544 | "json-schema": "0.2.3", 545 | "verror": "1.10.0" 546 | } 547 | }, 548 | "jwt-simple": { 549 | "version": "0.5.6", 550 | "resolved": "https://registry.npmjs.org/jwt-simple/-/jwt-simple-0.5.6.tgz", 551 | "integrity": "sha512-40aUybvhH9t2h71ncA1/1SbtTNCVZHgsTsTgqPUxGWDmUDrXyDf2wMNQKEbdBjbf4AI+fQhbECNTV6lWxQKUzg==" 552 | }, 553 | "kareem": { 554 | "version": "2.3.2", 555 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", 556 | "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" 557 | }, 558 | "less": { 559 | "version": "3.9.0", 560 | "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", 561 | "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", 562 | "requires": { 563 | "clone": "^2.1.2", 564 | "errno": "^0.1.1", 565 | "graceful-fs": "^4.1.2", 566 | "image-size": "~0.5.0", 567 | "mime": "^1.4.1", 568 | "mkdirp": "^0.5.0", 569 | "promise": "^7.1.1", 570 | "request": "^2.83.0", 571 | "source-map": "~0.6.0" 572 | } 573 | }, 574 | "less-middleware": { 575 | "version": "3.1.0", 576 | "resolved": "https://registry.npmjs.org/less-middleware/-/less-middleware-3.1.0.tgz", 577 | "integrity": "sha512-1FcTlNE73AVTNwcBykDbCnDPgKZT4VuCZxtlst/i4nB93Y/NsVQsZopK78zfDcT/2lsjBa5xZI8g4SFUhJqsJg==", 578 | "requires": { 579 | "less": "~3.9.0", 580 | "mkdirp": "~0.5.1", 581 | "node.extend": "~2.0.2" 582 | } 583 | }, 584 | "media-typer": { 585 | "version": "0.3.0", 586 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 587 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 588 | }, 589 | "memory-pager": { 590 | "version": "1.5.0", 591 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 592 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 593 | "optional": true 594 | }, 595 | "merge-descriptors": { 596 | "version": "1.0.1", 597 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 598 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 599 | }, 600 | "method-override": { 601 | "version": "3.0.0", 602 | "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", 603 | "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", 604 | "requires": { 605 | "debug": "3.1.0", 606 | "methods": "~1.1.2", 607 | "parseurl": "~1.3.2", 608 | "vary": "~1.1.2" 609 | }, 610 | "dependencies": { 611 | "debug": { 612 | "version": "3.1.0", 613 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 614 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 615 | "requires": { 616 | "ms": "2.0.0" 617 | } 618 | } 619 | } 620 | }, 621 | "methods": { 622 | "version": "1.1.2", 623 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 624 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 625 | }, 626 | "mime": { 627 | "version": "1.6.0", 628 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 629 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 630 | }, 631 | "mime-db": { 632 | "version": "1.40.0", 633 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 634 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" 635 | }, 636 | "mime-types": { 637 | "version": "2.1.24", 638 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 639 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 640 | "requires": { 641 | "mime-db": "1.40.0" 642 | } 643 | }, 644 | "minimist": { 645 | "version": "1.2.5", 646 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 647 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 648 | }, 649 | "mkdirp": { 650 | "version": "0.5.5", 651 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 652 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 653 | "requires": { 654 | "minimist": "^1.2.5" 655 | } 656 | }, 657 | "mongodb": { 658 | "version": "3.6.3", 659 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.3.tgz", 660 | "integrity": "sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w==", 661 | "requires": { 662 | "bl": "^2.2.1", 663 | "bson": "^1.1.4", 664 | "denque": "^1.4.1", 665 | "require_optional": "^1.0.1", 666 | "safe-buffer": "^5.1.2", 667 | "saslprep": "^1.0.0" 668 | } 669 | }, 670 | "mongodb-uri": { 671 | "version": "0.9.7", 672 | "resolved": "https://registry.npmjs.org/mongodb-uri/-/mongodb-uri-0.9.7.tgz", 673 | "integrity": "sha1-D3ca0W9IOuZfQoeWlCjp+8SqYYE=" 674 | }, 675 | "mongoose": { 676 | "version": "5.11.14", 677 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.14.tgz", 678 | "integrity": "sha512-sDI5/i1C9JD3ysDbVGqQG4N6vMC3ZOY7sH/bT63/+3vJub2Nys//JegL4y4iS7v8Vgvje3sNA3ladMSsVnv6TQ==", 679 | "requires": { 680 | "@types/mongodb": "^3.5.27", 681 | "bson": "^1.1.4", 682 | "kareem": "2.3.2", 683 | "mongodb": "3.6.3", 684 | "mongoose-legacy-pluralize": "1.0.2", 685 | "mpath": "0.8.3", 686 | "mquery": "3.2.3", 687 | "ms": "2.1.2", 688 | "regexp-clone": "1.0.0", 689 | "safe-buffer": "5.2.1", 690 | "sift": "7.0.1", 691 | "sliced": "1.0.1" 692 | }, 693 | "dependencies": { 694 | "ms": { 695 | "version": "2.1.2", 696 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 697 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 698 | }, 699 | "safe-buffer": { 700 | "version": "5.2.1", 701 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 702 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 703 | } 704 | } 705 | }, 706 | "mongoose-legacy-pluralize": { 707 | "version": "1.0.2", 708 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 709 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 710 | }, 711 | "mpath": { 712 | "version": "0.8.3", 713 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", 714 | "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" 715 | }, 716 | "mquery": { 717 | "version": "3.2.3", 718 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.3.tgz", 719 | "integrity": "sha512-cIfbP4TyMYX+SkaQ2MntD+F2XbqaBHUYWk3j+kqdDztPWok3tgyssOZxMHMtzbV1w9DaSlvEea0Iocuro41A4g==", 720 | "requires": { 721 | "bluebird": "3.5.1", 722 | "debug": "3.1.0", 723 | "regexp-clone": "^1.0.0", 724 | "safe-buffer": "5.1.2", 725 | "sliced": "1.0.1" 726 | }, 727 | "dependencies": { 728 | "debug": { 729 | "version": "3.1.0", 730 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 731 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 732 | "requires": { 733 | "ms": "2.0.0" 734 | } 735 | } 736 | } 737 | }, 738 | "ms": { 739 | "version": "2.0.0", 740 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 741 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 742 | }, 743 | "negotiator": { 744 | "version": "0.6.2", 745 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 746 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 747 | }, 748 | "node.extend": { 749 | "version": "2.0.2", 750 | "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.2.tgz", 751 | "integrity": "sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ==", 752 | "requires": { 753 | "has": "^1.0.3", 754 | "is": "^3.2.1" 755 | } 756 | }, 757 | "oauth-sign": { 758 | "version": "0.9.0", 759 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 760 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 761 | "optional": true 762 | }, 763 | "on-finished": { 764 | "version": "2.3.0", 765 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 766 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 767 | "requires": { 768 | "ee-first": "1.1.1" 769 | } 770 | }, 771 | "parseurl": { 772 | "version": "1.3.3", 773 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 774 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 775 | }, 776 | "path-to-regexp": { 777 | "version": "0.1.7", 778 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 779 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 780 | }, 781 | "performance-now": { 782 | "version": "2.1.0", 783 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 784 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 785 | "optional": true 786 | }, 787 | "process-nextick-args": { 788 | "version": "2.0.1", 789 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 790 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 791 | }, 792 | "promise": { 793 | "version": "7.3.1", 794 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 795 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 796 | "optional": true, 797 | "requires": { 798 | "asap": "~2.0.3" 799 | } 800 | }, 801 | "proxy-addr": { 802 | "version": "2.0.5", 803 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", 804 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", 805 | "requires": { 806 | "forwarded": "~0.1.2", 807 | "ipaddr.js": "1.9.0" 808 | } 809 | }, 810 | "prr": { 811 | "version": "1.0.1", 812 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 813 | "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", 814 | "optional": true 815 | }, 816 | "psl": { 817 | "version": "1.3.0", 818 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", 819 | "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==", 820 | "optional": true 821 | }, 822 | "punycode": { 823 | "version": "2.1.1", 824 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 825 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 826 | "optional": true 827 | }, 828 | "qs": { 829 | "version": "6.7.0", 830 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 831 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 832 | }, 833 | "range-parser": { 834 | "version": "1.2.1", 835 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 836 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 837 | }, 838 | "raw-body": { 839 | "version": "2.4.0", 840 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 841 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 842 | "requires": { 843 | "bytes": "3.1.0", 844 | "http-errors": "1.7.2", 845 | "iconv-lite": "0.4.24", 846 | "unpipe": "1.0.0" 847 | } 848 | }, 849 | "readable-stream": { 850 | "version": "2.3.7", 851 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 852 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 853 | "requires": { 854 | "core-util-is": "~1.0.0", 855 | "inherits": "~2.0.3", 856 | "isarray": "~1.0.0", 857 | "process-nextick-args": "~2.0.0", 858 | "safe-buffer": "~5.1.1", 859 | "string_decoder": "~1.1.1", 860 | "util-deprecate": "~1.0.1" 861 | } 862 | }, 863 | "regexp-clone": { 864 | "version": "1.0.0", 865 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 866 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 867 | }, 868 | "request": { 869 | "version": "2.88.0", 870 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 871 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 872 | "optional": true, 873 | "requires": { 874 | "aws-sign2": "~0.7.0", 875 | "aws4": "^1.8.0", 876 | "caseless": "~0.12.0", 877 | "combined-stream": "~1.0.6", 878 | "extend": "~3.0.2", 879 | "forever-agent": "~0.6.1", 880 | "form-data": "~2.3.2", 881 | "har-validator": "~5.1.0", 882 | "http-signature": "~1.2.0", 883 | "is-typedarray": "~1.0.0", 884 | "isstream": "~0.1.2", 885 | "json-stringify-safe": "~5.0.1", 886 | "mime-types": "~2.1.19", 887 | "oauth-sign": "~0.9.0", 888 | "performance-now": "^2.1.0", 889 | "qs": "~6.5.2", 890 | "safe-buffer": "^5.1.2", 891 | "tough-cookie": "~2.4.3", 892 | "tunnel-agent": "^0.6.0", 893 | "uuid": "^3.3.2" 894 | }, 895 | "dependencies": { 896 | "qs": { 897 | "version": "6.5.2", 898 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 899 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 900 | "optional": true 901 | } 902 | } 903 | }, 904 | "require_optional": { 905 | "version": "1.0.1", 906 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 907 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 908 | "requires": { 909 | "resolve-from": "^2.0.0", 910 | "semver": "^5.1.0" 911 | } 912 | }, 913 | "resolve-from": { 914 | "version": "2.0.0", 915 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 916 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 917 | }, 918 | "safe-buffer": { 919 | "version": "5.1.2", 920 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 921 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 922 | }, 923 | "safer-buffer": { 924 | "version": "2.1.2", 925 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 926 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 927 | }, 928 | "saslprep": { 929 | "version": "1.0.3", 930 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 931 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 932 | "optional": true, 933 | "requires": { 934 | "sparse-bitfield": "^3.0.3" 935 | } 936 | }, 937 | "semver": { 938 | "version": "5.7.1", 939 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 940 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 941 | }, 942 | "send": { 943 | "version": "0.17.1", 944 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 945 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 946 | "requires": { 947 | "debug": "2.6.9", 948 | "depd": "~1.1.2", 949 | "destroy": "~1.0.4", 950 | "encodeurl": "~1.0.2", 951 | "escape-html": "~1.0.3", 952 | "etag": "~1.8.1", 953 | "fresh": "0.5.2", 954 | "http-errors": "~1.7.2", 955 | "mime": "1.6.0", 956 | "ms": "2.1.1", 957 | "on-finished": "~2.3.0", 958 | "range-parser": "~1.2.1", 959 | "statuses": "~1.5.0" 960 | }, 961 | "dependencies": { 962 | "ms": { 963 | "version": "2.1.1", 964 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 965 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 966 | } 967 | } 968 | }, 969 | "serve-static": { 970 | "version": "1.14.1", 971 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 972 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 973 | "requires": { 974 | "encodeurl": "~1.0.2", 975 | "escape-html": "~1.0.3", 976 | "parseurl": "~1.3.3", 977 | "send": "0.17.1" 978 | } 979 | }, 980 | "setprototypeof": { 981 | "version": "1.1.1", 982 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 983 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 984 | }, 985 | "sift": { 986 | "version": "7.0.1", 987 | "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", 988 | "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" 989 | }, 990 | "sliced": { 991 | "version": "1.0.1", 992 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 993 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 994 | }, 995 | "source-map": { 996 | "version": "0.6.1", 997 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 998 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 999 | "optional": true 1000 | }, 1001 | "sparse-bitfield": { 1002 | "version": "3.0.3", 1003 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1004 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 1005 | "optional": true, 1006 | "requires": { 1007 | "memory-pager": "^1.0.2" 1008 | } 1009 | }, 1010 | "sshpk": { 1011 | "version": "1.16.1", 1012 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1013 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1014 | "optional": true, 1015 | "requires": { 1016 | "asn1": "~0.2.3", 1017 | "assert-plus": "^1.0.0", 1018 | "bcrypt-pbkdf": "^1.0.0", 1019 | "dashdash": "^1.12.0", 1020 | "ecc-jsbn": "~0.1.1", 1021 | "getpass": "^0.1.1", 1022 | "jsbn": "~0.1.0", 1023 | "safer-buffer": "^2.0.2", 1024 | "tweetnacl": "~0.14.0" 1025 | } 1026 | }, 1027 | "statuses": { 1028 | "version": "1.5.0", 1029 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1030 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1031 | }, 1032 | "string_decoder": { 1033 | "version": "1.1.1", 1034 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1035 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1036 | "requires": { 1037 | "safe-buffer": "~5.1.0" 1038 | } 1039 | }, 1040 | "toidentifier": { 1041 | "version": "1.0.0", 1042 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1043 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 1044 | }, 1045 | "tough-cookie": { 1046 | "version": "2.4.3", 1047 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1048 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1049 | "optional": true, 1050 | "requires": { 1051 | "psl": "^1.1.24", 1052 | "punycode": "^1.4.1" 1053 | }, 1054 | "dependencies": { 1055 | "punycode": { 1056 | "version": "1.4.1", 1057 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1058 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1059 | "optional": true 1060 | } 1061 | } 1062 | }, 1063 | "tunnel-agent": { 1064 | "version": "0.6.0", 1065 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1066 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1067 | "optional": true, 1068 | "requires": { 1069 | "safe-buffer": "^5.0.1" 1070 | } 1071 | }, 1072 | "tweetnacl": { 1073 | "version": "0.14.5", 1074 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1075 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1076 | "optional": true 1077 | }, 1078 | "type-is": { 1079 | "version": "1.6.18", 1080 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1081 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1082 | "requires": { 1083 | "media-typer": "0.3.0", 1084 | "mime-types": "~2.1.24" 1085 | } 1086 | }, 1087 | "unpipe": { 1088 | "version": "1.0.0", 1089 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1090 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1091 | }, 1092 | "uri-js": { 1093 | "version": "4.2.2", 1094 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1095 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1096 | "optional": true, 1097 | "requires": { 1098 | "punycode": "^2.1.0" 1099 | } 1100 | }, 1101 | "util-deprecate": { 1102 | "version": "1.0.2", 1103 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1104 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1105 | }, 1106 | "utils-merge": { 1107 | "version": "1.0.1", 1108 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1109 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1110 | }, 1111 | "uuid": { 1112 | "version": "3.3.2", 1113 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 1114 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", 1115 | "optional": true 1116 | }, 1117 | "vary": { 1118 | "version": "1.1.2", 1119 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1120 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1121 | }, 1122 | "verror": { 1123 | "version": "1.10.0", 1124 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1125 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1126 | "optional": true, 1127 | "requires": { 1128 | "assert-plus": "^1.0.0", 1129 | "core-util-is": "1.0.2", 1130 | "extsprintf": "^1.2.0" 1131 | } 1132 | } 1133 | } 1134 | } 1135 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mit-annotation-data-store", 3 | "version": "0.1.6", 4 | "dependencies": { 5 | "errorhandler": "^1.5.1", 6 | "express": "4.17.1", 7 | "jwt-simple": "^0.5.6", 8 | "less-middleware": "3.1.0", 9 | "method-override": "^3.0.0", 10 | "mongodb-uri": "^0.9.7", 11 | "mongoose": "^5.11.0" 12 | }, 13 | "engines": { 14 | "node": "8.16.0", 15 | "npm": "6.4.1" 16 | }, 17 | "devDependencies": { 18 | "fs": "0.0.1-security", 19 | "https": "^1.0.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | MIT Annotations API 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 21 | 22 | 23 | 24 | 41 | 42 |
43 | 44 |
45 |
46 |
47 |

48 | The annotations API for Annotation Studio is served by this application. You will need to be logged into an approved account to actually create, retrieve, update, and delete annotations. 49 |

50 |
51 |
52 |
53 |
54 |
55 | 56 | 57 | -------------------------------------------------------------------------------- /public/lib/css/bootstrap.min.css: -------------------------------------------------------------------------------- 1 | article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} 2 | audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} 3 | audio:not([controls]){display:none;} 4 | html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} 5 | a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} 6 | a:hover,a:active{outline:0;} 7 | sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} 8 | sup{top:-0.5em;} 9 | sub{bottom:-0.25em;} 10 | img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;} 11 | #map_canvas img{max-width:none;} 12 | button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} 13 | button,input{*overflow:visible;line-height:normal;} 14 | button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} 15 | button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} 16 | input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;} 17 | input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} 18 | textarea{overflow:auto;vertical-align:top;} 19 | .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} 20 | .clearfix:after{clear:both;} 21 | .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} 22 | .input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} 23 | body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#555555;background-color:#ededed;} 24 | a{color:#366ddc;text-decoration:none;} 25 | a:hover{color:#1d4ba8;text-decoration:underline;} 26 | .row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} 27 | .row:after{clear:both;} 28 | [class*="span"]{float:left;margin-left:20px;} 29 | .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} 30 | .span12{width:940px;} 31 | .span11{width:860px;} 32 | .span10{width:780px;} 33 | .span9{width:700px;} 34 | .span8{width:620px;} 35 | .span7{width:540px;} 36 | .span6{width:460px;} 37 | .span5{width:380px;} 38 | .span4{width:300px;} 39 | .span3{width:220px;} 40 | .span2{width:140px;} 41 | .span1{width:60px;} 42 | .offset12{margin-left:980px;} 43 | .offset11{margin-left:900px;} 44 | .offset10{margin-left:820px;} 45 | .offset9{margin-left:740px;} 46 | .offset8{margin-left:660px;} 47 | .offset7{margin-left:580px;} 48 | .offset6{margin-left:500px;} 49 | .offset5{margin-left:420px;} 50 | .offset4{margin-left:340px;} 51 | .offset3{margin-left:260px;} 52 | .offset2{margin-left:180px;} 53 | .offset1{margin-left:100px;} 54 | .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} 55 | .row-fluid:after{clear:both;} 56 | .row-fluid [class*="span"]{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574%;*margin-left:2.0744680846382977%;} 57 | .row-fluid [class*="span"]:first-child{margin-left:0;} 58 | .row-fluid .span12{width:99.99999998999999%;*width:99.94680850063828%;} 59 | .row-fluid .span11{width:91.489361693%;*width:91.4361702036383%;} 60 | .row-fluid .span10{width:82.97872339599999%;*width:82.92553190663828%;} 61 | .row-fluid .span9{width:74.468085099%;*width:74.4148936096383%;} 62 | .row-fluid .span8{width:65.95744680199999%;*width:65.90425531263828%;} 63 | .row-fluid .span7{width:57.446808505%;*width:57.3936170156383%;} 64 | .row-fluid .span6{width:48.93617020799999%;*width:48.88297871863829%;} 65 | .row-fluid .span5{width:40.425531911%;*width:40.3723404216383%;} 66 | .row-fluid .span4{width:31.914893614%;*width:31.8617021246383%;} 67 | .row-fluid .span3{width:23.404255317%;*width:23.3510638276383%;} 68 | .row-fluid .span2{width:14.89361702%;*width:14.8404255306383%;} 69 | .row-fluid .span1{width:6.382978723%;*width:6.329787233638298%;} 70 | .container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} 71 | .container:after{clear:both;} 72 | .container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} 73 | .container-fluid:after{clear:both;} 74 | p{margin:0 0 9px;}p small{font-size:11px;color:#999999;} 75 | .lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} 76 | h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:#333333;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} 77 | h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} 78 | h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} 79 | h3{font-size:18px;line-height:27px;}h3 small{font-size:14px;} 80 | h4,h5,h6{line-height:18px;} 81 | h4{font-size:14px;}h4 small{font-size:12px;} 82 | h5{font-size:12px;} 83 | h6{font-size:11px;color:#999999;text-transform:uppercase;} 84 | .page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;} 85 | .page-header h1{line-height:1;} 86 | ul,ol{padding:0;margin:0 0 9px 25px;} 87 | ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} 88 | ul{list-style:disc;} 89 | ol{list-style:decimal;} 90 | li{line-height:18px;} 91 | ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} 92 | dl{margin-bottom:18px;} 93 | dt,dd{line-height:18px;} 94 | dt{font-weight:bold;line-height:17px;} 95 | dd{margin-left:9px;} 96 | .dl-horizontal dt{float:left;width:120px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} 97 | .dl-horizontal dd{margin-left:130px;} 98 | hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} 99 | strong{font-weight:bold;} 100 | em{font-style:italic;} 101 | .muted{color:#999999;} 102 | abbr[title]{cursor:help;border-bottom:1px dotted #999999;} 103 | abbr.initialism{font-size:90%;text-transform:uppercase;} 104 | blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} 105 | blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} 106 | blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} 107 | q:before,q:after,blockquote:before,blockquote:after{content:"";} 108 | address{display:block;margin-bottom:18px;font-style:normal;line-height:18px;} 109 | small{font-size:100%;} 110 | cite{font-style:normal;} 111 | code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} 112 | code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} 113 | pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:18px;} 114 | pre code{padding:0;color:inherit;background-color:transparent;border:0;} 115 | .pre-scrollable{max-height:340px;overflow-y:scroll;} 116 | form{margin:0 0 18px;} 117 | fieldset{padding:0;margin:0;border:0;} 118 | legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:13.5px;color:#999999;} 119 | label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;} 120 | input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} 121 | label{display:block;margin-bottom:5px;} 122 | select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;} 123 | input,textarea{width:210px;} 124 | textarea{height:auto;} 125 | textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} 126 | input[type="radio"],input[type="checkbox"]{margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;} 127 | input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} 128 | .uneditable-textarea{width:auto;height:auto;} 129 | select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} 130 | select{width:220px;border:1px solid #bbb;} 131 | select[multiple],select[size]{height:auto;} 132 | select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} 133 | .radio,.checkbox{min-height:18px;padding-left:18px;} 134 | .radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} 135 | .controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} 136 | .radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} 137 | .radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} 138 | .input-mini{width:60px;} 139 | .input-small{width:90px;} 140 | .input-medium{width:150px;} 141 | .input-large{width:210px;} 142 | .input-xlarge{width:270px;} 143 | .input-xxlarge{width:530px;} 144 | input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} 145 | .input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} 146 | input,textarea,.uneditable-input{margin-left:0;} 147 | input.span12, textarea.span12, .uneditable-input.span12{width:930px;} 148 | input.span11, textarea.span11, .uneditable-input.span11{width:850px;} 149 | input.span10, textarea.span10, .uneditable-input.span10{width:770px;} 150 | input.span9, textarea.span9, .uneditable-input.span9{width:690px;} 151 | input.span8, textarea.span8, .uneditable-input.span8{width:610px;} 152 | input.span7, textarea.span7, .uneditable-input.span7{width:530px;} 153 | input.span6, textarea.span6, .uneditable-input.span6{width:450px;} 154 | input.span5, textarea.span5, .uneditable-input.span5{width:370px;} 155 | input.span4, textarea.span4, .uneditable-input.span4{width:290px;} 156 | input.span3, textarea.span3, .uneditable-input.span3{width:210px;} 157 | input.span2, textarea.span2, .uneditable-input.span2{width:130px;} 158 | input.span1, textarea.span1, .uneditable-input.span1{width:50px;} 159 | input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;border-color:#ddd;} 160 | input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} 161 | .control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#ff6600;} 162 | .control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#ff6600;border-color:#ff6600;}.control-group.warning .checkbox:focus,.control-group.warning .radio:focus,.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#cc5200;-webkit-box-shadow:0 0 6px #ffa366;-moz-box-shadow:0 0 6px #ffa366;box-shadow:0 0 6px #ffa366;} 163 | .control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#ff6600;background-color:#fcf8e3;border-color:#ff6600;} 164 | .control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#e32c3b;} 165 | .control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#e32c3b;border-color:#e32c3b;}.control-group.error .checkbox:focus,.control-group.error .radio:focus,.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#c21a28;-webkit-box-shadow:0 0 6px #ef868f;-moz-box-shadow:0 0 6px #ef868f;box-shadow:0 0 6px #ef868f;} 166 | .control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#e32c3b;background-color:#f2dede;border-color:#e32c3b;} 167 | .control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#3d9400;} 168 | .control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#3d9400;border-color:#3d9400;}.control-group.success .checkbox:focus,.control-group.success .radio:focus,.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#286100;-webkit-box-shadow:0 0 6px #67fa00;-moz-box-shadow:0 0 6px #67fa00;box-shadow:0 0 6px #67fa00;} 169 | .control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#3d9400;background-color:#dff0d8;border-color:#3d9400;} 170 | input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} 171 | .form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";} 172 | .form-actions:after{clear:both;} 173 | .uneditable-input{overflow:hidden;white-space:nowrap;cursor:not-allowed;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);} 174 | :-moz-placeholder{color:#555555;} 175 | :-ms-input-placeholder{color:#555555;} 176 | ::-webkit-input-placeholder{color:#555555;} 177 | .help-block,.help-inline{color:#555555;} 178 | .help-block{display:block;margin-bottom:9px;} 179 | .help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} 180 | .input-prepend,.input-append{margin-bottom:5px;}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:middle;-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{z-index:2;} 181 | .input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} 182 | .input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;height:18px;min-width:16px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #ffffff;vertical-align:middle;background-color:#eeeeee;border:1px solid #ccc;} 183 | .input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} 184 | .input-prepend .active,.input-append .active{background-color:#84ff2e;border-color:#3d9400;} 185 | .input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} 186 | .input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0;} 187 | .input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0;} 188 | .input-append .uneditable-input{border-right-color:#ccc;border-left-color:#eee;} 189 | .input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0;} 190 | .input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} 191 | .input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0;} 192 | .input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 0 0 0;-moz-border-radius:0 0 0 0;border-radius:0 0 0 0;} 193 | .search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} 194 | .form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;} 195 | .form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} 196 | .form-search label,.form-inline label{display:inline-block;} 197 | .form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} 198 | .form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} 199 | .form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} 200 | .control-group{margin-bottom:9px;} 201 | legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} 202 | .form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} 203 | .form-horizontal .control-group:after{clear:both;} 204 | .form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right;} 205 | .form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:160px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:160px;} 206 | .form-horizontal .help-block{margin-top:9px;margin-bottom:0;} 207 | .form-horizontal .form-actions{padding-left:160px;} 208 | table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} 209 | .table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} 210 | .table th{font-weight:bold;} 211 | .table thead th{vertical-align:bottom;} 212 | .table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} 213 | .table tbody+tbody{border-top:2px solid #dddddd;} 214 | .table-condensed th,.table-condensed td{padding:4px 5px;} 215 | .table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapsed;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} 216 | .table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} 217 | .table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px;} 218 | .table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px;} 219 | .table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;} 220 | .table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;} 221 | .table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} 222 | .table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;} 223 | table .span1{float:none;width:44px;margin-left:0;} 224 | table .span2{float:none;width:124px;margin-left:0;} 225 | table .span3{float:none;width:204px;margin-left:0;} 226 | table .span4{float:none;width:284px;margin-left:0;} 227 | table .span5{float:none;width:364px;margin-left:0;} 228 | table .span6{float:none;width:444px;margin-left:0;} 229 | table .span7{float:none;width:524px;margin-left:0;} 230 | table .span8{float:none;width:604px;margin-left:0;} 231 | table .span9{float:none;width:684px;margin-left:0;} 232 | table .span10{float:none;width:764px;margin-left:0;} 233 | table .span11{float:none;width:844px;margin-left:0;} 234 | table .span12{float:none;width:924px;margin-left:0;} 235 | table .span13{float:none;width:1004px;margin-left:0;} 236 | table .span14{float:none;width:1084px;margin-left:0;} 237 | table .span15{float:none;width:1164px;margin-left:0;} 238 | table .span16{float:none;width:1244px;margin-left:0;} 239 | table .span17{float:none;width:1324px;margin-left:0;} 240 | table .span18{float:none;width:1404px;margin-left:0;} 241 | table .span19{float:none;width:1484px;margin-left:0;} 242 | table .span20{float:none;width:1564px;margin-left:0;} 243 | table .span21{float:none;width:1644px;margin-left:0;} 244 | table .span22{float:none;width:1724px;margin-left:0;} 245 | table .span23{float:none;width:1804px;margin-left:0;} 246 | table .span24{float:none;width:1884px;margin-left:0;} 247 | [class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;} 248 | .icon-white{background-image:url("../img/glyphicons-halflings-white.png");} 249 | .icon-glass{background-position:0 0;} 250 | .icon-music{background-position:-24px 0;} 251 | .icon-search{background-position:-48px 0;} 252 | .icon-envelope{background-position:-72px 0;} 253 | .icon-heart{background-position:-96px 0;} 254 | .icon-star{background-position:-120px 0;} 255 | .icon-star-empty{background-position:-144px 0;} 256 | .icon-user{background-position:-168px 0;} 257 | .icon-film{background-position:-192px 0;} 258 | .icon-th-large{background-position:-216px 0;} 259 | .icon-th{background-position:-240px 0;} 260 | .icon-th-list{background-position:-264px 0;} 261 | .icon-ok{background-position:-288px 0;} 262 | .icon-remove{background-position:-312px 0;} 263 | .icon-zoom-in{background-position:-336px 0;} 264 | .icon-zoom-out{background-position:-360px 0;} 265 | .icon-off{background-position:-384px 0;} 266 | .icon-signal{background-position:-408px 0;} 267 | .icon-cog{background-position:-432px 0;} 268 | .icon-trash{background-position:-456px 0;} 269 | .icon-home{background-position:0 -24px;} 270 | .icon-file{background-position:-24px -24px;} 271 | .icon-time{background-position:-48px -24px;} 272 | .icon-road{background-position:-72px -24px;} 273 | .icon-download-alt{background-position:-96px -24px;} 274 | .icon-download{background-position:-120px -24px;} 275 | .icon-upload{background-position:-144px -24px;} 276 | .icon-inbox{background-position:-168px -24px;} 277 | .icon-play-circle{background-position:-192px -24px;} 278 | .icon-repeat{background-position:-216px -24px;} 279 | .icon-refresh{background-position:-240px -24px;} 280 | .icon-list-alt{background-position:-264px -24px;} 281 | .icon-lock{background-position:-287px -24px;} 282 | .icon-flag{background-position:-312px -24px;} 283 | .icon-headphones{background-position:-336px -24px;} 284 | .icon-volume-off{background-position:-360px -24px;} 285 | .icon-volume-down{background-position:-384px -24px;} 286 | .icon-volume-up{background-position:-408px -24px;} 287 | .icon-qrcode{background-position:-432px -24px;} 288 | .icon-barcode{background-position:-456px -24px;} 289 | .icon-tag{background-position:0 -48px;} 290 | .icon-tags{background-position:-25px -48px;} 291 | .icon-book{background-position:-48px -48px;} 292 | .icon-bookmark{background-position:-72px -48px;} 293 | .icon-print{background-position:-96px -48px;} 294 | .icon-camera{background-position:-120px -48px;} 295 | .icon-font{background-position:-144px -48px;} 296 | .icon-bold{background-position:-167px -48px;} 297 | .icon-italic{background-position:-192px -48px;} 298 | .icon-text-height{background-position:-216px -48px;} 299 | .icon-text-width{background-position:-240px -48px;} 300 | .icon-align-left{background-position:-264px -48px;} 301 | .icon-align-center{background-position:-288px -48px;} 302 | .icon-align-right{background-position:-312px -48px;} 303 | .icon-align-justify{background-position:-336px -48px;} 304 | .icon-list{background-position:-360px -48px;} 305 | .icon-indent-left{background-position:-384px -48px;} 306 | .icon-indent-right{background-position:-408px -48px;} 307 | .icon-facetime-video{background-position:-432px -48px;} 308 | .icon-picture{background-position:-456px -48px;} 309 | .icon-pencil{background-position:0 -72px;} 310 | .icon-map-marker{background-position:-24px -72px;} 311 | .icon-adjust{background-position:-48px -72px;} 312 | .icon-tint{background-position:-72px -72px;} 313 | .icon-edit{background-position:-96px -72px;} 314 | .icon-share{background-position:-120px -72px;} 315 | .icon-check{background-position:-144px -72px;} 316 | .icon-move{background-position:-168px -72px;} 317 | .icon-step-backward{background-position:-192px -72px;} 318 | .icon-fast-backward{background-position:-216px -72px;} 319 | .icon-backward{background-position:-240px -72px;} 320 | .icon-play{background-position:-264px -72px;} 321 | .icon-pause{background-position:-288px -72px;} 322 | .icon-stop{background-position:-312px -72px;} 323 | .icon-forward{background-position:-336px -72px;} 324 | .icon-fast-forward{background-position:-360px -72px;} 325 | .icon-step-forward{background-position:-384px -72px;} 326 | .icon-eject{background-position:-408px -72px;} 327 | .icon-chevron-left{background-position:-432px -72px;} 328 | .icon-chevron-right{background-position:-456px -72px;} 329 | .icon-plus-sign{background-position:0 -96px;} 330 | .icon-minus-sign{background-position:-24px -96px;} 331 | .icon-remove-sign{background-position:-48px -96px;} 332 | .icon-ok-sign{background-position:-72px -96px;} 333 | .icon-question-sign{background-position:-96px -96px;} 334 | .icon-info-sign{background-position:-120px -96px;} 335 | .icon-screenshot{background-position:-144px -96px;} 336 | .icon-remove-circle{background-position:-168px -96px;} 337 | .icon-ok-circle{background-position:-192px -96px;} 338 | .icon-ban-circle{background-position:-216px -96px;} 339 | .icon-arrow-left{background-position:-240px -96px;} 340 | .icon-arrow-right{background-position:-264px -96px;} 341 | .icon-arrow-up{background-position:-289px -96px;} 342 | .icon-arrow-down{background-position:-312px -96px;} 343 | .icon-share-alt{background-position:-336px -96px;} 344 | .icon-resize-full{background-position:-360px -96px;} 345 | .icon-resize-small{background-position:-384px -96px;} 346 | .icon-plus{background-position:-408px -96px;} 347 | .icon-minus{background-position:-433px -96px;} 348 | .icon-asterisk{background-position:-456px -96px;} 349 | .icon-exclamation-sign{background-position:0 -120px;} 350 | .icon-gift{background-position:-24px -120px;} 351 | .icon-leaf{background-position:-48px -120px;} 352 | .icon-fire{background-position:-72px -120px;} 353 | .icon-eye-open{background-position:-96px -120px;} 354 | .icon-eye-close{background-position:-120px -120px;} 355 | .icon-warning-sign{background-position:-144px -120px;} 356 | .icon-plane{background-position:-168px -120px;} 357 | .icon-calendar{background-position:-192px -120px;} 358 | .icon-random{background-position:-216px -120px;} 359 | .icon-comment{background-position:-240px -120px;} 360 | .icon-magnet{background-position:-264px -120px;} 361 | .icon-chevron-up{background-position:-288px -120px;} 362 | .icon-chevron-down{background-position:-313px -119px;} 363 | .icon-retweet{background-position:-336px -120px;} 364 | .icon-shopping-cart{background-position:-360px -120px;} 365 | .icon-folder-close{background-position:-384px -120px;} 366 | .icon-folder-open{background-position:-408px -120px;} 367 | .icon-resize-vertical{background-position:-432px -119px;} 368 | .icon-resize-horizontal{background-position:-456px -118px;} 369 | .icon-hdd{background-position:0 -144px;} 370 | .icon-bullhorn{background-position:-24px -144px;} 371 | .icon-bell{background-position:-48px -144px;} 372 | .icon-certificate{background-position:-72px -144px;} 373 | .icon-thumbs-up{background-position:-96px -144px;} 374 | .icon-thumbs-down{background-position:-120px -144px;} 375 | .icon-hand-right{background-position:-144px -144px;} 376 | .icon-hand-left{background-position:-168px -144px;} 377 | .icon-hand-up{background-position:-192px -144px;} 378 | .icon-hand-down{background-position:-216px -144px;} 379 | .icon-circle-arrow-right{background-position:-240px -144px;} 380 | .icon-circle-arrow-left{background-position:-264px -144px;} 381 | .icon-circle-arrow-up{background-position:-288px -144px;} 382 | .icon-circle-arrow-down{background-position:-312px -144px;} 383 | .icon-globe{background-position:-336px -144px;} 384 | .icon-wrench{background-position:-360px -144px;} 385 | .icon-tasks{background-position:-384px -144px;} 386 | .icon-filter{background-position:-408px -144px;} 387 | .icon-briefcase{background-position:-432px -144px;} 388 | .icon-fullscreen{background-position:-456px -144px;} 389 | .dropup,.dropdown{position:relative;} 390 | .dropdown-toggle{*margin-bottom:-3px;} 391 | .dropdown-toggle:active,.open .dropdown-toggle{outline:0;} 392 | .caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:0.3;filter:alpha(opacity=30);} 393 | .dropdown .caret{margin-top:8px;margin-left:2px;} 394 | .dropdown:hover .caret,.open .caret{opacity:1;filter:alpha(opacity=100);} 395 | .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:4px 0;margin:1px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;} 396 | .dropdown-menu .divider{*width:100%;height:1px;margin:8px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} 397 | .dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333333;white-space:nowrap;} 398 | .dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#366ddc;} 399 | .open{*z-index:1000;}.open >.dropdown-menu{display:block;} 400 | .pull-right>.dropdown-menu{right:0;left:auto;} 401 | .dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";} 402 | .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} 403 | .typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} 404 | .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} 405 | .well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} 406 | .well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} 407 | .fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;} 408 | .collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;} 409 | .close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);} 410 | button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;} 411 | .btn{display:inline-block;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;*line-height:20px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #cccccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9;} 412 | .btn:active,.btn.active{background-color:#cccccc \9;} 413 | .btn:first-child{*margin-left:0;} 414 | .btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} 415 | .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} 416 | .btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} 417 | .btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} 418 | .btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} 419 | .btn-large [class^="icon-"]{margin-top:1px;} 420 | .btn-small{padding:5px 9px;font-size:11px;line-height:16px;} 421 | .btn-small [class^="icon-"]{margin-top:-1px;} 422 | .btn-mini{padding:2px 6px;font-size:11px;line-height:14px;} 423 | .btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} 424 | .btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} 425 | .btn{border-color:#ccc;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} 426 | .btn-primary{background-color:#365cdc;background-image:-moz-linear-gradient(top, #366ddc, #3644dc);background-image:-ms-linear-gradient(top, #366ddc, #3644dc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#366ddc), to(#3644dc));background-image:-webkit-linear-gradient(top, #366ddc, #3644dc);background-image:-o-linear-gradient(top, #366ddc, #3644dc);background-image:linear-gradient(top, #366ddc, #3644dc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#366ddc', endColorstr='#3644dc', GradientType=0);border-color:#3644dc #3644dc #1d29a8;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#3644dc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#3644dc;*background-color:#2533d4;} 427 | .btn-primary:active,.btn-primary.active{background-color:#212ebe \9;} 428 | .btn-warning{background-color:#ff822e;background-image:-moz-linear-gradient(top, #ff944d, #ff6600);background-image:-ms-linear-gradient(top, #ff944d, #ff6600);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ff944d), to(#ff6600));background-image:-webkit-linear-gradient(top, #ff944d, #ff6600);background-image:-o-linear-gradient(top, #ff944d, #ff6600);background-image:linear-gradient(top, #ff944d, #ff6600);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff944d', endColorstr='#ff6600', GradientType=0);border-color:#ff6600 #ff6600 #b34700;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#ff6600;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#ff6600;*background-color:#e65c00;} 429 | .btn-warning:active,.btn-warning.active{background-color:#cc5200 \9;} 430 | .btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a;} 431 | .btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} 432 | .btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249;} 433 | .btn-success:active,.btn-success.active{background-color:#408140 \9;} 434 | .btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0;} 435 | .btn-info:active,.btn-info.active{background-color:#24748c \9;} 436 | .btn-inverse{background-color:#454545;background-image:-moz-linear-gradient(top, #555555, #2c2c2c);background-image:-ms-linear-gradient(top, #555555, #2c2c2c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#2c2c2c));background-image:-webkit-linear-gradient(top, #555555, #2c2c2c);background-image:-o-linear-gradient(top, #555555, #2c2c2c);background-image:linear-gradient(top, #555555, #2c2c2c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#2c2c2c', GradientType=0);border-color:#2c2c2c #2c2c2c #060606;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2c2c2c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#2c2c2c;*background-color:#1f1f1f;} 437 | .btn-inverse:active,.btn-inverse.active{background-color:#121212 \9;} 438 | button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} 439 | button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} 440 | button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} 441 | button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} 442 | .btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} 443 | .btn-group:after{clear:both;} 444 | .btn-group:first-child{*margin-left:0;} 445 | .btn-group+.btn-group{margin-left:5px;} 446 | .btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;} 447 | .btn-group>.btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} 448 | .btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} 449 | .btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} 450 | .btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} 451 | .btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} 452 | .btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} 453 | .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} 454 | .btn-group>.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:4px;*padding-bottom:4px;} 455 | .btn-group>.btn-mini.dropdown-toggle{padding-left:5px;padding-right:5px;} 456 | .btn-group>.btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px;} 457 | .btn-group>.btn-large.dropdown-toggle{padding-left:12px;padding-right:12px;} 458 | .btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} 459 | .btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} 460 | .btn-group.open .btn-primary.dropdown-toggle{background-color:#3644dc;} 461 | .btn-group.open .btn-warning.dropdown-toggle{background-color:#ff6600;} 462 | .btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} 463 | .btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} 464 | .btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} 465 | .btn-group.open .btn-inverse.dropdown-toggle{background-color:#2c2c2c;} 466 | .btn .caret{margin-top:7px;margin-left:0;} 467 | .btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} 468 | .btn-mini .caret{margin-top:5px;} 469 | .btn-small .caret{margin-top:6px;} 470 | .btn-large .caret{margin-top:6px;border-left-width:5px;border-right-width:5px;border-top-width:5px;} 471 | .dropup .btn-large .caret{border-bottom:5px solid #000000;border-top:0;} 472 | .btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} 473 | .alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#ff6600;} 474 | .alert-heading{color:inherit;} 475 | .alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} 476 | .alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3d9400;} 477 | .alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#e32c3b;} 478 | .alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#1155cc;} 479 | .alert-block{padding-top:14px;padding-bottom:14px;} 480 | .alert-block>p,.alert-block>ul{margin-bottom:0;} 481 | .alert-block p+p{margin-top:5px;} 482 | .nav{margin-left:0;margin-bottom:18px;list-style:none;} 483 | .nav>li>a{display:block;} 484 | .nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} 485 | .nav>.pull-right{float:right;} 486 | .nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} 487 | .nav li+.nav-header{margin-top:9px;} 488 | .nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} 489 | .nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} 490 | .nav-list>li>a{padding:3px 15px;} 491 | .nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#366ddc;} 492 | .nav-list [class^="icon-"]{margin-right:2px;} 493 | .nav-list .divider{*width:100%;height:1px;margin:8px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} 494 | .nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} 495 | .nav-tabs:after,.nav-pills:after{clear:both;} 496 | .nav-tabs>li,.nav-pills>li{float:left;} 497 | .nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} 498 | .nav-tabs{border-bottom:1px solid #ddd;} 499 | .nav-tabs>li{margin-bottom:-1px;} 500 | .nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:18px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} 501 | .nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} 502 | .nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} 503 | .nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#366ddc;} 504 | .nav-stacked>li{float:none;} 505 | .nav-stacked>li>a{margin-right:0;} 506 | .nav-tabs.nav-stacked{border-bottom:0;} 507 | .nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} 508 | .nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} 509 | .nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} 510 | .nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} 511 | .nav-pills.nav-stacked>li>a{margin-bottom:3px;} 512 | .nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} 513 | .nav-tabs .dropdown-menu{-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;} 514 | .nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} 515 | .nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#366ddc;border-bottom-color:#366ddc;margin-top:6px;} 516 | .nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#1d4ba8;border-bottom-color:#1d4ba8;} 517 | .nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333;} 518 | .nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} 519 | .nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} 520 | .nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} 521 | .tabs-stacked .open>a:hover{border-color:#999999;} 522 | .tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} 523 | .tabbable:after{clear:both;} 524 | .tab-content{overflow:auto;} 525 | .tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;} 526 | .tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} 527 | .tab-content>.active,.pill-content>.active{display:block;} 528 | .tabs-below>.nav-tabs{border-top:1px solid #ddd;} 529 | .tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;} 530 | .tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} 531 | .tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd;} 532 | .tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;} 533 | .tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} 534 | .tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} 535 | .tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} 536 | .tabs-left>.nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} 537 | .tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} 538 | .tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} 539 | .tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} 540 | .tabs-right>.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} 541 | .tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} 542 | .navbar{*position:relative;*z-index:2;overflow:visible;margin-bottom:18px;} 543 | .navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#f3f3f3;background-image:-moz-linear-gradient(top, #f3f3f3, #f3f3f3);background-image:-ms-linear-gradient(top, #f3f3f3, #f3f3f3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f3f3f3), to(#f3f3f3));background-image:-webkit-linear-gradient(top, #f3f3f3, #f3f3f3);background-image:-o-linear-gradient(top, #f3f3f3, #f3f3f3);background-image:linear-gradient(top, #f3f3f3, #f3f3f3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#f3f3f3', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);} 544 | .navbar .container{width:auto;} 545 | .nav-collapse.collapse{height:auto;} 546 | .navbar{color:#555555;}.navbar .brand:hover{text-decoration:none;} 547 | .navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#333333;} 548 | .navbar .navbar-text{margin-bottom:0;line-height:40px;} 549 | .navbar .navbar-link{color:#555555;}.navbar .navbar-link:hover{color:#333333;} 550 | .navbar .btn,.navbar .btn-group{margin-top:5px;} 551 | .navbar .btn-group .btn{margin:0;} 552 | .navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} 553 | .navbar-form:after{clear:both;} 554 | .navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} 555 | .navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0;} 556 | .navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} 557 | .navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} 558 | .navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;background-color:#ffffff;border:1px solid #b3b3b3;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query:-moz-placeholder{color:#cccccc;} 559 | .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;} 560 | .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} 561 | .navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} 562 | .navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} 563 | .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} 564 | .navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} 565 | .navbar-fixed-top{top:0;} 566 | .navbar-fixed-bottom{bottom:0;} 567 | .navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} 568 | .navbar .nav.pull-right{float:right;} 569 | .navbar .nav>li{display:block;float:left;} 570 | .navbar .nav>li>a{float:none;padding:9px 10px 11px;line-height:19px;color:#555555;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} 571 | .navbar .btn{display:inline-block;padding:4px 10px 4px;margin:5px 5px 6px;line-height:18px;} 572 | .navbar .btn-group{margin:0;padding:5px 5px 6px;} 573 | .navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;} 574 | .navbar .nav .active>a,.navbar .nav .active>a:hover{color:#333333;text-decoration:none;background-color:#f3f3f3;} 575 | .navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#f3f3f3;border-right:1px solid #f3f3f3;} 576 | .navbar .nav.pull-right{margin-left:10px;margin-right:0;} 577 | .navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#f3f3f3;background-image:-moz-linear-gradient(top, #f3f3f3, #f3f3f3);background-image:-ms-linear-gradient(top, #f3f3f3, #f3f3f3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f3f3f3), to(#f3f3f3));background-image:-webkit-linear-gradient(top, #f3f3f3, #f3f3f3);background-image:-o-linear-gradient(top, #f3f3f3, #f3f3f3);background-image:linear-gradient(top, #f3f3f3, #f3f3f3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#f3f3f3', GradientType=0);border-color:#f3f3f3 #f3f3f3 #cdcdcd;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f3f3f3;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{background-color:#f3f3f3;*background-color:#e6e6e6;} 578 | .navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#dadada \9;} 579 | .navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} 580 | .btn-navbar .icon-bar+.icon-bar{margin-top:3px;} 581 | .navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} 582 | .navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} 583 | .navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} 584 | .navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} 585 | .navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.dropdown.open .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} 586 | .navbar .nav li.dropdown.active .caret{opacity:1;filter:alpha(opacity=100);} 587 | .navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:transparent;} 588 | .navbar .nav li.dropdown.active>.dropdown-toggle:hover{color:#ffffff;} 589 | .navbar .pull-right .dropdown-menu,.navbar .dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right .dropdown-menu:before,.navbar .dropdown-menu.pull-right:before{left:auto;right:12px;} 590 | .navbar .pull-right .dropdown-menu:after,.navbar .dropdown-menu.pull-right:after{left:auto;right:13px;} 591 | .breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;} 592 | .breadcrumb .divider{padding:0 5px;color:#999999;} 593 | .breadcrumb .active a{color:#333333;} 594 | .pagination{height:36px;margin:18px 0;} 595 | .pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} 596 | .pagination li{display:inline;} 597 | .pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} 598 | .pagination a:hover,.pagination .active a{background-color:#f5f5f5;} 599 | .pagination .active a{color:#999999;cursor:default;} 600 | .pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} 601 | .pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} 602 | .pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} 603 | .pagination-centered{text-align:center;} 604 | .pagination-right{text-align:right;} 605 | .pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";} 606 | .pager:after{clear:both;} 607 | .pager li{display:inline;} 608 | .pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} 609 | .pager a:hover{text-decoration:none;background-color:#f5f5f5;} 610 | .pager .next a{float:right;} 611 | .pager .previous a{float:left;} 612 | .pager .disabled a,.pager .disabled a:hover{color:#999999;background-color:#fff;cursor:default;} 613 | .modal-open .dropdown-menu{z-index:2050;} 614 | .modal-open .dropdown.open{*z-index:2050;} 615 | .modal-open .popover{z-index:2060;} 616 | .modal-open .tooltip{z-index:2070;} 617 | .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} 618 | .modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} 619 | .modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} 620 | .modal.fade.in{top:50%;} 621 | .modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} 622 | .modal-body{overflow-y:auto;max-height:400px;padding:15px;} 623 | .modal-form{margin-bottom:0;} 624 | .modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} 625 | .modal-footer:after{clear:both;} 626 | .modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} 627 | .modal-footer .btn-group .btn+.btn{margin-left:-1px;} 628 | .tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} 629 | .tooltip.top{margin-top:-2px;} 630 | .tooltip.right{margin-left:2px;} 631 | .tooltip.bottom{margin-top:2px;} 632 | .tooltip.left{margin-left:-2px;} 633 | .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} 634 | .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} 635 | .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} 636 | .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} 637 | .tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} 638 | .tooltip-arrow{position:absolute;width:0;height:0;} 639 | .popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;} 640 | .popover.right{margin-left:5px;} 641 | .popover.bottom{margin-top:5px;} 642 | .popover.left{margin-left:-5px;} 643 | .popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} 644 | .popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} 645 | .popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} 646 | .popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} 647 | .popover .arrow{position:absolute;width:0;height:0;} 648 | .popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} 649 | .popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;} 650 | .popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;} 651 | .thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";} 652 | .thumbnails:after{clear:both;} 653 | .row-fluid .thumbnails{margin-left:0;} 654 | .thumbnails>li{float:left;margin-bottom:18px;margin-left:20px;} 655 | .thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);} 656 | a.thumbnail:hover{border-color:#366ddc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} 657 | .thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} 658 | .thumbnail .caption{padding:9px;} 659 | .label,.badge{font-size:10.998px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;} 660 | .label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} 661 | .badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} 662 | a.label:hover,a.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} 663 | .label-important,.badge-important{background-color:#e32c3b;} 664 | .label-important[href],.badge-important[href]{background-color:#c21a28;} 665 | .label-warning,.badge-warning{background-color:#ff6600;} 666 | .label-warning[href],.badge-warning[href]{background-color:#cc5200;} 667 | .label-success,.badge-success{background-color:#3d9400;} 668 | .label-success[href],.badge-success[href]{background-color:#286100;} 669 | .label-info,.badge-info{background-color:#1155cc;} 670 | .label-info[href],.badge-info[href]{background-color:#0d419d;} 671 | .label-inverse,.badge-inverse{background-color:#333333;} 672 | .label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;} 673 | @-webkit-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}@-o-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:40px 0;} to{background-position:0 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} 674 | .progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} 675 | .progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));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);background-image:-moz-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);background-image:-ms-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);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);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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} 676 | .progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} 677 | .progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} 678 | .progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));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);background-image:-moz-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);background-image:-ms-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);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);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);} 679 | .progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);} 680 | .progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));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);background-image:-moz-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);background-image:-ms-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);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);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);} 681 | .progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} 682 | .progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));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);background-image:-moz-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);background-image:-ms-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);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);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);} 683 | .progress-warning .bar{background-color:#ff822e;background-image:-moz-linear-gradient(top, #ff944d, #ff6600);background-image:-ms-linear-gradient(top, #ff944d, #ff6600);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ff944d), to(#ff6600));background-image:-webkit-linear-gradient(top, #ff944d, #ff6600);background-image:-o-linear-gradient(top, #ff944d, #ff6600);background-image:linear-gradient(top, #ff944d, #ff6600);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff944d', endColorstr='#ff6600', GradientType=0);} 684 | .progress-warning.progress-striped .bar{background-color:#ff944d;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));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);background-image:-moz-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);background-image:-ms-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);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);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);} 685 | .accordion{margin-bottom:18px;} 686 | .accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} 687 | .accordion-heading{border-bottom:0;} 688 | .accordion-heading .accordion-toggle{display:block;padding:8px 15px;} 689 | .accordion-toggle{cursor:pointer;} 690 | .accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} 691 | .carousel{position:relative;margin-bottom:18px;line-height:1;} 692 | .carousel-inner{overflow:hidden;width:100%;position:relative;} 693 | .carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} 694 | .carousel .item>img{display:block;line-height:1;} 695 | .carousel .active,.carousel .next,.carousel .prev{display:block;} 696 | .carousel .active{left:0;} 697 | .carousel .next,.carousel .prev{position:absolute;top:0;width:100%;} 698 | .carousel .next{left:100%;} 699 | .carousel .prev{left:-100%;} 700 | .carousel .next.left,.carousel .prev.right{left:0;} 701 | .carousel .active.left{left:-100%;} 702 | .carousel .active.right{left:100%;} 703 | .carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#2c2c2c;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} 704 | .carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} 705 | .carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} 706 | .carousel-caption h4,.carousel-caption p{color:#ffffff;} 707 | .hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} 708 | .hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit;} 709 | .pull-right{float:right;} 710 | .pull-left{float:left;} 711 | .hide{display:none;} 712 | .show{display:block;} 713 | .invisible{visibility:hidden;} 714 | h6,.hero-unit{color:#333333;} 715 | .navbar .navbar-inner{-webkit-box-shadow:inset 0 -1px #cfcaca;-moz-box-shadow:inset 0 -1px #cfcaca;box-shadow:inset 0 -1px #cfcaca;border-bottom:1px solid #FFF;border-bottom:none;} 716 | .navbar .brand{padding-top:10px;color:#333333;} 717 | .navbar .navbar-text{padding:14px 10px 11px;text-shadow:none;font-weight:normal;font-size:11px;line-height:19px;} 718 | .navbar .nav>li>a{padding-top:14px;text-shadow:none;font-weight:normal;font-size:11px;} 719 | .navbar .nav>li>a:hover{text-decoration:underline;} 720 | .navbar .nav .active>a,.navbar .nav .active>a:hover{background-color:transparent;} 721 | .navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.open.dropdown .dropdown-toggle .caret{border-top-color:#555555;} 722 | .navbar .nav-collapse .nav li>a{color:#333333;font-weight:normal;} 723 | .navbar .nav-collapse .nav li>a:hover{background-color:transparent;color:#000000;text-decoration:underline;} 724 | div.subnav{background-image:none;background-color:#f3f3f3;border-bottom:1px solid transparent;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);}div.subnav.subnav-fixed{-webkit-box-shadow:inset 0 5px #ffffff , 0 1px 1px rgba(0, 0, 0, 0.3);-moz-box-shadow:inset 0 5px #ffffff , 0 1px 1px rgba(0, 0, 0, 0.3);box-shadow:inset 0 5px #ffffff , 0 1px 1px rgba(0, 0, 0, 0.3);} 725 | div.subnav .nav>li>a{padding-top:12px;color:#555555;font-weight:normal;font-size:11px;}div.subnav .nav>li>a:hover{text-decoration:underline;} 726 | div.subnav .nav>li.open>a,div.subnav .nav>li.open>a:hover{background-color:transparent;border-left:1px solid whiteSmoke;border-right:1px solid #E5E5E5;} 727 | @media (max-width:979px){form.navbar-form,form.navbar-search{border-top:1px solid #ccc;border-bottom:1px solid #ccc;}}.nav .nav-header{font-weight:normal;text-transform:none;} 728 | .nav>li>a{font-size:11px;border-width:1px;} 729 | .dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-size:11px;} 730 | .dropdown.open .dropdown-toggle{color:#333333;} 731 | .nav-tabs>li>a,.nav-tabs>li>a:hover,.tabbable>.nav-tabs>li>a,.tabbable>.nav-tabs>li>a:hover{background-color:#e5e5e5;border:1px solid #ccc;} 732 | .tabbable>.nav-tabs>li.active>a{border-bottom:1px solid transparent;} 733 | .tabbable.tabs-below>.nav-tabs>li.active>a,.tabbable.tabs-left>.nav-tabs>li.active>a,.tabbable.tabs-right>.nav-tabs>li.active>a{border-bottom:1px solid #ccc;} 734 | .nav-pills>li>a:hover{background-color:transparent;} 735 | .nav-tabs>li.active>a,.nav-tabs>li.active>a:hover{background-color:#ededed;} 736 | legend{border-bottom:1px solid #ddd;} 737 | .navbar-search .search-query{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background-color:#ededed;color:#555555;} 738 | .help-inline,.help-block{font-size:11px;} 739 | .btn{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;font-weight:bold;background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);} 740 | .btn-primary{background-color:#4376de;background-image:-moz-linear-gradient(top, #4c7de0, #366ddc);background-image:-ms-linear-gradient(top, #4c7de0, #366ddc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#4c7de0), to(#366ddc));background-image:-webkit-linear-gradient(top, #4c7de0, #366ddc);background-image:-o-linear-gradient(top, #4c7de0, #366ddc);background-image:linear-gradient(top, #4c7de0, #366ddc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#4c7de0', endColorstr='#366ddc', GradientType=0);border-color:#366ddc #366ddc #1d4ba8;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#366ddc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#366ddc;*background-color:#255fd4;} 741 | .btn-primary:active,.btn-primary.active{background-color:#2155be \9;} 742 | .btn-warning{background-color:#ff6f0f;background-image:-moz-linear-gradient(top, #ff751a, #ff6600);background-image:-ms-linear-gradient(top, #ff751a, #ff6600);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ff751a), to(#ff6600));background-image:-webkit-linear-gradient(top, #ff751a, #ff6600);background-image:-o-linear-gradient(top, #ff751a, #ff6600);background-image:linear-gradient(top, #ff751a, #ff6600);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff751a', endColorstr='#ff6600', GradientType=0);border-color:#ff6600 #ff6600 #b34700;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#ff6600;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#ff6600;*background-color:#e65c00;} 743 | .btn-warning:active,.btn-warning.active{background-color:#cc5200 \9;} 744 | .btn-danger{background-color:#e53a48;background-image:-moz-linear-gradient(top, #e64350, #e32c3b);background-image:-ms-linear-gradient(top, #e64350, #e32c3b);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e64350), to(#e32c3b));background-image:-webkit-linear-gradient(top, #e64350, #e32c3b);background-image:-o-linear-gradient(top, #e64350, #e32c3b);background-image:linear-gradient(top, #e64350, #e32c3b);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e64350', endColorstr='#e32c3b', GradientType=0);border-color:#e32c3b #e32c3b #ac1723;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e32c3b;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#e32c3b;*background-color:#d91d2c;} 745 | .btn-danger:active,.btn-danger.active{background-color:#c21a28 \9;} 746 | .btn-success{background-color:#43a300;background-image:-moz-linear-gradient(top, #48ae00, #3d9400);background-image:-ms-linear-gradient(top, #48ae00, #3d9400);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#48ae00), to(#3d9400));background-image:-webkit-linear-gradient(top, #48ae00, #3d9400);background-image:-o-linear-gradient(top, #48ae00, #3d9400);background-image:linear-gradient(top, #48ae00, #3d9400);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#48ae00', endColorstr='#3d9400', GradientType=0);border-color:#3d9400 #3d9400 #1d4800;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#3d9400;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#3d9400;*background-color:#327b00;} 747 | .btn-success:active,.btn-success.active{background-color:#286100 \9;} 748 | .btn-info{background-color:#68c5e1;background-image:-moz-linear-gradient(top, #70c8e2, #5bc0de);background-image:-ms-linear-gradient(top, #70c8e2, #5bc0de);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#70c8e2), to(#5bc0de));background-image:-webkit-linear-gradient(top, #70c8e2, #5bc0de);background-image:-o-linear-gradient(top, #70c8e2, #5bc0de);background-image:linear-gradient(top, #70c8e2, #5bc0de);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#70c8e2', endColorstr='#5bc0de', GradientType=0);border-color:#5bc0de #5bc0de #28a1c5;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#5bc0de;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#5bc0de;*background-color:#46b8da;} 749 | .btn-info:active,.btn-info.active{background-color:#31b0d5 \9;} 750 | .btn-inverse{background-color:#a54ca9;background-image:-moz-linear-gradient(top, #ac4fb0, #9b479f);background-image:-ms-linear-gradient(top, #ac4fb0, #9b479f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ac4fb0), to(#9b479f));background-image:-webkit-linear-gradient(top, #ac4fb0, #9b479f);background-image:-o-linear-gradient(top, #ac4fb0, #9b479f);background-image:linear-gradient(top, #ac4fb0, #9b479f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ac4fb0', endColorstr='#9b479f', GradientType=0);border-color:#9b479f #9b479f #672f6a;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#9b479f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#9b479f;*background-color:#8a3f8d;} 751 | .btn-inverse:active,.btn-inverse.active{background-color:#79377c \9;} 752 | .modal,.modal-header,.modal-footer{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} 753 | .modal-header{border-bottom:none;} 754 | .modal-header,.modal-body{background-color:#f3f3f3;} 755 | .modal-footer{background-color:#ededed;} 756 | i[class^="icon-"]{opacity:0.6;vertical-align:-2px;} 757 | .alert,.alert p,.alert-heading{font-size:11px;} 758 | .progress{background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #e0e0e0, #e8e8e8);background-image:-ms-linear-gradient(top, #e0e0e0, #e8e8e8);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e0e0e0), to(#e8e8e8));background-image:-webkit-linear-gradient(top, #e0e0e0, #e8e8e8);background-image:-o-linear-gradient(top, #e0e0e0, #e8e8e8);background-image:linear-gradient(top, #e0e0e0, #e8e8e8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e0e0e0', endColorstr='#e8e8e8', GradientType=0);} 759 | .label{font-size:11px;font-weight:normal;} 760 | .hero-unit{background-color:#ffffff;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);} 761 | .well{-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);background-color:#ffffff;border:none;} 762 | .breadcrumb{-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);box-shadow:0 1px 1px rgba(0, 0, 0, 0.3);border:0px solid transparent;font-size:11px;} 763 | footer.footer p{font-size:11px;} 764 | .pull-right{float:right;} 765 | .pull-left{float:left;} 766 | .hide{display:none;} 767 | .show{display:block;} 768 | .invisible{visibility:hidden;} 769 | -------------------------------------------------------------------------------- /public/lib/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperstudio/MIT-Annotation-Data-Store/4c48c2ebf38b8d05b2cce3a46180ffb9adc3ba64/public/lib/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /public/lib/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperstudio/MIT-Annotation-Data-Store/4c48c2ebf38b8d05b2cce3a46180ffb9adc3ba64/public/lib/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /sample.env: -------------------------------------------------------------------------------- 1 | NODE_ENV=development 2 | PATH=bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin 3 | PORT=5000 4 | SECRET=the-secret-the-annotator-gets-from-the-authorizing-site 5 | CONSUMER=name-of-the-app-on-which-the-annotator-runs 6 | DEV_CONSUMER=localhost 7 | VERSION=2.0 8 | LIVE_DB=mongodb://user:pass@host.yourliveapp.com:12345/dbname 9 | LOCAL_DB=mongodb://localhost:27017 10 | STAGING_DB=mongodb://user:pass@host.yourstagingapp.com:12345/dbname 11 | LOCAL_KEY_PATH='local-data-store.key' 12 | LOCAL_CERT_PATH='local-data-store.cert' -------------------------------------------------------------------------------- /web.js: -------------------------------------------------------------------------------- 1 | // Setup 2 | 3 | const uriFormat = require('mongodb-uri') 4 | function encodeMongoURI(urlString) { 5 | if (urlString) { 6 | let parsed = uriFormat.parse(urlString) 7 | urlString = uriFormat.format(parsed); 8 | } 9 | return urlString; 10 | }; 11 | 12 | 13 | var application_root = __dirname, 14 | environment = process.env.NODE_ENV, 15 | secret = process.env.SECRET, 16 | port = process.env.PORT, 17 | db = encodeMongoURI(process.env.DB), 18 | consumer = process.env.CONSUMER, 19 | version = process.env.VERSION, 20 | local_key = process.env.LOCAL_KEY_PATH, 21 | local_cert = process.env.LOCAL_CERT_PATH, 22 | path = require("path"), 23 | mongoose = require('mongoose'), 24 | lessMiddleware = require('less-middleware'), 25 | jwt = require('jwt-simple'), 26 | express = require("express"), 27 | methodOverride = require('method-override'), 28 | errorhandler = require('errorhandler'), 29 | app = express(); 30 | 31 | // CORS 32 | var allowCrossDomain = function (req, res, next) { 33 | res.header('Access-Control-Allow-Origin', '*'); 34 | res.header('Access-Control-Expose-Headers', 'Content-Length, Content-Type, Location'); 35 | res.header('Access-Control-Allow-Headers', 'Content-Length, Content-Type, X-Annotator-Auth-Token, X-Requested-With'); 36 | res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS'); 37 | res.header('Access-Control-Max-Age', '86400'); 38 | 39 | // intercept OPTIONS method 40 | if ('OPTIONS' == req.method) { 41 | res.status(200); 42 | } 43 | next(); 44 | }; 45 | 46 | 47 | // Schemas 48 | var Schema = mongoose.Schema; 49 | 50 | // Annotation Ranges 51 | var Ranges = new Schema({ 52 | start: { 53 | type: String, 54 | required: true 55 | }, 56 | end: { 57 | type: String, 58 | required: true 59 | }, 60 | startOffset: { 61 | type: Number, 62 | required: false 63 | }, 64 | endOffset: { 65 | type: Number, 66 | required: false 67 | } 68 | }); 69 | 70 | var Shape = new Schema({ 71 | type: { 72 | type: String, 73 | required: true 74 | }, 75 | geometry: { 76 | x: { 77 | type: Number, 78 | required: true 79 | }, 80 | y: { 81 | type: Number, 82 | required: true 83 | }, 84 | width: { 85 | type: Number, 86 | required: true 87 | }, 88 | height: { 89 | type: Number, 90 | required: true 91 | } 92 | } 93 | }); 94 | 95 | // Annotation Model 96 | var Annotation = new Schema({ 97 | id: { 98 | type: String, 99 | required: false 100 | }, 101 | annotator_schema_version: { 102 | type: String, 103 | required: false, 104 | default: version 105 | }, 106 | created: { 107 | type: Date, 108 | default: Date.now() 109 | }, 110 | updated: { 111 | type: Date, 112 | default: Date.now() 113 | }, 114 | user: { 115 | type: String, 116 | required: false 117 | }, 118 | username: { 119 | type: String, 120 | required: false 121 | }, 122 | text: { 123 | type: String, 124 | required: false 125 | }, 126 | quote: { 127 | type: String, 128 | required: false 129 | }, 130 | uri: { 131 | type: String, 132 | required: false 133 | }, 134 | src: { 135 | type: String, 136 | required: false 137 | }, 138 | shapes: [Shape], 139 | uuid: { 140 | type: String, 141 | required: false 142 | }, 143 | parentIndex: { 144 | type: String, 145 | required: false 146 | }, 147 | groups: [String], 148 | group_ids: [Number], 149 | ranges: [Ranges], 150 | tags: [String], 151 | permissions: { 152 | read: [String], 153 | admin: [String], 154 | update: [String], 155 | delete: [String] 156 | }, 157 | annotation_categories: [Number], 158 | sort_position: { 159 | type: String, 160 | required: false 161 | }, 162 | doc_title: { 163 | type: String, 164 | required: false 165 | }, 166 | doc_author: { 167 | type: String, 168 | required: false 169 | }, 170 | doc_date: { 171 | type: String, 172 | required: false 173 | }, 174 | doc_publisher: { 175 | type: String, 176 | required: false 177 | }, 178 | doc_edition: { 179 | type: String, 180 | required: false 181 | }, 182 | doc_source: { 183 | type: String, 184 | required: false 185 | } 186 | }); 187 | 188 | // DB 189 | mongoose.connect(db, { useNewUrlParser: true, useUnifiedTopology: true }).catch(function (err) { 190 | console.log(err); 191 | }); 192 | 193 | mongoose.connection.on('error', err => { 194 | logError(err); 195 | }); 196 | 197 | // Middleware config 198 | app.use(allowCrossDomain); 199 | app.use(express.urlencoded({ 200 | limit: '50mb', 201 | extended: true 202 | })); 203 | app.use(express.json({ limit: '50mb' })); 204 | app.use(methodOverride()); 205 | app.use(lessMiddleware(__dirname + '/public', { 206 | render: { 207 | compress: true 208 | } 209 | })); 210 | 211 | app.use(express.static(path.join(application_root, "public"))); 212 | app.use(errorhandler({ 213 | dumpExceptions: true, 214 | showStack: true 215 | })); 216 | 217 | 218 | Annotation.pre('save', function (next) { 219 | this.id = this._id; 220 | next(); 221 | }); 222 | 223 | var AnnotationModel = mongoose.model('Annotation', Annotation); 224 | 225 | 226 | // ROUTES 227 | app.get('/api', function (req, res) { 228 | res.send('Annotations API is running'); 229 | }); 230 | 231 | // Search annotations 232 | app.get('/api/search', tokenOK, function (req, res) { 233 | console.log('searching...'); 234 | var query; 235 | var re = new RegExp(req.query.host, 'i'); 236 | var exd = req.query.uri; 237 | if (req.query.uri) { 238 | exd = req.query.uri.replace('https://', '').replace('http://', '').replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); 239 | } 240 | switch (req.query.context) { 241 | case 'document': 242 | if (exd) { 243 | query = AnnotationModel.find({ 244 | 'uri': { $regex: exd, $options: "i" } 245 | }); 246 | } 247 | break; 248 | case 'dashboard': 249 | query = AnnotationModel.find(); 250 | query.where('uri').regex(re); 251 | break; 252 | case 'public': 253 | query = AnnotationModel.find(); 254 | var pattern = new RegExp("\/public\/(.+)$", 'i'); 255 | if (req.query.uri) { 256 | var match = pattern.exec(req.query.uri.replace(/\/$/, '')); 257 | var slug = match[1]; 258 | query.where('uri').regex(new RegExp(slug, "i")); 259 | } 260 | break; 261 | case 'search': 262 | query = AnnotationModel.find(); 263 | query.where('uri').regex(re); 264 | if (exd) { 265 | query.where('uri').regex(new RegExp(exd, 'i')); 266 | } 267 | break; 268 | } 269 | if (query == undefined) { 270 | // throw err 271 | // else do below 272 | } 273 | switch (req.query.mode) { 274 | case 'user': 275 | query.where('user').equals(req.query.user); 276 | break; 277 | case 'class': 278 | if (req.query.groups) { 279 | var clean_groups = req.query.groups; 280 | var index = clean_groups.indexOf(""); 281 | if (index > -1) clean_groups.splice(index, 1); 282 | query.where('groups').in(clean_groups); 283 | } 284 | else { 285 | query.where('groups').in([]); 286 | } 287 | query.where('permissions.read').equals([]); 288 | break; 289 | case 'groupId': 290 | if (req.query.group_ids) { 291 | query.where('group_ids').in(req.query.group_ids); 292 | } 293 | else { 294 | query.where('group_ids').in([]); 295 | } 296 | query.where('permissions.read').equals([]); 297 | break; 298 | case 'admin': 299 | query.where('permissions.read').equals([]); 300 | break; 301 | // for annotations search by other users: 302 | case 'userSearch': 303 | query.where('user').equals(req.query.user); 304 | query.where('permissions.read').equals([]); 305 | break; 306 | } 307 | 308 | if (req.query.tags) { 309 | query.where('tags').in(req.query.tags); 310 | } 311 | if (req.query.multiUser) { 312 | query.where('user').in(req.query.multiUser); 313 | } 314 | if (req.query.annotation_categories) { 315 | query.where('annotation_categories').in(req.query.annotation_categories); 316 | } 317 | 318 | if (req.query.anno_ids) { 319 | query.where('_id').in(req.query.anno_ids); 320 | } 321 | 322 | if (req.query.limit) { 323 | query.sort({ 'created': -1 }).limit(Number(req.query.limit)); 324 | } 325 | 326 | if (req.query.sidebar || req.query.context == "dashboard" || req.query.context == "search") { 327 | query.exec(function (err, annotations) { 328 | if (!err) { 329 | if (annotations.length > 0) { 330 | return res.send(annotations); 331 | } 332 | else { 333 | res.status(204); 334 | return res.send('empty'); 335 | } 336 | } 337 | else { 338 | console.log(err); 339 | return res.send(err); 340 | } 341 | }); 342 | } 343 | else { 344 | query.exec(function (err, annotations) { 345 | if (!err) { 346 | if (annotations.length > 0) { 347 | return res.send({ 348 | 'rows': annotations 349 | }); 350 | } 351 | else { 352 | res.status(204); 353 | return res.send('empty'); 354 | } 355 | } 356 | else { 357 | console.log(err); 358 | return res.send(err); 359 | } 360 | }); 361 | } 362 | }); 363 | 364 | 365 | // Search annotations by multiple IDs (with POST) 366 | app.post('/api/search', tokenOK, function (req, res) { 367 | console.log('searching...'); 368 | var query; 369 | if (req.query.host) { 370 | var re = new RegExp(req.query.host, 'i'); 371 | query = AnnotationModel.find(); 372 | query.where('uri').regex(re); 373 | if (req.body.anno_ids) { 374 | query.where('_id').in(req.body.anno_ids); 375 | query.exec(function (err, annotations) { 376 | if (!err) { 377 | if (annotations.length > 0) { 378 | return res.send(annotations); 379 | } 380 | else { 381 | res.status(204); 382 | return res.send('empty'); 383 | } 384 | } 385 | else { 386 | console.log(err); 387 | return res.send(err); 388 | } 389 | }); 390 | } else { 391 | res.status(204); 392 | return res.send('empty'); 393 | } 394 | } else { 395 | res.status(404); 396 | return res.send('not found'); 397 | } 398 | }) 399 | 400 | 401 | // List annotations 402 | app.get('/api/annotations', tokenOK, function (req, res) { 403 | return AnnotationModel.find(function (err, annotations) { 404 | if (!err) { 405 | return res.send(annotations); 406 | } else { 407 | console.log(err); 408 | return res.send(err); 409 | } 410 | }); 411 | }); 412 | 413 | // Single annotation 414 | app.get('/api/annotations/:id', tokenOK, function (req, res) { 415 | return AnnotationModel.findById(req.params.id, function (err, annotation) { 416 | if (!err) { 417 | return res.send(annotation); 418 | } else { 419 | console.log(err); 420 | return res.send(err); 421 | } 422 | }); 423 | }); 424 | 425 | // POST to CREATE 426 | app.post('/api/annotations', tokenOK, function (req, res) { 427 | var annotation; 428 | console.log("POST: "); 429 | console.log(req.body); 430 | annotation = new AnnotationModel({ 431 | user: req.body.user, 432 | username: req.body.username, 433 | consumer: "annotationstudio.mit.edu", 434 | annotator_schema_version: req.body.annotator_schema_version, 435 | created: Date.now(), 436 | updated: Date.now(), 437 | text: req.body.text, 438 | uri: req.body.uri, 439 | src: req.body.src, 440 | quote: req.body.quote, 441 | tags: req.body.tags, 442 | groups: req.body.groups, 443 | group_ids: req.body.group_ids, 444 | uuid: req.body.uuid, 445 | parentIndex: req.body.parentIndex, 446 | ranges: req.body.ranges, 447 | shapes: req.body.shapes, 448 | permissions: req.body.permissions, 449 | annotation_categories: req.body.annotation_categories, 450 | sort_position: req.body.sort_position, 451 | doc_title: req.body.doc_title, 452 | doc_author: req.body.doc_author, 453 | doc_date: req.body.doc_date, 454 | doc_publisher: req.body.doc_publisher, 455 | doc_edition: req.body.doc_edition, 456 | doc_source: req.body.doc_source 457 | }); 458 | 459 | annotation.save(function (err) { 460 | if (!err) { 461 | return console.log("Created annotation with uuid: " + req.body.uuid); 462 | } else { 463 | return console.log(err); 464 | } 465 | }); 466 | annotation.id = annotation._id; 467 | return res.send(annotation); 468 | }); 469 | 470 | app.post('/api/annotations/positions', tokenOK, function (req, res) { 471 | for (annotation_id in req.body.sort_positions) { 472 | AnnotationModel.update({ uuid: annotation_id }, { $set: { sort_position: req.body.sort_positions[annotation_id] } }, function () { }); 473 | } 474 | res.send('Positions have been updated'); 475 | }); 476 | 477 | // PUT to UPDATE 478 | // Single update 479 | app.put('/api/annotations/:id', tokenOK, function (req, res) { 480 | console.log("PUT: "); 481 | console.log(req.body); 482 | return AnnotationModel.findById(req.params.id, function (err, annotation) { 483 | annotation._id = req.body._id; 484 | annotation.id = req.body._id; 485 | annotation.user = req.body.user; 486 | annotation.username = req.body.username; 487 | annotation.consumer = req.body.consumer; 488 | annotation.annotator_schema_version = req.body.annotator_schema_version; 489 | annotation.created = req.body.created; 490 | annotation.updated = Date.now(); 491 | annotation.text = req.body.text; 492 | annotation.uri = req.body.uri; 493 | annotation.url = req.body.url; 494 | annotation.shapes = req.body.shapes; 495 | annotation.quote = req.body.quote; 496 | annotation.tags = req.body.tags; 497 | annotation.groups = req.body.groups; 498 | annotation.group_ids = req.body.group_ids; 499 | annotation.uuid = req.body.uuid; 500 | annotation.parentIndex = req.body.parentIndex; 501 | annotation.ranges = req.body.ranges; 502 | annotation.permissions = req.body.permissions; 503 | annotation.annotation_categories = req.body.annotation_categories; 504 | annotation.sort_position = req.body.sort_position; 505 | annotation.doc_title = req.body.doc_title; 506 | annotation.doc_author = req.body.doc_author; 507 | annotation.doc_date = req.body.doc_date; 508 | annotation.doc_publisher = req.body.doc_publisher; 509 | annotation.doc_edition = req.body.doc_edition; 510 | annotation.doc_source = req.body.doc_source; 511 | if (!err) { 512 | return annotation.save(function (err) { 513 | if (!err) { 514 | console.log("updated"); 515 | } else { 516 | console.log(err); 517 | } 518 | return res.send(annotation); 519 | }); 520 | } 521 | else { 522 | console.log(err); 523 | return err; 524 | } 525 | }); 526 | }); 527 | 528 | // Remove an annotation 529 | app.delete('/api/annotations/:id', tokenOK, function (req, res) { 530 | return AnnotationModel.findById(req.params.id, function (err, annotation) { 531 | return annotation.remove(function (err) { 532 | if (!err) { 533 | console.log("removed"); 534 | res.status(204); 535 | return res.send('empty'); 536 | } else { 537 | console.log(err); 538 | return res.send(err); 539 | } 540 | }); 541 | }); 542 | }); 543 | 544 | 545 | // Authentication 546 | function tokenOK(req, res, next) { 547 | try { 548 | var decoded = jwt.decode(req.header('x-annotator-auth-token'), secret); 549 | if (inWindow(decoded)) { 550 | console.log("Token in time window"); 551 | } else { 552 | console.log("Token not in in time window."); 553 | } 554 | next(); 555 | } catch (err) { 556 | console.log("Error decoding token:"); 557 | if (req.header('x-annotator-auth-token') != undefined) 558 | console.log("header: " + req.header('x-annotator-auth-token')); 559 | else 560 | console.log('x-annotator-auth-token header == undefined'); 561 | console.log(err); 562 | return res.send("There was a problem with your authentication token"); 563 | } 564 | }; 565 | 566 | function inWindow(decoded, next) { 567 | var issuedAt = decoded.issuedAt; 568 | var ttl = decoded.ttl; 569 | var issuedSeconds = new Date(issuedAt) / 1000; 570 | var nowSeconds = new Date().getTime() / 1000; 571 | var diff = ((nowSeconds - issuedSeconds)); 572 | var result = (ttl - diff); 573 | console.log("Time left on token: about " + Math.floor(result / (60 * 60)) + " hours."); 574 | return ((result > 0) ? true : false); 575 | } 576 | 577 | // launch server 578 | 579 | // dev env = local SSL 580 | if (environment == "development") { 581 | const fs = require('fs'), 582 | https = require('https'); 583 | https.createServer({ 584 | key: fs.readFileSync(local_key), 585 | cert: fs.readFileSync(local_cert) 586 | }, app) 587 | .listen(port, function () { 588 | console.log('Listening on SSL port: ' + port) 589 | }) 590 | } 591 | // prod env = server handles SSL 592 | else { 593 | app.listen(port, function () { 594 | console.log("Listening on " + port); 595 | }); 596 | } --------------------------------------------------------------------------------