├── Dockerfile ├── LICENSE ├── index.html ├── package.json ├── public ├── app.js ├── bootstrap-glyphicons.css ├── bootstrap.css ├── bootstrap.min.css ├── vue-resource.js └── vue.js ├── readme.md └── server.go /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang 2 | 3 | RUN mkdir /app 4 | ADD . /app 5 | WORKDIR /app 6 | RUN go get github.com/gorilla/mux 7 | RUN go build -o main . 8 | CMD ["/app/main"] 9 | COPY . . 10 | 11 | EXPOSE 8080 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Suraj Patil 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Vue Cal 6 | 7 | 15 | 16 | 17 | 18 | 23 |
24 |
25 |
26 |
27 |

Add an Event

28 |
29 |
30 |
31 | 32 | 33 | 34 | 35 |
36 |
37 |
38 |
39 |
40 |
41 | 42 |
43 |
44 |
45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-event-bulletin", 3 | "version": "1.0.0", 4 | "description": "Demo application for the scotch.io tutorial", 5 | "main": "server.js", 6 | "author": "Ryan Chenkie, Jason Lam", 7 | "license": "MIT", 8 | "dependencies": { 9 | "bootstrap": "^3.3.7", 10 | "ejs": "^2.3.4", 11 | "express": "^4.13.3", 12 | "morgan": "^1.6.1", 13 | "vue": "^1.0.28", 14 | "vue-resource": "^0.1.17" 15 | }, 16 | "devDependencies": { 17 | "body-parser": "^1.14.1", 18 | "errorhandler": "^1.4.2", 19 | "method-override": "^2.3.5", 20 | "morgan": "^1.6.1" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /public/app.js: -------------------------------------------------------------------------------- 1 | // var Vue = require('vue'); 2 | 3 | Vue.component('event-item', { 4 | props: ['event', 'index'], 5 | template:'\ 6 | \ 7 |

{{event.title }}

\ 8 |
{{ event.date }}
\ 9 |

{{ event.detail }}

\ 10 |
', 11 | methods: { 12 | deleteEvent: function (index) { 13 | if (confirm('Really want to delete?')) { 14 | console.log(index); 15 | this.$http.delete('/api/events/' + index) 16 | .then(response => response) 17 | .then( result =>{ 18 | console.log(result); 19 | app.events.splice(index, 1); 20 | }).catch( err => { 21 | console.log(err); 22 | alert("unable to delete") 23 | }); 24 | } 25 | } 26 | } 27 | }); 28 | 29 | var app = new Vue({ 30 | el: '#events', 31 | 32 | data: { 33 | event: { title: '', detail: '', date: '' }, 34 | events: [] 35 | }, 36 | delimiters: ['${', '}'], 37 | 38 | 39 | mounted: function () { 40 | this.fetchEvents(); 41 | }, 42 | 43 | methods: { 44 | 45 | fetchEvents: function () { 46 | var events = []; 47 | this.$http.get('/api/events/') 48 | .then(response => response.json()) 49 | .then(result => { 50 | Vue.set(this.$data, 'events', result); 51 | console.log("success in getting events") 52 | }) 53 | .catch(err => { 54 | console.log(err); 55 | }); 56 | }, 57 | 58 | addEvent: function () { 59 | if (this.event.title.trim()) { 60 | // this.events.push(this.event); 61 | // this.event = { title: '', detail: '', date: '' }; 62 | this.$http.post('/api/events/', this.event,{emulateJSON: true}) 63 | .then(response => response) 64 | .then( result => { 65 | this.events.push(this.event); 66 | console.log('Event added!'); 67 | this.event = { title: '', detail: '', date: '' }; 68 | }).catch( err => { 69 | console.log(err); 70 | }); 71 | } 72 | 73 | } 74 | } 75 | }); 76 | -------------------------------------------------------------------------------- /public/bootstrap-glyphicons.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphiconshalflings-regular.eot');src:url('../fonts/glyphiconshalflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphiconshalflings-regular.woff') format('woff'),url('../fonts/glyphiconshalflings-regular.ttf') format('truetype'),url('../fonts/glyphiconshalflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon:before{font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-plus:before{content:"\002b"}.glyphicon-minus:before{content:"\2212"}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse:before{content:"\e159"}.glyphicon-collapse-top:before{content:"\e160"} 2 | /* This beautiful CSS-File has been crafted with LESS (lesscss.org) and compiled by simpLESS (wearekiss.com/simpless) */ 3 | -------------------------------------------------------------------------------- /public/bootstrap.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.0.0 3 | * 4 | * Copyright 2013 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world by @mdo and @fat. 9 | *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{ 10 | display:block 11 | } 12 | 13 | 14 | audio,canvas,video{ 15 | display:inline-block 16 | } 17 | 18 | audio:not([controls]){ 19 | display:none; 20 | height:0 21 | } 22 | 23 | [hidden]{ 24 | display:none 25 | } 26 | 27 | html{ 28 | font-family:sans-serif; 29 | -webkit-text-size-adjust:100%; 30 | -ms-text-size-adjust:100% 31 | } 32 | 33 | body{ 34 | margin:0 35 | } 36 | 37 | a:focus{ 38 | outline:thin dotted 39 | } 40 | 41 | a:active,a:hover{ 42 | outline:0 43 | } 44 | 45 | h1{ 46 | margin:.67em 0; 47 | font-size:2em 48 | } 49 | 50 | abbr[title]{ 51 | border-bottom:1px dotted 52 | } 53 | 54 | b,strong{ 55 | font-weight:bold 56 | } 57 | 58 | dfn{ 59 | font-style:italic 60 | } 61 | 62 | hr{ 63 | height:0; 64 | -moz-box-sizing:content-box; 65 | box-sizing:content-box 66 | } 67 | 68 | mark{ 69 | color:#000; 70 | background:#ff0 71 | } 72 | 73 | code,kbd,pre,samp{ 74 | font-family:monospace,serif; 75 | font-size:1em 76 | } 77 | 78 | pre{ 79 | white-space:pre-wrap 80 | } 81 | 82 | q{ 83 | quotes:"\201C" "\201D" "\2018" "\2019" 84 | } 85 | 86 | small{ 87 | font-size:80% 88 | } 89 | 90 | sub,sup{ 91 | position:relative; 92 | font-size:75%; 93 | line-height:0; 94 | vertical-align:baseline 95 | } 96 | 97 | sup{ 98 | top:-0.5em 99 | } 100 | 101 | sub{ 102 | bottom:-0.25em 103 | } 104 | 105 | img{ 106 | border:0 107 | } 108 | 109 | svg:not(:root){ 110 | overflow:hidden 111 | } 112 | 113 | figure{ 114 | margin:0 115 | } 116 | 117 | fieldset{ 118 | padding:.35em .625em .75em; 119 | margin:0 2px; 120 | border:1px solid #c0c0c0 121 | } 122 | 123 | legend{ 124 | padding:0; 125 | border:0 126 | } 127 | 128 | button,input,select,textarea{ 129 | margin:0; 130 | font-family:inherit; 131 | font-size:100% 132 | } 133 | 134 | button,input{ 135 | line-height:normal 136 | } 137 | 138 | button,select{ 139 | text-transform:none 140 | } 141 | 142 | button,html input[type="button"],input[type="reset"],input[type="submit"]{ 143 | cursor:pointer; 144 | -webkit-appearance:button 145 | } 146 | 147 | button[disabled],html input[disabled]{ 148 | cursor:default 149 | } 150 | 151 | input[type="checkbox"],input[type="radio"]{ 152 | padding:0; 153 | box-sizing:border-box 154 | } 155 | 156 | input[type="search"]{ 157 | -webkit-box-sizing:content-box; 158 | -moz-box-sizing:content-box; 159 | box-sizing:content-box; 160 | -webkit-appearance:textfield 161 | } 162 | 163 | input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{ 164 | -webkit-appearance:none 165 | } 166 | 167 | button::-moz-focus-inner,input::-moz-focus-inner{ 168 | padding:0; 169 | border:0 170 | } 171 | 172 | textarea{ 173 | overflow:auto; 174 | vertical-align:top 175 | } 176 | 177 | table{ 178 | border-collapse:collapse; 179 | border-spacing:0 180 | } 181 | 182 | @media print{ 183 | *{ 184 | color:#000!important; 185 | text-shadow:none!important; 186 | background:transparent!important; 187 | box-shadow:none!important 188 | } 189 | 190 | a,a:visited{ 191 | text-decoration:underline 192 | } 193 | 194 | a[href]:after{ 195 | content:" (" attr(href) ")" 196 | } 197 | 198 | abbr[title]:after{ 199 | content:" (" attr(title) ")" 200 | } 201 | 202 | .ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{ 203 | content:"" 204 | } 205 | 206 | pre,blockquote{ 207 | border:1px solid #999; 208 | page-break-inside:avoid 209 | } 210 | 211 | thead{ 212 | display:table-header-group 213 | } 214 | 215 | tr,img{ 216 | page-break-inside:avoid 217 | } 218 | 219 | img{ 220 | max-width:100%!important 221 | } 222 | 223 | @page{ 224 | margin:2cm .5cm 225 | } 226 | 227 | p,h2,h3{ 228 | orphans:3; 229 | widows:3 230 | } 231 | 232 | h2,h3{ 233 | page-break-after:avoid 234 | } 235 | 236 | .navbar{ 237 | display:none 238 | } 239 | 240 | .table td,.table th{ 241 | background-color:#fff!important 242 | } 243 | 244 | .btn>.caret,.dropup>.btn>.caret{ 245 | border-top-color:#000!important 246 | } 247 | 248 | .label{ 249 | border:1px solid #000 250 | } 251 | 252 | .table{ 253 | border-collapse:collapse!important 254 | } 255 | 256 | .table-bordered th,.table-bordered td{ 257 | border:1px solid #ddd!important 258 | } 259 | 260 | } 261 | 262 | *{ 263 | -webkit-box-sizing:border-box; 264 | -moz-box-sizing:border-box; 265 | box-sizing:border-box 266 | } 267 | 268 | html{ 269 | font-size:62.5%; 270 | -webkit-tap-highlight-color:rgba(0,0,0,0) 271 | } 272 | 273 | body{ 274 | font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; 275 | font-size:14px; 276 | line-height:1.428571429; 277 | color:#333; 278 | background-color:#fff 279 | } 280 | 281 | input,button,select,textarea{ 282 | font-family:inherit; 283 | font-size:inherit; 284 | line-height:inherit 285 | } 286 | 287 | a{ 288 | color:#428bca; 289 | text-decoration:none 290 | } 291 | 292 | a:hover,a:focus{ 293 | color:#2a6496; 294 | text-decoration:underline 295 | } 296 | 297 | a:focus{ 298 | outline:thin dotted #333; 299 | outline:5px auto -webkit-focus-ring-color; 300 | outline-offset:-2px 301 | } 302 | 303 | img{ 304 | vertical-align:middle 305 | } 306 | 307 | .img-responsive{ 308 | display:inline-block; 309 | height:auto; 310 | max-width:100% 311 | } 312 | 313 | .img-rounded{ 314 | border-radius:6px 315 | } 316 | 317 | .img-circle{ 318 | border-radius:500px 319 | } 320 | 321 | hr{ 322 | margin-top:20px; 323 | margin-bottom:20px; 324 | border:0; 325 | border-top:1px solid #eee 326 | } 327 | 328 | p{ 329 | margin:0 0 10px 330 | } 331 | 332 | .lead{ 333 | margin-bottom:20px; 334 | font-size:16.099999999999998px; 335 | font-weight:200; 336 | line-height:1.4 337 | } 338 | 339 | @media(min-width:768px){ 340 | .lead{ 341 | font-size:21px 342 | } 343 | 344 | } 345 | 346 | small{ 347 | font-size:85% 348 | } 349 | 350 | cite{ 351 | font-style:normal 352 | } 353 | 354 | .text-muted{ 355 | color:#999 356 | } 357 | 358 | .text-primary{ 359 | color:#428bca 360 | } 361 | 362 | .text-warning{ 363 | color:#c09853 364 | } 365 | 366 | .text-danger{ 367 | color:#b94a48 368 | } 369 | 370 | .text-success{ 371 | color:#468847 372 | } 373 | 374 | .text-info{ 375 | color:#3a87ad 376 | } 377 | 378 | .text-left{ 379 | text-align:left 380 | } 381 | 382 | .text-right{ 383 | text-align:right 384 | } 385 | 386 | .text-center{ 387 | text-align:center 388 | } 389 | 390 | h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{ 391 | font-family:"Helvetica Neue",Helvetica,Arial,sans-serif; 392 | font-weight:500; 393 | line-height:1.1 394 | } 395 | 396 | h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{ 397 | font-weight:normal; 398 | line-height:1; 399 | color:#999 400 | } 401 | 402 | h1,h2,h3{ 403 | margin-top:20px; 404 | margin-bottom:10px 405 | } 406 | 407 | h4,h5,h6{ 408 | margin-top:10px; 409 | margin-bottom:10px 410 | } 411 | 412 | h1,.h1{ 413 | font-size:38px 414 | } 415 | 416 | h2,.h2{ 417 | font-size:32px 418 | } 419 | 420 | h3,.h3{ 421 | font-size:24px 422 | } 423 | 424 | h4,.h4{ 425 | font-size:18px 426 | } 427 | 428 | h5,.h5{ 429 | font-size:14px 430 | } 431 | 432 | h6,.h6{ 433 | font-size:12px 434 | } 435 | 436 | h1 small,.h1 small{ 437 | font-size:24px 438 | } 439 | 440 | h2 small,.h2 small{ 441 | font-size:18px 442 | } 443 | 444 | h3 small,.h3 small,h4 small,.h4 small{ 445 | font-size:14px 446 | } 447 | 448 | .page-header{ 449 | padding-bottom:9px; 450 | margin:40px 0 20px; 451 | border-bottom:1px solid #eee 452 | } 453 | 454 | ul,ol{ 455 | margin-top:0; 456 | margin-bottom:10px 457 | } 458 | 459 | ul ul,ol ul,ul ol,ol ol{ 460 | margin-bottom:0 461 | } 462 | 463 | .list-unstyled{ 464 | padding-left:0; 465 | list-style:none 466 | } 467 | 468 | .list-inline{ 469 | padding-left:0; 470 | list-style:none 471 | } 472 | 473 | .list-inline>li{ 474 | display:inline-block; 475 | padding-right:5px; 476 | padding-left:5px 477 | } 478 | 479 | dl{ 480 | margin-bottom:20px 481 | } 482 | 483 | dt,dd{ 484 | line-height:1.428571429 485 | } 486 | 487 | dt{ 488 | font-weight:bold 489 | } 490 | 491 | dd{ 492 | margin-left:0 493 | } 494 | 495 | .dl-horizontal dt{ 496 | float:left; 497 | width:160px; 498 | overflow:hidden; 499 | clear:left; 500 | text-align:right; 501 | text-overflow:ellipsis; 502 | white-space:nowrap 503 | } 504 | 505 | .dl-horizontal dd{ 506 | margin-left:180px 507 | } 508 | 509 | .dl-horizontal dd:before,.dl-horizontal dd:after{ 510 | display:table; 511 | content:" " 512 | } 513 | 514 | .dl-horizontal dd:after{ 515 | clear:both 516 | } 517 | 518 | .dl-horizontal dd:before,.dl-horizontal dd:after{ 519 | display:table; 520 | content:" " 521 | } 522 | 523 | .dl-horizontal dd:after{ 524 | clear:both 525 | } 526 | 527 | abbr[title],abbr[data-original-title]{ 528 | cursor:help; 529 | border-bottom:1px dotted #999 530 | } 531 | 532 | abbr.initialism{ 533 | font-size:90%; 534 | text-transform:uppercase 535 | } 536 | 537 | blockquote{ 538 | padding:10px 20px; 539 | margin:0 0 20px; 540 | border-left:5px solid #eee 541 | } 542 | 543 | blockquote p{ 544 | font-size:17.5px; 545 | font-weight:300; 546 | line-height:1.25 547 | } 548 | 549 | blockquote p:last-child{ 550 | margin-bottom:0 551 | } 552 | 553 | blockquote small{ 554 | display:block; 555 | line-height:1.428571429; 556 | color:#999 557 | } 558 | 559 | blockquote small:before{ 560 | content:'\2014 \00A0' 561 | } 562 | 563 | blockquote.pull-right{ 564 | float:right; 565 | padding-right:15px; 566 | padding-left:0; 567 | border-right:5px solid #eee; 568 | border-left:0 569 | } 570 | 571 | blockquote.pull-right p,blockquote.pull-right small{ 572 | text-align:right 573 | } 574 | 575 | blockquote.pull-right small:before{ 576 | content:'' 577 | } 578 | 579 | blockquote.pull-right small:after{ 580 | content:'\00A0 \2014' 581 | } 582 | 583 | q:before,q:after,blockquote:before,blockquote:after{ 584 | content:"" 585 | } 586 | 587 | address{ 588 | display:block; 589 | margin-bottom:20px; 590 | font-style:normal; 591 | line-height:1.428571429 592 | } 593 | 594 | code,pre{ 595 | font-family:Monaco,Menlo,Consolas,"Courier New",monospace 596 | } 597 | 598 | code{ 599 | padding:2px 4px; 600 | font-size:90%; 601 | color:#c7254e; 602 | white-space:nowrap; 603 | background-color:#f9f2f4; 604 | border-radius:4px 605 | } 606 | 607 | pre{ 608 | display:block; 609 | padding:9.5px; 610 | margin:0 0 10px; 611 | font-size:13px; 612 | line-height:1.428571429; 613 | color:#333; 614 | word-break:break-all; 615 | word-wrap:break-word; 616 | background-color:#f5f5f5; 617 | border:1px solid #ccc; 618 | border-radius:4px 619 | } 620 | 621 | pre.prettyprint{ 622 | margin-bottom:20px 623 | } 624 | 625 | pre code{ 626 | padding:0; 627 | color:inherit; 628 | white-space:pre-wrap; 629 | background-color:transparent; 630 | border:0 631 | } 632 | 633 | .pre-scrollable{ 634 | max-height:340px; 635 | overflow-y:scroll 636 | } 637 | 638 | .container{ 639 | margin-right:auto; 640 | margin-left:auto 641 | } 642 | 643 | .container:before,.container:after{ 644 | display:table; 645 | content:" " 646 | } 647 | 648 | .container:after{ 649 | clear:both 650 | } 651 | 652 | .container:before,.container:after{ 653 | display:table; 654 | content:" " 655 | } 656 | 657 | .container:after{ 658 | clear:both 659 | } 660 | 661 | .row:before,.row:after{ 662 | display:table; 663 | content:" " 664 | } 665 | 666 | .row:after{ 667 | clear:both 668 | } 669 | 670 | .row:before,.row:after{ 671 | display:table; 672 | content:" " 673 | } 674 | 675 | .row:after{ 676 | clear:both 677 | } 678 | 679 | @media(min-width:768px){ 680 | .row{ 681 | margin-right:-15px; 682 | margin-left:-15px 683 | } 684 | 685 | } 686 | 687 | .row .row{ 688 | margin-right:-15px; 689 | margin-left:-15px 690 | } 691 | 692 | .col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{ 693 | position:relative; 694 | min-height:1px; 695 | padding-right:15px; 696 | padding-left:15px 697 | } 698 | 699 | .col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{ 700 | float:left 701 | } 702 | 703 | .col-1{ 704 | width:8.333333333333332% 705 | } 706 | 707 | .col-2{ 708 | width:16.666666666666664% 709 | } 710 | 711 | .col-3{ 712 | width:25% 713 | } 714 | 715 | .col-4{ 716 | width:33.33333333333333% 717 | } 718 | 719 | .col-5{ 720 | width:41.66666666666667% 721 | } 722 | 723 | .col-6{ 724 | width:50% 725 | } 726 | 727 | .col-7{ 728 | width:58.333333333333336% 729 | } 730 | 731 | .col-8{ 732 | width:66.66666666666666% 733 | } 734 | 735 | .col-9{ 736 | width:75% 737 | } 738 | 739 | .col-10{ 740 | width:83.33333333333334% 741 | } 742 | 743 | .col-11{ 744 | width:91.66666666666666% 745 | } 746 | 747 | .col-12{ 748 | width:100% 749 | } 750 | 751 | @media(min-width:768px){ 752 | .container{ 753 | max-width:728px 754 | } 755 | 756 | .col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{ 757 | float:left 758 | } 759 | 760 | .col-sm-1{ 761 | width:8.333333333333332% 762 | } 763 | 764 | .col-sm-2{ 765 | width:16.666666666666664% 766 | } 767 | 768 | .col-sm-3{ 769 | width:25% 770 | } 771 | 772 | .col-sm-4{ 773 | width:33.33333333333333% 774 | } 775 | 776 | .col-sm-5{ 777 | width:41.66666666666667% 778 | } 779 | 780 | .col-sm-6{ 781 | width:50% 782 | } 783 | 784 | .col-sm-7{ 785 | width:58.333333333333336% 786 | } 787 | 788 | .col-sm-8{ 789 | width:66.66666666666666% 790 | } 791 | 792 | .col-sm-9{ 793 | width:75% 794 | } 795 | 796 | .col-sm-10{ 797 | width:83.33333333333334% 798 | } 799 | 800 | .col-sm-11{ 801 | width:91.66666666666666% 802 | } 803 | 804 | .col-sm-12{ 805 | width:100% 806 | } 807 | 808 | .col-push-1{ 809 | left:8.333333333333332% 810 | } 811 | 812 | .col-push-2{ 813 | left:16.666666666666664% 814 | } 815 | 816 | .col-push-3{ 817 | left:25% 818 | } 819 | 820 | .col-push-4{ 821 | left:33.33333333333333% 822 | } 823 | 824 | .col-push-5{ 825 | left:41.66666666666667% 826 | } 827 | 828 | .col-push-6{ 829 | left:50% 830 | } 831 | 832 | .col-push-7{ 833 | left:58.333333333333336% 834 | } 835 | 836 | .col-push-8{ 837 | left:66.66666666666666% 838 | } 839 | 840 | .col-push-9{ 841 | left:75% 842 | } 843 | 844 | .col-push-10{ 845 | left:83.33333333333334% 846 | } 847 | 848 | .col-push-11{ 849 | left:91.66666666666666% 850 | } 851 | 852 | .col-pull-1{ 853 | right:8.333333333333332% 854 | } 855 | 856 | .col-pull-2{ 857 | right:16.666666666666664% 858 | } 859 | 860 | .col-pull-3{ 861 | right:25% 862 | } 863 | 864 | .col-pull-4{ 865 | right:33.33333333333333% 866 | } 867 | 868 | .col-pull-5{ 869 | right:41.66666666666667% 870 | } 871 | 872 | .col-pull-6{ 873 | right:50% 874 | } 875 | 876 | .col-pull-7{ 877 | right:58.333333333333336% 878 | } 879 | 880 | .col-pull-8{ 881 | right:66.66666666666666% 882 | } 883 | 884 | .col-pull-9{ 885 | right:75% 886 | } 887 | 888 | .col-pull-10{ 889 | right:83.33333333333334% 890 | } 891 | 892 | .col-pull-11{ 893 | right:91.66666666666666% 894 | } 895 | 896 | } 897 | 898 | @media(min-width:992px){ 899 | .container{ 900 | max-width:940px 901 | } 902 | 903 | .col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{ 904 | float:left 905 | } 906 | 907 | .col-lg-1{ 908 | width:8.333333333333332% 909 | } 910 | 911 | .col-lg-2{ 912 | width:16.666666666666664% 913 | } 914 | 915 | .col-lg-3{ 916 | width:25% 917 | } 918 | 919 | .col-lg-4{ 920 | width:33.33333333333333% 921 | } 922 | 923 | .col-lg-5{ 924 | width:41.66666666666667% 925 | } 926 | 927 | .col-lg-6{ 928 | width:50% 929 | } 930 | 931 | .col-lg-7{ 932 | width:58.333333333333336% 933 | } 934 | 935 | .col-lg-8{ 936 | width:66.66666666666666% 937 | } 938 | 939 | .col-lg-9{ 940 | width:75% 941 | } 942 | 943 | .col-lg-10{ 944 | width:83.33333333333334% 945 | } 946 | 947 | .col-lg-11{ 948 | width:91.66666666666666% 949 | } 950 | 951 | .col-lg-12{ 952 | width:100% 953 | } 954 | 955 | .col-offset-1{ 956 | margin-left:8.333333333333332% 957 | } 958 | 959 | .col-offset-2{ 960 | margin-left:16.666666666666664% 961 | } 962 | 963 | .col-offset-3{ 964 | margin-left:25% 965 | } 966 | 967 | .col-offset-4{ 968 | margin-left:33.33333333333333% 969 | } 970 | 971 | .col-offset-5{ 972 | margin-left:41.66666666666667% 973 | } 974 | 975 | .col-offset-6{ 976 | margin-left:50% 977 | } 978 | 979 | .col-offset-7{ 980 | margin-left:58.333333333333336% 981 | } 982 | 983 | .col-offset-8{ 984 | margin-left:66.66666666666666% 985 | } 986 | 987 | .col-offset-9{ 988 | margin-left:75% 989 | } 990 | 991 | .col-offset-10{ 992 | margin-left:83.33333333333334% 993 | } 994 | 995 | .col-offset-11{ 996 | margin-left:91.66666666666666% 997 | } 998 | 999 | } 1000 | 1001 | @media(min-width:1200px){ 1002 | .container{ 1003 | max-width:1170px 1004 | } 1005 | 1006 | } 1007 | 1008 | table{ 1009 | max-width:100%; 1010 | background-color:transparent 1011 | } 1012 | 1013 | th{ 1014 | text-align:left 1015 | } 1016 | 1017 | .table{ 1018 | width:100%; 1019 | margin-bottom:20px 1020 | } 1021 | 1022 | .table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{ 1023 | padding:8px; 1024 | line-height:1.428571429; 1025 | vertical-align:top; 1026 | border-top:1px solid #ddd 1027 | } 1028 | 1029 | .table thead>tr>th{ 1030 | vertical-align:bottom 1031 | } 1032 | 1033 | .table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{ 1034 | border-top:0 1035 | } 1036 | 1037 | .table tbody+tbody{ 1038 | border-top:2px solid #ddd 1039 | } 1040 | 1041 | .table .table{ 1042 | background-color:#fff 1043 | } 1044 | 1045 | .table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{ 1046 | padding:5px 1047 | } 1048 | 1049 | .table-bordered{ 1050 | border:1px solid #ddd 1051 | } 1052 | 1053 | .table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{ 1054 | border:1px solid #ddd 1055 | } 1056 | 1057 | .table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{ 1058 | background-color:#f9f9f9 1059 | } 1060 | 1061 | .table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{ 1062 | background-color:#f5f5f5 1063 | } 1064 | 1065 | table col[class^="col-"]{ 1066 | display:table-column; 1067 | float:none 1068 | } 1069 | 1070 | table td[class^="col-"],table th[class^="col-"]{ 1071 | display:table-cell; 1072 | float:none 1073 | } 1074 | 1075 | .table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{ 1076 | background-color:#f5f5f5 1077 | } 1078 | 1079 | .table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{ 1080 | background-color:#dff0d8; 1081 | border-color:#d6e9c6 1082 | } 1083 | 1084 | .table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{ 1085 | background-color:#f2dede; 1086 | border-color:#eed3d7 1087 | } 1088 | 1089 | .table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{ 1090 | background-color:#fcf8e3; 1091 | border-color:#fbeed5 1092 | } 1093 | 1094 | .table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{ 1095 | background-color:#d0e9c6; 1096 | border-color:#c9e2b3 1097 | } 1098 | 1099 | .table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{ 1100 | background-color:#ebcccc; 1101 | border-color:#e6c1c7 1102 | } 1103 | 1104 | .table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{ 1105 | background-color:#faf2cc; 1106 | border-color:#f8e5be 1107 | } 1108 | 1109 | fieldset{ 1110 | padding:0; 1111 | margin:0; 1112 | border:0 1113 | } 1114 | 1115 | legend{ 1116 | display:block; 1117 | width:100%; 1118 | padding:0; 1119 | margin-bottom:20px; 1120 | font-size:21px; 1121 | line-height:inherit; 1122 | color:#333; 1123 | border:0; 1124 | border-bottom:1px solid #e5e5e5 1125 | } 1126 | 1127 | label{ 1128 | display:inline-block; 1129 | margin-bottom:5px; 1130 | font-weight:bold 1131 | } 1132 | 1133 | input[type="search"]{ 1134 | -webkit-box-sizing:border-box; 1135 | -moz-box-sizing:border-box; 1136 | box-sizing:border-box 1137 | } 1138 | 1139 | input[type="radio"],input[type="checkbox"]{ 1140 | margin:4px 0 0; 1141 | margin-top:1px \9; 1142 | line-height:normal 1143 | } 1144 | 1145 | input[type="file"]{ 1146 | display:block 1147 | } 1148 | 1149 | select[multiple],select[size]{ 1150 | height:auto 1151 | } 1152 | 1153 | select optgroup{ 1154 | font-family:inherit; 1155 | font-size:inherit; 1156 | font-style:inherit 1157 | } 1158 | 1159 | input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{ 1160 | outline:thin dotted #333; 1161 | outline:5px auto -webkit-focus-ring-color; 1162 | outline-offset:-2px 1163 | } 1164 | 1165 | input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{ 1166 | height:auto 1167 | } 1168 | 1169 | .form-control:-moz-placeholder{ 1170 | color:#999 1171 | } 1172 | 1173 | .form-control::-moz-placeholder{ 1174 | color:#999 1175 | } 1176 | 1177 | .form-control:-ms-input-placeholder{ 1178 | color:#999 1179 | } 1180 | 1181 | .form-control::-webkit-input-placeholder{ 1182 | color:#999 1183 | } 1184 | 1185 | .form-control{ 1186 | display:block; 1187 | width:100%; 1188 | height:38px; 1189 | padding:8px 12px; 1190 | font-size:14px; 1191 | line-height:1.428571429; 1192 | color:#555; 1193 | vertical-align:middle; 1194 | background-color:#fff; 1195 | border:1px solid #ccc; 1196 | border-radius:4px; 1197 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075); 1198 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.075); 1199 | -webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s; 1200 | transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s 1201 | } 1202 | 1203 | .form-control:focus{ 1204 | border-color:rgba(82,168,236,0.8); 1205 | outline:0; 1206 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6); 1207 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6) 1208 | } 1209 | 1210 | .form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{ 1211 | cursor:not-allowed; 1212 | background-color:#eee 1213 | } 1214 | 1215 | textarea.form-control{ 1216 | height:auto 1217 | } 1218 | 1219 | .form-group{ 1220 | margin-bottom:15px 1221 | } 1222 | 1223 | .radio,.checkbox{ 1224 | display:block; 1225 | min-height:20px; 1226 | padding-left:20px; 1227 | margin-top:10px; 1228 | margin-bottom:10px; 1229 | vertical-align:middle 1230 | } 1231 | 1232 | .radio label,.checkbox label{ 1233 | display:inline; 1234 | margin-bottom:0; 1235 | font-weight:normal; 1236 | cursor:pointer 1237 | } 1238 | 1239 | .radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{ 1240 | float:left; 1241 | margin-left:-20px 1242 | } 1243 | 1244 | .radio+.radio,.checkbox+.checkbox{ 1245 | margin-top:-5px 1246 | } 1247 | 1248 | .radio-inline,.checkbox-inline{ 1249 | display:inline-block; 1250 | padding-left:20px; 1251 | margin-bottom:0; 1252 | font-weight:normal; 1253 | vertical-align:middle; 1254 | cursor:pointer 1255 | } 1256 | 1257 | .radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{ 1258 | margin-top:0; 1259 | margin-left:10px 1260 | } 1261 | 1262 | .form-control.input-large{ 1263 | height:56px; 1264 | padding:14px 16px; 1265 | font-size:18px; 1266 | border-radius:6px 1267 | } 1268 | 1269 | .form-control.input-small{ 1270 | height:30px; 1271 | padding:5px 10px; 1272 | font-size:12px; 1273 | border-radius:3px 1274 | } 1275 | 1276 | select.input-large{ 1277 | height:56px; 1278 | line-height:56px 1279 | } 1280 | 1281 | select.input-small{ 1282 | height:30px; 1283 | line-height:30px 1284 | } 1285 | 1286 | .has-warning .help-block,.has-warning .control-label{ 1287 | color:#c09853 1288 | } 1289 | 1290 | .has-warning .form-control{ 1291 | padding-right:32px; 1292 | border-color:#c09853; 1293 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075); 1294 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.075) 1295 | } 1296 | 1297 | .has-warning .form-control:focus{ 1298 | border-color:#a47e3c; 1299 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e; 1300 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e 1301 | } 1302 | 1303 | .has-warning .input-group-addon{ 1304 | color:#c09853; 1305 | background-color:#fcf8e3; 1306 | border-color:#c09853 1307 | } 1308 | 1309 | .has-error .help-block,.has-error .control-label{ 1310 | color:#b94a48 1311 | } 1312 | 1313 | .has-error .form-control{ 1314 | padding-right:32px; 1315 | border-color:#b94a48; 1316 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075); 1317 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.075) 1318 | } 1319 | 1320 | .has-error .form-control:focus{ 1321 | border-color:#953b39; 1322 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392; 1323 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392 1324 | } 1325 | 1326 | .has-error .input-group-addon{ 1327 | color:#b94a48; 1328 | background-color:#f2dede; 1329 | border-color:#b94a48 1330 | } 1331 | 1332 | .has-success .help-block,.has-success .control-label{ 1333 | color:#468847 1334 | } 1335 | 1336 | .has-success .form-control{ 1337 | padding-right:32px; 1338 | border-color:#468847; 1339 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075); 1340 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.075) 1341 | } 1342 | 1343 | .has-success .form-control:focus{ 1344 | border-color:#356635; 1345 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b; 1346 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b 1347 | } 1348 | 1349 | .has-success .input-group-addon{ 1350 | color:#468847; 1351 | background-color:#dff0d8; 1352 | border-color:#468847 1353 | } 1354 | 1355 | .help-block{ 1356 | display:block; 1357 | margin-top:5px; 1358 | margin-bottom:10px; 1359 | color:#737373 1360 | } 1361 | 1362 | .btn{ 1363 | display:inline-block; 1364 | padding:8px 12px; 1365 | margin-bottom:0; 1366 | font-size:14px; 1367 | font-weight:500; 1368 | line-height:1.428571429; 1369 | text-align:center; 1370 | white-space:nowrap; 1371 | vertical-align:middle; 1372 | cursor:pointer; 1373 | border:1px solid transparent; 1374 | border-radius:4px 1375 | } 1376 | 1377 | .btn:focus{ 1378 | outline:thin dotted #333; 1379 | outline:5px auto -webkit-focus-ring-color; 1380 | outline-offset:-2px 1381 | } 1382 | 1383 | .btn:hover,.btn:focus{ 1384 | color:#fff; 1385 | text-decoration:none 1386 | } 1387 | 1388 | .btn:active,.btn.active{ 1389 | outline:0; 1390 | -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125); 1391 | box-shadow:inset 0 3px 5px rgba(0,0,0,0.125) 1392 | } 1393 | 1394 | .btn.disabled,.btn[disabled],fieldset[disabled] .btn{ 1395 | pointer-events:none; 1396 | cursor:default; 1397 | opacity:.65; 1398 | filter:alpha(opacity=65); 1399 | -webkit-box-shadow:none; 1400 | box-shadow:none 1401 | } 1402 | 1403 | .btn-default{ 1404 | color:#fff; 1405 | background-color:#474949; 1406 | border-color:#474949 1407 | } 1408 | 1409 | .btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active{ 1410 | background-color:#3a3c3c; 1411 | border-color:#2e2f2f 1412 | } 1413 | 1414 | .btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{ 1415 | background-color:#474949; 1416 | border-color:#474949 1417 | } 1418 | 1419 | .btn-primary{ 1420 | color:#fff; 1421 | background-color:#428bca; 1422 | border-color:#428bca 1423 | } 1424 | 1425 | .btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active{ 1426 | background-color:#357ebd; 1427 | border-color:#3071a9 1428 | } 1429 | 1430 | .btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{ 1431 | background-color:#428bca; 1432 | border-color:#428bca 1433 | } 1434 | 1435 | .btn-warning{ 1436 | color:#fff; 1437 | background-color:#f0ad4e; 1438 | border-color:#f0ad4e 1439 | } 1440 | 1441 | .btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active{ 1442 | background-color:#eea236; 1443 | border-color:#ec971f 1444 | } 1445 | 1446 | .btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{ 1447 | background-color:#f0ad4e; 1448 | border-color:#f0ad4e 1449 | } 1450 | 1451 | .btn-danger{ 1452 | color:#fff; 1453 | background-color:#d9534f; 1454 | border-color:#d9534f 1455 | } 1456 | 1457 | .btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active{ 1458 | background-color:#d43f3a; 1459 | border-color:#c9302c 1460 | } 1461 | 1462 | .btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{ 1463 | background-color:#d9534f; 1464 | border-color:#d9534f 1465 | } 1466 | 1467 | .btn-success{ 1468 | color:#fff; 1469 | background-color:#5cb85c; 1470 | border-color:#5cb85c 1471 | } 1472 | 1473 | .btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active{ 1474 | background-color:#4cae4c; 1475 | border-color:#449d44 1476 | } 1477 | 1478 | .btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{ 1479 | background-color:#5cb85c; 1480 | border-color:#5cb85c 1481 | } 1482 | 1483 | .btn-info{ 1484 | color:#fff; 1485 | background-color:#5bc0de; 1486 | border-color:#5bc0de 1487 | } 1488 | 1489 | .btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active{ 1490 | background-color:#46b8da; 1491 | border-color:#31b0d5 1492 | } 1493 | 1494 | .btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{ 1495 | background-color:#5bc0de; 1496 | border-color:#5bc0de 1497 | } 1498 | 1499 | .btn-link{ 1500 | font-weight:normal; 1501 | color:#428bca; 1502 | cursor:pointer; 1503 | border-radius:0 1504 | } 1505 | 1506 | .btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{ 1507 | background-color:transparent; 1508 | -webkit-box-shadow:none; 1509 | box-shadow:none 1510 | } 1511 | 1512 | .btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{ 1513 | border-color:transparent 1514 | } 1515 | 1516 | .btn-link:hover,.btn-link:focus{ 1517 | color:#2a6496; 1518 | text-decoration:underline; 1519 | background-color:transparent 1520 | } 1521 | 1522 | .btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{ 1523 | color:#333; 1524 | text-decoration:none 1525 | } 1526 | 1527 | .btn-large{ 1528 | padding:14px 16px; 1529 | font-size:18px; 1530 | border-radius:6px 1531 | } 1532 | 1533 | .btn-small{ 1534 | padding:5px 10px; 1535 | font-size:12px; 1536 | line-height:1.5; 1537 | border-radius:3px 1538 | } 1539 | 1540 | .btn-block{ 1541 | display:block; 1542 | width:100%; 1543 | padding-right:0; 1544 | padding-left:0 1545 | } 1546 | 1547 | .btn-block+.btn-block{ 1548 | margin-top:5px 1549 | } 1550 | 1551 | input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{ 1552 | width:100% 1553 | } 1554 | 1555 | .fade{ 1556 | opacity:0; 1557 | -webkit-transition:opacity .15s linear; 1558 | transition:opacity .15s linear 1559 | } 1560 | 1561 | .fade.in{ 1562 | opacity:1 1563 | } 1564 | 1565 | .collapse{ 1566 | display:none 1567 | } 1568 | 1569 | .collapse.in{ 1570 | display:block 1571 | } 1572 | 1573 | .collapsing{ 1574 | position:relative; 1575 | height:0; 1576 | overflow:hidden; 1577 | -webkit-transition:height .35s ease; 1578 | transition:height .35s ease 1579 | } 1580 | 1581 | .input-group{ 1582 | display:table; 1583 | border-collapse:separate 1584 | } 1585 | 1586 | .input-group.col{ 1587 | float:none; 1588 | padding-right:0; 1589 | padding-left:0 1590 | } 1591 | 1592 | .input-group .form-control{ 1593 | width:100%; 1594 | margin-bottom:0 1595 | } 1596 | 1597 | .input-group-addon,.input-group-btn,.input-group .form-control{ 1598 | display:table-cell 1599 | } 1600 | 1601 | .input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){ 1602 | border-radius:0 1603 | } 1604 | 1605 | .input-group-addon,.input-group-btn{ 1606 | width:1%; 1607 | white-space:nowrap; 1608 | vertical-align:middle 1609 | } 1610 | 1611 | .input-group-addon{ 1612 | padding:8px 12px; 1613 | font-size:14px; 1614 | font-weight:normal; 1615 | line-height:1.428571429; 1616 | text-align:center; 1617 | background-color:#eee; 1618 | border:1px solid #ccc; 1619 | border-radius:4px; 1620 | -webkit-box-sizing:border-box; 1621 | -moz-box-sizing:border-box; 1622 | box-sizing:border-box 1623 | } 1624 | 1625 | .input-group-addon.input-small{ 1626 | padding:5px 10px; 1627 | font-size:12px; 1628 | border-radius:3px 1629 | } 1630 | 1631 | .input-group-addon.input-large{ 1632 | padding:14px 16px; 1633 | font-size:18px; 1634 | border-radius:6px 1635 | } 1636 | 1637 | .input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{ 1638 | margin-top:0 1639 | } 1640 | 1641 | .input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){ 1642 | border-top-right-radius:0; 1643 | border-bottom-right-radius:0 1644 | } 1645 | 1646 | .input-group-addon:first-child{ 1647 | border-right:0 1648 | } 1649 | 1650 | .input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){ 1651 | border-bottom-left-radius:0; 1652 | border-top-left-radius:0 1653 | } 1654 | 1655 | .input-group-addon:last-child{ 1656 | border-left:0 1657 | } 1658 | 1659 | .input-group-btn{ 1660 | position:relative; 1661 | white-space:nowrap 1662 | } 1663 | 1664 | .input-group-btn>.btn{ 1665 | position:relative 1666 | } 1667 | 1668 | .input-group-btn>.btn+.btn{ 1669 | margin-left:-4px 1670 | } 1671 | 1672 | .input-group-btn>.btn:hover,.input-group-btn>.btn:active{ 1673 | z-index:2 1674 | } 1675 | 1676 | .form-inline .form-control,.form-inline .radio,.form-inline .checkbox{ 1677 | display:inline-block 1678 | } 1679 | 1680 | .form-inline .radio,.form-inline .checkbox{ 1681 | margin-top:0; 1682 | margin-bottom:0 1683 | } 1684 | 1685 | .form-horizontal .control-label{ 1686 | padding-top:9px 1687 | } 1688 | 1689 | .form-horizontal .form-group:before,.form-horizontal .form-group:after{ 1690 | display:table; 1691 | content:" " 1692 | } 1693 | 1694 | .form-horizontal .form-group:after{ 1695 | clear:both 1696 | } 1697 | 1698 | .form-horizontal .form-group:before,.form-horizontal .form-group:after{ 1699 | display:table; 1700 | content:" " 1701 | } 1702 | 1703 | .form-horizontal .form-group:after{ 1704 | clear:both 1705 | } 1706 | 1707 | @media(min-width:768px){ 1708 | .form-horizontal .form-group{ 1709 | margin-right:-15px; 1710 | margin-left:-15px 1711 | } 1712 | 1713 | } 1714 | 1715 | .form-horizontal .form-group .row{ 1716 | margin-right:-15px; 1717 | margin-left:-15px 1718 | } 1719 | 1720 | @media(min-width:768px){ 1721 | .form-horizontal .control-label{ 1722 | text-align:right 1723 | } 1724 | 1725 | } 1726 | 1727 | .caret{ 1728 | display:inline-block; 1729 | width:0; 1730 | height:0; 1731 | margin-left:2px; 1732 | vertical-align:middle; 1733 | border-top:4px solid #000; 1734 | border-right:4px solid transparent; 1735 | border-left:4px solid transparent; 1736 | content:"" 1737 | } 1738 | 1739 | .dropdown-menu{ 1740 | position:absolute; 1741 | top:100%; 1742 | left:0; 1743 | z-index:1000; 1744 | display:none; 1745 | float:left; 1746 | min-width:160px; 1747 | padding:5px 0; 1748 | margin:2px 0 0; 1749 | list-style:none; 1750 | background-color:#fff; 1751 | border:1px solid #ccc; 1752 | border:1px solid rgba(0,0,0,0.15); 1753 | border-radius:4px; 1754 | -webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175); 1755 | box-shadow:0 6px 12px rgba(0,0,0,0.175); 1756 | background-clip:padding-box 1757 | } 1758 | 1759 | .dropdown-menu.pull-right{ 1760 | right:0; 1761 | left:auto 1762 | } 1763 | 1764 | .dropdown-menu .divider{ 1765 | height:1px; 1766 | margin:9px 0; 1767 | overflow:hidden; 1768 | background-color:#e5e5e5 1769 | } 1770 | 1771 | .dropdown-menu>li>a{ 1772 | display:block; 1773 | padding:3px 20px; 1774 | clear:both; 1775 | font-weight:normal; 1776 | line-height:1.428571429; 1777 | color:#333; 1778 | white-space:nowrap 1779 | } 1780 | 1781 | .dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{ 1782 | color:#fff; 1783 | text-decoration:none; 1784 | background-color:#357ebd; 1785 | background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd)); 1786 | background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%); 1787 | background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%); 1788 | background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%); 1789 | background-repeat:repeat-x; 1790 | filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0) 1791 | } 1792 | 1793 | .dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{ 1794 | color:#fff; 1795 | text-decoration:none; 1796 | background-color:#357ebd; 1797 | background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd)); 1798 | background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%); 1799 | background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%); 1800 | background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%); 1801 | background-repeat:repeat-x; 1802 | outline:0; 1803 | filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0) 1804 | } 1805 | 1806 | .dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{ 1807 | color:#999 1808 | } 1809 | 1810 | .dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{ 1811 | text-decoration:none; 1812 | cursor:not-allowed; 1813 | background-color:transparent; 1814 | background-image:none; 1815 | filter:progid:DXImageTransform.Microsoft.gradient(enabled=false) 1816 | } 1817 | 1818 | .open>.dropdown-menu{ 1819 | display:block 1820 | } 1821 | 1822 | .open>a{ 1823 | outline:0 1824 | } 1825 | 1826 | .dropdown-header{ 1827 | display:block; 1828 | padding:3px 20px; 1829 | font-size:12px; 1830 | line-height:1.428571429; 1831 | color:#999 1832 | } 1833 | 1834 | .dropdown-backdrop{ 1835 | position:fixed; 1836 | top:0; 1837 | right:0; 1838 | bottom:0; 1839 | left:0; 1840 | z-index:990 1841 | } 1842 | 1843 | .pull-right>.dropdown-menu{ 1844 | right:0; 1845 | left:auto 1846 | } 1847 | 1848 | .dropup .caret,.navbar-fixed-bottom .dropdown .caret{ 1849 | border-top:0; 1850 | border-bottom:4px solid #000; 1851 | content:"" 1852 | } 1853 | 1854 | .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{ 1855 | top:auto; 1856 | bottom:100%; 1857 | margin-bottom:1px 1858 | } 1859 | 1860 | .list-group{ 1861 | padding-left:0; 1862 | margin-bottom:20px; 1863 | background-color:#fff 1864 | } 1865 | 1866 | .list-group-item{ 1867 | position:relative; 1868 | display:block; 1869 | padding:10px 30px 10px 15px; 1870 | margin-bottom:-1px; 1871 | border:1px solid #ddd 1872 | } 1873 | 1874 | .list-group-item:first-child{ 1875 | border-top-right-radius:4px; 1876 | border-top-left-radius:4px 1877 | } 1878 | 1879 | .list-group-item:last-child{ 1880 | margin-bottom:0; 1881 | border-bottom-right-radius:4px; 1882 | border-bottom-left-radius:4px 1883 | } 1884 | 1885 | .list-group-item>.badge{ 1886 | float:right; 1887 | margin-right:-15px 1888 | } 1889 | 1890 | .list-group-item-heading{ 1891 | margin-top:0; 1892 | margin-bottom:5px 1893 | } 1894 | 1895 | .list-group-item-text{ 1896 | margin-bottom:0; 1897 | line-height:1.3 1898 | } 1899 | 1900 | a.list-group-item .list-group-item-heading{ 1901 | color:#333 1902 | } 1903 | 1904 | a.list-group-item .list-group-item-text{ 1905 | color:#555 1906 | } 1907 | 1908 | a.list-group-item:hover,a.list-group-item:focus{ 1909 | text-decoration:none; 1910 | background-color:#f5f5f5 1911 | } 1912 | 1913 | a.list-group-item.active{ 1914 | z-index:2; 1915 | color:#fff; 1916 | background-color:#428bca; 1917 | border-color:#428bca 1918 | } 1919 | 1920 | a.list-group-item.active .list-group-item-heading{ 1921 | color:inherit 1922 | } 1923 | 1924 | a.list-group-item.active .list-group-item-text{ 1925 | color:#e1edf7 1926 | } 1927 | 1928 | .panel{ 1929 | padding:15px; 1930 | margin-bottom:20px; 1931 | background-color:#fff; 1932 | border:1px solid #ddd; 1933 | border-radius:4px; 1934 | -webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05); 1935 | box-shadow:0 1px 1px rgba(0,0,0,0.05) 1936 | } 1937 | 1938 | .panel-heading{ 1939 | padding:10px 15px; 1940 | margin:-15px -15px 15px; 1941 | background-color:#f5f5f5; 1942 | border-bottom:1px solid #ddd; 1943 | border-top-right-radius:3px; 1944 | border-top-left-radius:3px 1945 | } 1946 | 1947 | .panel-title{ 1948 | margin-top:0; 1949 | margin-bottom:0; 1950 | font-size:17.5px; 1951 | font-weight:500 1952 | } 1953 | 1954 | .panel-footer{ 1955 | padding:10px 15px; 1956 | margin:15px -15px -15px; 1957 | background-color:#f5f5f5; 1958 | border-top:1px solid #ddd; 1959 | border-bottom-right-radius:3px; 1960 | border-bottom-left-radius:3px 1961 | } 1962 | 1963 | .panel-primary{ 1964 | border-color:#428bca 1965 | } 1966 | 1967 | .panel-primary .panel-heading{ 1968 | color:#fff; 1969 | background-color:#428bca; 1970 | border-color:#428bca 1971 | } 1972 | 1973 | .panel-success{ 1974 | border-color:#d6e9c6 1975 | } 1976 | 1977 | .panel-success .panel-heading{ 1978 | color:#468847; 1979 | background-color:#dff0d8; 1980 | border-color:#d6e9c6 1981 | } 1982 | 1983 | .panel-warning{ 1984 | border-color:#fbeed5 1985 | } 1986 | 1987 | .panel-warning .panel-heading{ 1988 | color:#c09853; 1989 | background-color:#fcf8e3; 1990 | border-color:#fbeed5 1991 | } 1992 | 1993 | .panel-danger{ 1994 | border-color:#eed3d7 1995 | } 1996 | 1997 | .panel-danger .panel-heading{ 1998 | color:#b94a48; 1999 | background-color:#f2dede; 2000 | border-color:#eed3d7 2001 | } 2002 | 2003 | .panel-info{ 2004 | border-color:#bce8f1 2005 | } 2006 | 2007 | .panel-info .panel-heading{ 2008 | color:#3a87ad; 2009 | background-color:#d9edf7; 2010 | border-color:#bce8f1 2011 | } 2012 | 2013 | .list-group-flush{ 2014 | margin:15px -15px -15px 2015 | } 2016 | 2017 | .list-group-flush .list-group-item{ 2018 | border-width:1px 0 2019 | } 2020 | 2021 | .list-group-flush .list-group-item:first-child{ 2022 | border-top-right-radius:0; 2023 | border-top-left-radius:0 2024 | } 2025 | 2026 | .list-group-flush .list-group-item:last-child{ 2027 | border-bottom:0 2028 | } 2029 | 2030 | .well{ 2031 | min-height:20px; 2032 | padding:19px; 2033 | margin-bottom:20px; 2034 | background-color:#f5f5f5; 2035 | border:1px solid #e3e3e3; 2036 | border-radius:4px; 2037 | -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05); 2038 | box-shadow:inset 0 1px 1px rgba(0,0,0,0.05) 2039 | } 2040 | 2041 | .well blockquote{ 2042 | border-color:#ddd; 2043 | border-color:rgba(0,0,0,0.15) 2044 | } 2045 | 2046 | .well-large{ 2047 | padding:24px; 2048 | border-radius:6px 2049 | } 2050 | 2051 | .well-small{ 2052 | padding:9px; 2053 | border-radius:3px 2054 | } 2055 | 2056 | .close{ 2057 | float:right; 2058 | font-size:21px; 2059 | font-weight:bold; 2060 | line-height:1; 2061 | color:#000; 2062 | text-shadow:0 1px 0 #fff; 2063 | opacity:.2; 2064 | filter:alpha(opacity=20) 2065 | } 2066 | 2067 | .close:hover,.close:focus{ 2068 | color:#000; 2069 | text-decoration:none; 2070 | cursor:pointer; 2071 | opacity:.5; 2072 | filter:alpha(opacity=50) 2073 | } 2074 | 2075 | button.close{ 2076 | padding:0; 2077 | cursor:pointer; 2078 | background:transparent; 2079 | border:0; 2080 | -webkit-appearance:none 2081 | } 2082 | 2083 | .nav{ 2084 | padding-left:0; 2085 | margin-bottom:0; 2086 | list-style:none 2087 | } 2088 | 2089 | .nav:before,.nav:after{ 2090 | display:table; 2091 | content:" " 2092 | } 2093 | 2094 | .nav:after{ 2095 | clear:both 2096 | } 2097 | 2098 | .nav:before,.nav:after{ 2099 | display:table; 2100 | content:" " 2101 | } 2102 | 2103 | .nav:after{ 2104 | clear:both 2105 | } 2106 | 2107 | .nav>li{ 2108 | position:relative; 2109 | display:block 2110 | } 2111 | 2112 | .nav>li>a{ 2113 | position:relative; 2114 | display:block; 2115 | padding:10px 15px 2116 | } 2117 | 2118 | .nav>li>a:hover,.nav>li>a:focus{ 2119 | text-decoration:none; 2120 | background-color:#eee 2121 | } 2122 | 2123 | .nav>li.disabled>a{ 2124 | color:#999 2125 | } 2126 | 2127 | .nav>li.disabled>a:hover,.nav>li.disabled>a:focus{ 2128 | color:#999; 2129 | text-decoration:none; 2130 | cursor:not-allowed; 2131 | background-color:transparent 2132 | } 2133 | 2134 | .nav.open>a,.nav.open>a:hover,.nav.open>a:focus{ 2135 | color:#fff; 2136 | background-color:#428bca; 2137 | border-color:#428bca 2138 | } 2139 | 2140 | .nav.open>a .caret,.nav.open>a:hover .caret,.nav.open>a:focus .caret{ 2141 | border-top-color:#fff; 2142 | border-bottom-color:#fff 2143 | } 2144 | 2145 | .nav>.pull-right{ 2146 | float:right 2147 | } 2148 | 2149 | .nav .nav-divider{ 2150 | height:1px; 2151 | margin:9px 0; 2152 | overflow:hidden; 2153 | background-color:#e5e5e5 2154 | } 2155 | 2156 | .nav-tabs{ 2157 | border-bottom:1px solid #ddd 2158 | } 2159 | 2160 | .nav-tabs>li{ 2161 | float:left; 2162 | margin-bottom:-1px 2163 | } 2164 | 2165 | .nav-tabs>li>a{ 2166 | margin-right:2px; 2167 | line-height:1.428571429; 2168 | border:1px solid transparent; 2169 | border-radius:4px 4px 0 0 2170 | } 2171 | 2172 | .nav-tabs>li>a:hover{ 2173 | border-color:#eee 2174 | } 2175 | 2176 | .nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{ 2177 | color:#555; 2178 | cursor:default; 2179 | background-color:#fff; 2180 | border:1px solid #ddd; 2181 | border-bottom-color:transparent 2182 | } 2183 | 2184 | .nav-tabs.nav-justified{ 2185 | width:100%; 2186 | border-bottom:0 2187 | } 2188 | 2189 | .nav-tabs.nav-justified>li{ 2190 | display:table-cell; 2191 | float:none; 2192 | width:1% 2193 | } 2194 | 2195 | .nav-tabs.nav-justified>li>a{ 2196 | text-align:center 2197 | } 2198 | 2199 | .nav-tabs.nav-justified>li>a{ 2200 | margin-right:0; 2201 | border-bottom:1px solid #ddd 2202 | } 2203 | 2204 | .nav-tabs.nav-justified>.active>a{ 2205 | border-bottom-color:#fff 2206 | } 2207 | 2208 | .nav-pills>li{ 2209 | float:left 2210 | } 2211 | 2212 | .nav-pills>li>a{ 2213 | border-radius:5px 2214 | } 2215 | 2216 | .nav-pills>li+li{ 2217 | margin-left:2px 2218 | } 2219 | 2220 | .nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{ 2221 | color:#fff; 2222 | background-color:#428bca 2223 | } 2224 | 2225 | .nav-stacked>li{ 2226 | float:none 2227 | } 2228 | 2229 | .nav-stacked>li+li>a{ 2230 | margin-top:2px; 2231 | margin-left:0 2232 | } 2233 | 2234 | .nav-justified{ 2235 | width:100% 2236 | } 2237 | 2238 | .nav-justified>li{ 2239 | display:table-cell; 2240 | float:none; 2241 | width:1% 2242 | } 2243 | 2244 | .nav-justified>li>a{ 2245 | text-align:center 2246 | } 2247 | 2248 | .nav-tabs-justified{ 2249 | border-bottom:0 2250 | } 2251 | 2252 | .nav-tabs-justified>li>a{ 2253 | margin-right:0; 2254 | border-bottom:1px solid #ddd 2255 | } 2256 | 2257 | .nav-tabs-justified>.active>a{ 2258 | border-bottom-color:#fff 2259 | } 2260 | 2261 | .tabbable:before,.tabbable:after{ 2262 | display:table; 2263 | content:" " 2264 | } 2265 | 2266 | .tabbable:after{ 2267 | clear:both 2268 | } 2269 | 2270 | .tabbable:before,.tabbable:after{ 2271 | display:table; 2272 | content:" " 2273 | } 2274 | 2275 | .tabbable:after{ 2276 | clear:both 2277 | } 2278 | 2279 | .tab-content>.tab-pane,.pill-content>.pill-pane{ 2280 | display:none 2281 | } 2282 | 2283 | .tab-content>.active,.pill-content>.active{ 2284 | display:block 2285 | } 2286 | 2287 | .nav .caret{ 2288 | border-top-color:#428bca; 2289 | border-bottom-color:#428bca 2290 | } 2291 | 2292 | .nav a:hover .caret{ 2293 | border-top-color:#2a6496; 2294 | border-bottom-color:#2a6496 2295 | } 2296 | 2297 | .nav-tabs .dropdown-menu{ 2298 | margin-top:-1px; 2299 | border-top-right-radius:0; 2300 | border-top-left-radius:0 2301 | } 2302 | 2303 | .navbar{ 2304 | position:relative; 2305 | min-height:50px; 2306 | padding-right:15px; 2307 | padding-left:15px; 2308 | margin-bottom:20px; 2309 | background-color:#eee; 2310 | border-radius:4px 2311 | } 2312 | 2313 | .navbar:before,.navbar:after{ 2314 | display:table; 2315 | content:" " 2316 | } 2317 | 2318 | .navbar:after{ 2319 | clear:both 2320 | } 2321 | 2322 | .navbar:before,.navbar:after{ 2323 | display:table; 2324 | content:" " 2325 | } 2326 | 2327 | .navbar:after{ 2328 | clear:both 2329 | } 2330 | 2331 | .navbar-nav{ 2332 | margin-top:10px; 2333 | margin-bottom:15px 2334 | } 2335 | 2336 | .navbar-nav>li>a{ 2337 | padding-top:15px; 2338 | padding-bottom:15px; 2339 | line-height:20px; 2340 | color:#777; 2341 | border-radius:4px 2342 | } 2343 | 2344 | .navbar-nav>li>a:hover,.navbar-nav>li>a:focus{ 2345 | color:#333; 2346 | background-color:transparent 2347 | } 2348 | 2349 | .navbar-nav>.active>a,.navbar-nav>.active>a:hover,.navbar-nav>.active>a:focus{ 2350 | color:#555; 2351 | background-color:#d5d5d5 2352 | } 2353 | 2354 | .navbar-nav>.disabled>a,.navbar-nav>.disabled>a:hover,.navbar-nav>.disabled>a:focus{ 2355 | color:#ccc; 2356 | background-color:transparent 2357 | } 2358 | 2359 | .navbar-nav.pull-right{ 2360 | width:100% 2361 | } 2362 | 2363 | .navbar-static-top{ 2364 | border-radius:0 2365 | } 2366 | 2367 | .navbar-fixed-top,.navbar-fixed-bottom{ 2368 | position:fixed; 2369 | right:0; 2370 | left:0; 2371 | z-index:1030; 2372 | border-radius:0 2373 | } 2374 | 2375 | .navbar-fixed-top{ 2376 | top:0 2377 | } 2378 | 2379 | .navbar-fixed-bottom{ 2380 | bottom:0; 2381 | margin-bottom:0 2382 | } 2383 | 2384 | .navbar-brand{ 2385 | display:block; 2386 | max-width:200px; 2387 | padding:15px 15px; 2388 | margin-right:auto; 2389 | margin-left:auto; 2390 | font-size:18px; 2391 | font-weight:500; 2392 | line-height:20px; 2393 | color:#777; 2394 | text-align:center 2395 | } 2396 | 2397 | .navbar-brand:hover,.navbar-brand:focus{ 2398 | color:#5e5e5e; 2399 | text-decoration:none; 2400 | background-color:transparent 2401 | } 2402 | 2403 | .navbar-toggle{ 2404 | position:absolute; 2405 | top:9px; 2406 | right:10px; 2407 | width:48px; 2408 | height:32px; 2409 | padding:8px 12px; 2410 | background-color:transparent; 2411 | border:1px solid #ddd; 2412 | border-radius:4px 2413 | } 2414 | 2415 | .navbar-toggle:hover,.navbar-toggle:focus{ 2416 | background-color:#ddd 2417 | } 2418 | 2419 | .navbar-toggle .icon-bar{ 2420 | display:block; 2421 | width:22px; 2422 | height:2px; 2423 | background-color:#ccc; 2424 | border-radius:1px 2425 | } 2426 | 2427 | .navbar-toggle .icon-bar+.icon-bar{ 2428 | margin-top:4px 2429 | } 2430 | 2431 | .navbar-form{ 2432 | margin-top:6px; 2433 | margin-bottom:6px 2434 | } 2435 | 2436 | .navbar-form .form-control,.navbar-form .radio,.navbar-form .checkbox{ 2437 | display:inline-block 2438 | } 2439 | 2440 | .navbar-form .radio,.navbar-form .checkbox{ 2441 | margin-top:0; 2442 | margin-bottom:0 2443 | } 2444 | 2445 | .navbar-nav>li>.dropdown-menu{ 2446 | margin-top:0; 2447 | border-top-right-radius:0; 2448 | border-top-left-radius:0 2449 | } 2450 | 2451 | .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{ 2452 | border-bottom-right-radius:0; 2453 | border-bottom-left-radius:0 2454 | } 2455 | 2456 | .navbar-nav>.dropdown>a:hover .caret,.navbar-nav>.dropdown>a:focus .caret{ 2457 | border-top-color:#333; 2458 | border-bottom-color:#333 2459 | } 2460 | 2461 | .navbar-nav>.open>a,.navbar-nav>.open>a:hover,.navbar-nav>.open>a:focus{ 2462 | color:#555; 2463 | background-color:#d5d5d5 2464 | } 2465 | 2466 | .navbar-nav>.open>a .caret,.navbar-nav>.open>a:hover .caret,.navbar-nav>.open>a:focus .caret{ 2467 | border-top-color:#555; 2468 | border-bottom-color:#555 2469 | } 2470 | 2471 | .navbar-nav>.dropdown>a .caret{ 2472 | border-top-color:#777; 2473 | border-bottom-color:#777 2474 | } 2475 | 2476 | .navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{ 2477 | right:0; 2478 | left:auto 2479 | } 2480 | 2481 | .navbar-inverse{ 2482 | background-color:#222 2483 | } 2484 | 2485 | .navbar-inverse .navbar-brand{ 2486 | color:#999 2487 | } 2488 | 2489 | .navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{ 2490 | color:#fff; 2491 | background-color:transparent 2492 | } 2493 | 2494 | .navbar-inverse .navbar-text{ 2495 | color:#999 2496 | } 2497 | 2498 | .navbar-inverse .navbar-nav>li>a{ 2499 | color:#999 2500 | } 2501 | 2502 | .navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{ 2503 | color:#fff; 2504 | background-color:transparent 2505 | } 2506 | 2507 | .navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{ 2508 | color:#fff; 2509 | background-color:#080808 2510 | } 2511 | 2512 | .navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{ 2513 | color:#444; 2514 | background-color:transparent 2515 | } 2516 | 2517 | .navbar-inverse .navbar-toggle{ 2518 | border-color:#333 2519 | } 2520 | 2521 | .navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{ 2522 | background-color:#333 2523 | } 2524 | 2525 | .navbar-inverse .navbar-toggle .icon-bar{ 2526 | background-color:#fff 2527 | } 2528 | 2529 | .navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{ 2530 | color:#fff; 2531 | background-color:#080808 2532 | } 2533 | 2534 | .navbar-inverse .navbar-nav>.dropdown>a:hover .caret{ 2535 | border-top-color:#fff; 2536 | border-bottom-color:#fff 2537 | } 2538 | 2539 | .navbar-inverse .navbar-nav>.dropdown>a .caret{ 2540 | border-top-color:#999; 2541 | border-bottom-color:#999 2542 | } 2543 | 2544 | .navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{ 2545 | border-top-color:#fff; 2546 | border-bottom-color:#fff 2547 | } 2548 | 2549 | @media screen and (min-width:768px){ 2550 | .navbar-brand{ 2551 | float:left; 2552 | margin-right:5px; 2553 | margin-left:-15px 2554 | } 2555 | 2556 | .navbar-nav{ 2557 | float:left; 2558 | margin-top:0; 2559 | margin-bottom:0 2560 | } 2561 | 2562 | .navbar-nav>li{ 2563 | float:left 2564 | } 2565 | 2566 | .navbar-nav>li>a{ 2567 | border-radius:0 2568 | } 2569 | 2570 | .navbar-nav.pull-right{ 2571 | float:right; 2572 | width:auto 2573 | } 2574 | 2575 | .navbar-toggle{ 2576 | position:relative; 2577 | top:auto; 2578 | left:auto; 2579 | display:none 2580 | } 2581 | 2582 | .nav-collapse.collapse{ 2583 | display:block!important; 2584 | height:auto!important; 2585 | overflow:visible!important 2586 | } 2587 | 2588 | } 2589 | 2590 | .navbar-btn{ 2591 | margin-top:6px 2592 | } 2593 | 2594 | .navbar-text{ 2595 | margin-top:15px; 2596 | margin-bottom:15px 2597 | } 2598 | 2599 | .navbar-link{ 2600 | color:#777 2601 | } 2602 | 2603 | .navbar-link:hover{ 2604 | color:#333 2605 | } 2606 | 2607 | .navbar-inverse .navbar-link{ 2608 | color:#999 2609 | } 2610 | 2611 | .navbar-inverse .navbar-link:hover{ 2612 | color:#fff 2613 | } 2614 | 2615 | .btn .caret{ 2616 | border-top-color:#fff 2617 | } 2618 | 2619 | .dropup .btn .caret{ 2620 | border-bottom-color:#fff 2621 | } 2622 | 2623 | .btn-group,.btn-group-vertical{ 2624 | position:relative; 2625 | display:inline-block; 2626 | vertical-align:middle 2627 | } 2628 | 2629 | .btn-group>.btn,.btn-group-vertical>.btn{ 2630 | position:relative; 2631 | float:left 2632 | } 2633 | 2634 | .btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:active,.btn-group-vertical>.btn:active{ 2635 | z-index:2 2636 | } 2637 | 2638 | .btn-group .btn+.btn{ 2639 | margin-left:-1px 2640 | } 2641 | 2642 | .btn-toolbar:before,.btn-toolbar:after{ 2643 | display:table; 2644 | content:" " 2645 | } 2646 | 2647 | .btn-toolbar:after{ 2648 | clear:both 2649 | } 2650 | 2651 | .btn-toolbar:before,.btn-toolbar:after{ 2652 | display:table; 2653 | content:" " 2654 | } 2655 | 2656 | .btn-toolbar:after{ 2657 | clear:both 2658 | } 2659 | 2660 | .btn-toolbar .btn-group{ 2661 | float:left 2662 | } 2663 | 2664 | .btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{ 2665 | margin-left:5px 2666 | } 2667 | 2668 | .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){ 2669 | border-radius:0 2670 | } 2671 | 2672 | .btn-group>.btn:first-child{ 2673 | margin-left:0 2674 | } 2675 | 2676 | .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){ 2677 | border-top-right-radius:0; 2678 | border-bottom-right-radius:0 2679 | } 2680 | 2681 | .btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){ 2682 | border-bottom-left-radius:0; 2683 | border-top-left-radius:0 2684 | } 2685 | 2686 | .btn-group>.btn-group{ 2687 | float:left 2688 | } 2689 | 2690 | .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{ 2691 | border-radius:0 2692 | } 2693 | 2694 | .btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{ 2695 | border-top-right-radius:0; 2696 | border-bottom-right-radius:0 2697 | } 2698 | 2699 | .btn-group>.btn-group:last-child>.btn:first-child{ 2700 | border-bottom-left-radius:0; 2701 | border-top-left-radius:0 2702 | } 2703 | 2704 | .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{ 2705 | outline:0 2706 | } 2707 | 2708 | .btn-group>.btn+.dropdown-toggle{ 2709 | padding-right:8px; 2710 | padding-left:8px 2711 | } 2712 | 2713 | .btn-group>.btn-large+.dropdown-toggle{ 2714 | padding-right:12px; 2715 | padding-left:12px 2716 | } 2717 | 2718 | .btn-group.open .dropdown-toggle{ 2719 | -webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125); 2720 | box-shadow:inset 0 3px 5px rgba(0,0,0,0.125) 2721 | } 2722 | 2723 | .btn .caret{ 2724 | margin-left:0 2725 | } 2726 | 2727 | .btn-large .caret{ 2728 | border-width:5px 2729 | } 2730 | 2731 | .dropup .btn-large .caret{ 2732 | border-bottom-width:5px 2733 | } 2734 | 2735 | .btn-group-vertical>.btn{ 2736 | display:block; 2737 | float:none; 2738 | width:100%; 2739 | max-width:100% 2740 | } 2741 | 2742 | .btn-group-vertical>.btn+.btn{ 2743 | margin-top:-1px 2744 | } 2745 | 2746 | .btn-group-vertical .btn:not(:first-child):not(:last-child){ 2747 | border-radius:0 2748 | } 2749 | 2750 | .btn-group-vertical .btn:first-child{ 2751 | border-bottom-right-radius:0; 2752 | border-bottom-left-radius:0 2753 | } 2754 | 2755 | .btn-group-vertical .btn:last-child{ 2756 | border-top-right-radius:0; 2757 | border-top-left-radius:0 2758 | } 2759 | 2760 | .btn-group-justified{ 2761 | display:table; 2762 | width:100% 2763 | } 2764 | 2765 | .btn-group-justified .btn{ 2766 | display:table-cell; 2767 | float:none; 2768 | width:1% 2769 | } 2770 | 2771 | .btn-group[data-toggle="buttons"]>.btn>input[type="radio"],.btn-group[data-toggle="buttons"]>.btn>input[type="checkbox"]{ 2772 | display:none 2773 | } 2774 | 2775 | .breadcrumb{ 2776 | padding:8px 15px; 2777 | margin-bottom:20px; 2778 | list-style:none; 2779 | background-color:#f5f5f5; 2780 | border-radius:4px 2781 | } 2782 | 2783 | .breadcrumb>li{ 2784 | display:inline-block 2785 | } 2786 | 2787 | .breadcrumb>li+li:before{ 2788 | padding:0 5px; 2789 | color:#ccc; 2790 | content:"/\00a0" 2791 | } 2792 | 2793 | .breadcrumb>.active{ 2794 | color:#999 2795 | } 2796 | 2797 | .pagination{ 2798 | display:inline-block; 2799 | padding-left:0; 2800 | margin:20px 0; 2801 | border-radius:4px 2802 | } 2803 | 2804 | .pagination>li{ 2805 | display:inline 2806 | } 2807 | 2808 | .pagination>li>a,.pagination>li>span{ 2809 | float:left; 2810 | padding:4px 12px; 2811 | line-height:1.428571429; 2812 | text-decoration:none; 2813 | background-color:#fff; 2814 | border:1px solid #ddd; 2815 | border-left-width:0 2816 | } 2817 | 2818 | .pagination>li:first-child>a,.pagination>li:first-child>span{ 2819 | border-left-width:1px; 2820 | border-bottom-left-radius:4px; 2821 | border-top-left-radius:4px 2822 | } 2823 | 2824 | .pagination>li:last-child>a,.pagination>li:last-child>span{ 2825 | border-top-right-radius:4px; 2826 | border-bottom-right-radius:4px 2827 | } 2828 | 2829 | .pagination>li>a:hover,.pagination>li>a:focus,.pagination>.active>a,.pagination>.active>span{ 2830 | background-color:#f5f5f5 2831 | } 2832 | 2833 | .pagination>.active>a,.pagination>.active>span{ 2834 | color:#999; 2835 | cursor:default 2836 | } 2837 | 2838 | .pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{ 2839 | color:#999; 2840 | cursor:not-allowed; 2841 | background-color:#fff 2842 | } 2843 | 2844 | .pagination-large>li>a,.pagination-large>li>span{ 2845 | padding:14px 16px; 2846 | font-size:18px 2847 | } 2848 | 2849 | .pagination-large>li:first-child>a,.pagination-large>li:first-child>span{ 2850 | border-bottom-left-radius:6px; 2851 | border-top-left-radius:6px 2852 | } 2853 | 2854 | .pagination-large>li:last-child>a,.pagination-large>li:last-child>span{ 2855 | border-top-right-radius:6px; 2856 | border-bottom-right-radius:6px 2857 | } 2858 | 2859 | .pagination-small>li>a,.pagination-small>li>span{ 2860 | padding:5px 10px; 2861 | font-size:12px 2862 | } 2863 | 2864 | .pagination-small>li:first-child>a,.pagination-small>li:first-child>span{ 2865 | border-bottom-left-radius:3px; 2866 | border-top-left-radius:3px 2867 | } 2868 | 2869 | .pagination-small>li:last-child>a,.pagination-small>li:last-child>span{ 2870 | border-top-right-radius:3px; 2871 | border-bottom-right-radius:3px 2872 | } 2873 | 2874 | .pager{ 2875 | padding-left:0; 2876 | margin:20px 0; 2877 | text-align:center; 2878 | list-style:none 2879 | } 2880 | 2881 | .pager:before,.pager:after{ 2882 | display:table; 2883 | content:" " 2884 | } 2885 | 2886 | .pager:after{ 2887 | clear:both 2888 | } 2889 | 2890 | .pager:before,.pager:after{ 2891 | display:table; 2892 | content:" " 2893 | } 2894 | 2895 | .pager:after{ 2896 | clear:both 2897 | } 2898 | 2899 | .pager li{ 2900 | display:inline 2901 | } 2902 | 2903 | .pager li>a,.pager li>span{ 2904 | display:inline-block; 2905 | padding:5px 14px; 2906 | background-color:#fff; 2907 | border:1px solid #ddd; 2908 | border-radius:15px 2909 | } 2910 | 2911 | .pager li>a:hover,.pager li>a:focus{ 2912 | text-decoration:none; 2913 | background-color:#f5f5f5 2914 | } 2915 | 2916 | .pager .next>a,.pager .next>span{ 2917 | float:right 2918 | } 2919 | 2920 | .pager .previous>a,.pager .previous>span{ 2921 | float:left 2922 | } 2923 | 2924 | .pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{ 2925 | color:#999; 2926 | cursor:not-allowed; 2927 | background-color:#fff 2928 | } 2929 | 2930 | .modal-open{ 2931 | overflow:hidden 2932 | } 2933 | 2934 | .modal{ 2935 | position:fixed; 2936 | top:0; 2937 | right:0; 2938 | bottom:0; 2939 | left:0; 2940 | z-index:1040; 2941 | display:none; 2942 | overflow:auto; 2943 | overflow-y:scroll 2944 | } 2945 | 2946 | .modal.fade .modal-dialog{ 2947 | -webkit-transform:translate(0,-25%); 2948 | -ms-transform:translate(0,-25%); 2949 | transform:translate(0,-25%); 2950 | -webkit-transition:-webkit-transform .3s ease-out; 2951 | -moz-transition:-moz-transform .3s ease-out; 2952 | -o-transition:-o-transform .3s ease-out; 2953 | transition:transform .3s ease-out 2954 | } 2955 | 2956 | .modal.fade.in .modal-dialog{ 2957 | -webkit-transform:translate(0,0); 2958 | -ms-transform:translate(0,0); 2959 | transform:translate(0,0) 2960 | } 2961 | 2962 | .modal-dialog{ 2963 | z-index:1050; 2964 | width:auto; 2965 | padding:10px; 2966 | margin-right:auto; 2967 | margin-left:auto 2968 | } 2969 | 2970 | .modal-content{ 2971 | position:relative; 2972 | background-color:#fff; 2973 | border:1px solid #999; 2974 | border:1px solid rgba(0,0,0,0.2); 2975 | border-radius:6px; 2976 | outline:0; 2977 | -webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5); 2978 | box-shadow:0 3px 9px rgba(0,0,0,0.5); 2979 | background-clip:padding-box 2980 | } 2981 | 2982 | .modal-backdrop{ 2983 | position:fixed; 2984 | top:0; 2985 | right:0; 2986 | bottom:0; 2987 | left:0; 2988 | z-index:1030; 2989 | background-color:#000 2990 | } 2991 | 2992 | .modal-backdrop.fade{ 2993 | opacity:0; 2994 | filter:alpha(opacity=0) 2995 | } 2996 | 2997 | .modal-backdrop.fade.in{ 2998 | opacity:.5; 2999 | filter:alpha(opacity=50) 3000 | } 3001 | 3002 | .modal-header{ 3003 | min-height:16.428571429px; 3004 | padding:15px; 3005 | border-bottom:1px solid #e5e5e5 3006 | } 3007 | 3008 | .modal-header .close{ 3009 | margin-top:-2px 3010 | } 3011 | 3012 | .modal-title{ 3013 | margin:0; 3014 | line-height:1.428571429 3015 | } 3016 | 3017 | .modal-body{ 3018 | position:relative; 3019 | padding:20px 3020 | } 3021 | 3022 | .modal-footer{ 3023 | padding:19px 20px 20px; 3024 | margin-top:15px; 3025 | text-align:right; 3026 | border-top:1px solid #e5e5e5 3027 | } 3028 | 3029 | .modal-footer:before,.modal-footer:after{ 3030 | display:table; 3031 | content:" " 3032 | } 3033 | 3034 | .modal-footer:after{ 3035 | clear:both 3036 | } 3037 | 3038 | .modal-footer:before,.modal-footer:after{ 3039 | display:table; 3040 | content:" " 3041 | } 3042 | 3043 | .modal-footer:after{ 3044 | clear:both 3045 | } 3046 | 3047 | .modal-footer .btn+.btn{ 3048 | margin-bottom:0; 3049 | margin-left:5px 3050 | } 3051 | 3052 | .modal-footer .btn-group .btn+.btn{ 3053 | margin-left:-1px 3054 | } 3055 | 3056 | .modal-footer .btn-block+.btn-block{ 3057 | margin-left:0 3058 | } 3059 | 3060 | @media screen and (min-width:768px){ 3061 | .modal-dialog{ 3062 | right:auto; 3063 | left:50%; 3064 | width:600px; 3065 | padding-top:30px; 3066 | padding-bottom:30px 3067 | } 3068 | 3069 | .modal-content{ 3070 | -webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5); 3071 | box-shadow:0 5px 15px rgba(0,0,0,0.5) 3072 | } 3073 | 3074 | } 3075 | 3076 | .tooltip{ 3077 | position:absolute; 3078 | z-index:1030; 3079 | display:block; 3080 | font-size:12px; 3081 | line-height:1.4; 3082 | opacity:0; 3083 | filter:alpha(opacity=0); 3084 | visibility:visible 3085 | } 3086 | 3087 | .tooltip.in{ 3088 | opacity:1; 3089 | filter:alpha(opacity=100) 3090 | } 3091 | 3092 | .tooltip.top{ 3093 | padding:5px 0; 3094 | margin-top:-3px 3095 | } 3096 | 3097 | .tooltip.right{ 3098 | padding:0 5px; 3099 | margin-left:3px 3100 | } 3101 | 3102 | .tooltip.bottom{ 3103 | padding:5px 0; 3104 | margin-top:3px 3105 | } 3106 | 3107 | .tooltip.left{ 3108 | padding:0 5px; 3109 | margin-left:-3px 3110 | } 3111 | 3112 | .tooltip-inner{ 3113 | max-width:200px; 3114 | padding:3px 8px; 3115 | color:#fff; 3116 | text-align:center; 3117 | text-decoration:none; 3118 | background-color:rgba(0,0,0,0.9); 3119 | border-radius:4px 3120 | } 3121 | 3122 | .tooltip-arrow{ 3123 | position:absolute; 3124 | width:0; 3125 | height:0; 3126 | border-color:transparent; 3127 | border-style:solid 3128 | } 3129 | 3130 | .tooltip.top .tooltip-arrow{ 3131 | bottom:0; 3132 | left:50%; 3133 | margin-left:-5px; 3134 | border-top-color:rgba(0,0,0,0.9); 3135 | border-width:5px 5px 0 3136 | } 3137 | 3138 | .tooltip.top-left .tooltip-arrow{ 3139 | bottom:0; 3140 | left:5px; 3141 | border-top-color:rgba(0,0,0,0.9); 3142 | border-width:5px 5px 0 3143 | } 3144 | 3145 | .tooltip.top-right .tooltip-arrow{ 3146 | right:5px; 3147 | bottom:0; 3148 | border-top-color:rgba(0,0,0,0.9); 3149 | border-width:5px 5px 0 3150 | } 3151 | 3152 | .tooltip.right .tooltip-arrow{ 3153 | top:50%; 3154 | left:0; 3155 | margin-top:-5px; 3156 | border-right-color:rgba(0,0,0,0.9); 3157 | border-width:5px 5px 5px 0 3158 | } 3159 | 3160 | .tooltip.left .tooltip-arrow{ 3161 | top:50%; 3162 | right:0; 3163 | margin-top:-5px; 3164 | border-left-color:rgba(0,0,0,0.9); 3165 | border-width:5px 0 5px 5px 3166 | } 3167 | 3168 | .tooltip.bottom .tooltip-arrow{ 3169 | top:0; 3170 | left:50%; 3171 | margin-left:-5px; 3172 | border-bottom-color:rgba(0,0,0,0.9); 3173 | border-width:0 5px 5px 3174 | } 3175 | 3176 | .tooltip.bottom-left .tooltip-arrow{ 3177 | top:0; 3178 | left:5px; 3179 | border-bottom-color:rgba(0,0,0,0.9); 3180 | border-width:0 5px 5px 3181 | } 3182 | 3183 | .tooltip.bottom-right .tooltip-arrow{ 3184 | top:0; 3185 | right:5px; 3186 | border-bottom-color:rgba(0,0,0,0.9); 3187 | border-width:0 5px 5px 3188 | } 3189 | 3190 | .popover{ 3191 | position:absolute; 3192 | top:0; 3193 | left:0; 3194 | z-index:1010; 3195 | display:none; 3196 | max-width:276px; 3197 | padding:1px; 3198 | text-align:left; 3199 | white-space:normal; 3200 | background-color:#fff; 3201 | border:1px solid #ccc; 3202 | border:1px solid rgba(0,0,0,0.2); 3203 | border-radius:6px; 3204 | -webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2); 3205 | box-shadow:0 5px 10px rgba(0,0,0,0.2); 3206 | background-clip:padding-box; 3207 | -webkit-bg-clip:padding-box; 3208 | -moz-bg-clip:padding 3209 | } 3210 | 3211 | .popover.top{ 3212 | margin-top:-10px 3213 | } 3214 | 3215 | .popover.right{ 3216 | margin-left:10px 3217 | } 3218 | 3219 | .popover.bottom{ 3220 | margin-top:10px 3221 | } 3222 | 3223 | .popover.left{ 3224 | margin-left:-10px 3225 | } 3226 | 3227 | .popover-title{ 3228 | padding:8px 14px; 3229 | margin:0; 3230 | font-size:14px; 3231 | font-weight:normal; 3232 | line-height:18px; 3233 | background-color:#f7f7f7; 3234 | border-bottom:1px solid #ebebeb; 3235 | border-radius:5px 5px 0 0 3236 | } 3237 | 3238 | .popover-content{ 3239 | padding:9px 14px 3240 | } 3241 | 3242 | .popover .arrow,.popover .arrow:after{ 3243 | position:absolute; 3244 | display:block; 3245 | width:0; 3246 | height:0; 3247 | border-color:transparent; 3248 | border-style:solid 3249 | } 3250 | 3251 | .popover .arrow{ 3252 | border-width:11px 3253 | } 3254 | 3255 | .popover .arrow:after{ 3256 | border-width:10px; 3257 | content:"" 3258 | } 3259 | 3260 | .popover.top .arrow{ 3261 | bottom:-11px; 3262 | left:50%; 3263 | margin-left:-11px; 3264 | border-top-color:#999; 3265 | border-top-color:rgba(0,0,0,0.25); 3266 | border-bottom-width:0 3267 | } 3268 | 3269 | .popover.top .arrow:after{ 3270 | bottom:1px; 3271 | margin-left:-10px; 3272 | border-top-color:#fff; 3273 | border-bottom-width:0; 3274 | content:" " 3275 | } 3276 | 3277 | .popover.right .arrow{ 3278 | top:50%; 3279 | left:-11px; 3280 | margin-top:-11px; 3281 | border-right-color:#999; 3282 | border-right-color:rgba(0,0,0,0.25); 3283 | border-left-width:0 3284 | } 3285 | 3286 | .popover.right .arrow:after{ 3287 | bottom:-10px; 3288 | left:1px; 3289 | border-right-color:#fff; 3290 | border-left-width:0; 3291 | content:" " 3292 | } 3293 | 3294 | .popover.bottom .arrow{ 3295 | top:-11px; 3296 | left:50%; 3297 | margin-left:-11px; 3298 | border-bottom-color:#999; 3299 | border-bottom-color:rgba(0,0,0,0.25); 3300 | border-top-width:0 3301 | } 3302 | 3303 | .popover.bottom .arrow:after{ 3304 | top:1px; 3305 | margin-left:-10px; 3306 | border-bottom-color:#fff; 3307 | border-top-width:0; 3308 | content:" " 3309 | } 3310 | 3311 | .popover.left .arrow{ 3312 | top:50%; 3313 | right:-11px; 3314 | margin-top:-11px; 3315 | border-left-color:#999; 3316 | border-left-color:rgba(0,0,0,0.25); 3317 | border-right-width:0 3318 | } 3319 | 3320 | .popover.left .arrow:after{ 3321 | right:1px; 3322 | bottom:-10px; 3323 | border-left-color:#fff; 3324 | border-right-width:0; 3325 | content:" " 3326 | } 3327 | 3328 | .alert{ 3329 | padding:10px 35px 10px 15px; 3330 | margin-bottom:20px; 3331 | color:#c09853; 3332 | background-color:#fcf8e3; 3333 | border:1px solid #fbeed5; 3334 | border-radius:4px 3335 | } 3336 | 3337 | .alert h4{ 3338 | margin-top:0; 3339 | color:inherit 3340 | } 3341 | 3342 | .alert hr{ 3343 | border-top-color:#f8e5be 3344 | } 3345 | 3346 | .alert .alert-link{ 3347 | font-weight:500; 3348 | color:#a47e3c 3349 | } 3350 | 3351 | .alert .close{ 3352 | position:relative; 3353 | top:-2px; 3354 | right:-21px; 3355 | color:inherit 3356 | } 3357 | 3358 | .alert-success{ 3359 | color:#468847; 3360 | background-color:#dff0d8; 3361 | border-color:#d6e9c6 3362 | } 3363 | 3364 | .alert-success hr{ 3365 | border-top-color:#c9e2b3 3366 | } 3367 | 3368 | .alert-success .alert-link{ 3369 | color:#356635 3370 | } 3371 | 3372 | .alert-danger{ 3373 | color:#b94a48; 3374 | background-color:#f2dede; 3375 | border-color:#eed3d7 3376 | } 3377 | 3378 | .alert-danger hr{ 3379 | border-top-color:#e6c1c7 3380 | } 3381 | 3382 | .alert-danger .alert-link{ 3383 | color:#953b39 3384 | } 3385 | 3386 | .alert-info{ 3387 | color:#3a87ad; 3388 | background-color:#d9edf7; 3389 | border-color:#bce8f1 3390 | } 3391 | 3392 | .alert-info hr{ 3393 | border-top-color:#a6e1ec 3394 | } 3395 | 3396 | .alert-info .alert-link{ 3397 | color:#2d6987 3398 | } 3399 | 3400 | .alert-block{ 3401 | padding-top:15px; 3402 | padding-bottom:15px 3403 | } 3404 | 3405 | .alert-block>p,.alert-block>ul{ 3406 | margin-bottom:0 3407 | } 3408 | 3409 | .alert-block p+p{ 3410 | margin-top:5px 3411 | } 3412 | 3413 | .thumbnail,.img-thumbnail{ 3414 | padding:4px; 3415 | line-height:1.428571429; 3416 | background-color:#fff; 3417 | border:1px solid #ddd; 3418 | border-radius:4px; 3419 | -webkit-transition:all .2s ease-in-out; 3420 | transition:all .2s ease-in-out 3421 | } 3422 | 3423 | .thumbnail{ 3424 | display:block 3425 | } 3426 | 3427 | .thumbnail>img,.img-thumbnail{ 3428 | display:inline-block; 3429 | height:auto; 3430 | max-width:100% 3431 | } 3432 | 3433 | a.thumbnail:hover,a.thumbnail:focus{ 3434 | border-color:#428bca 3435 | } 3436 | 3437 | .thumbnail>img{ 3438 | margin-right:auto; 3439 | margin-left:auto 3440 | } 3441 | 3442 | .thumbnail .caption{ 3443 | padding:9px; 3444 | color:#333 3445 | } 3446 | 3447 | .media,.media-body{ 3448 | overflow:hidden; 3449 | zoom:1 3450 | } 3451 | 3452 | .media,.media .media{ 3453 | margin-top:15px 3454 | } 3455 | 3456 | .media:first-child{ 3457 | margin-top:0 3458 | } 3459 | 3460 | .media-object{ 3461 | display:block 3462 | } 3463 | 3464 | .media-heading{ 3465 | margin:0 0 5px 3466 | } 3467 | 3468 | .media>.pull-left{ 3469 | margin-right:10px 3470 | } 3471 | 3472 | .media>.pull-right{ 3473 | margin-left:10px 3474 | } 3475 | 3476 | .media-list{ 3477 | padding-left:0; 3478 | list-style:none 3479 | } 3480 | 3481 | .label{ 3482 | display:inline; 3483 | padding:.25em .6em; 3484 | font-size:75%; 3485 | font-weight:500; 3486 | line-height:1; 3487 | color:#fff; 3488 | text-align:center; 3489 | white-space:nowrap; 3490 | vertical-align:middle; 3491 | background-color:#999; 3492 | border-radius:.25em 3493 | } 3494 | 3495 | .label[href]:hover,.label[href]:focus{ 3496 | color:#fff; 3497 | text-decoration:none; 3498 | cursor:pointer; 3499 | background-color:#808080 3500 | } 3501 | 3502 | .label-danger{ 3503 | background-color:#d9534f 3504 | } 3505 | 3506 | .label-danger[href]:hover,.label-danger[href]:focus{ 3507 | background-color:#c9302c 3508 | } 3509 | 3510 | .label-success{ 3511 | background-color:#5cb85c 3512 | } 3513 | 3514 | .label-success[href]:hover,.label-success[href]:focus{ 3515 | background-color:#449d44 3516 | } 3517 | 3518 | .label-warning{ 3519 | background-color:#f0ad4e 3520 | } 3521 | 3522 | .label-warning[href]:hover,.label-warning[href]:focus{ 3523 | background-color:#ec971f 3524 | } 3525 | 3526 | .label-info{ 3527 | background-color:#5bc0de 3528 | } 3529 | 3530 | .label-info[href]:hover,.label-info[href]:focus{ 3531 | background-color:#31b0d5 3532 | } 3533 | 3534 | .badge{ 3535 | display:inline-block; 3536 | min-width:10px; 3537 | padding:3px 7px; 3538 | font-size:12px; 3539 | font-weight:bold; 3540 | line-height:1; 3541 | color:#fff; 3542 | text-align:center; 3543 | white-space:nowrap; 3544 | vertical-align:middle; 3545 | background-color:#999; 3546 | border-radius:10px 3547 | } 3548 | 3549 | .badge:empty{ 3550 | display:none 3551 | } 3552 | 3553 | a.badge:hover,a.badge:focus{ 3554 | color:#fff; 3555 | text-decoration:none; 3556 | cursor:pointer 3557 | } 3558 | 3559 | .btn .badge{ 3560 | position:relative; 3561 | top:-1px 3562 | } 3563 | 3564 | a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{ 3565 | color:#428bca; 3566 | background-color:#fff 3567 | } 3568 | 3569 | .nav-pills>li>a>.badge{ 3570 | margin-left:3px 3571 | } 3572 | 3573 | @-webkit-keyframes progress-bar-stripes{ 3574 | from{ 3575 | background-position:40px 0 3576 | } 3577 | 3578 | to{ 3579 | background-position:0 0 3580 | } 3581 | 3582 | } 3583 | 3584 | @-moz-keyframes progress-bar-stripes{ 3585 | from{ 3586 | background-position:40px 0 3587 | } 3588 | 3589 | to{ 3590 | background-position:0 0 3591 | } 3592 | 3593 | } 3594 | 3595 | @-ms-keyframes progress-bar-stripes{ 3596 | from{ 3597 | background-position:40px 0 3598 | } 3599 | 3600 | to{ 3601 | background-position:0 0 3602 | } 3603 | 3604 | } 3605 | 3606 | @-o-keyframes progress-bar-stripes{ 3607 | from{ 3608 | background-position:0 0 3609 | } 3610 | 3611 | to{ 3612 | background-position:40px 0 3613 | } 3614 | 3615 | } 3616 | 3617 | @keyframes progress-bar-stripes{ 3618 | from{ 3619 | background-position:40px 0 3620 | } 3621 | 3622 | to{ 3623 | background-position:0 0 3624 | } 3625 | 3626 | } 3627 | 3628 | .progress{ 3629 | height:20px; 3630 | margin-bottom:20px; 3631 | overflow:hidden; 3632 | background-color:#f5f5f5; 3633 | border-radius:4px; 3634 | -webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1); 3635 | box-shadow:inset 0 1px 2px rgba(0,0,0,0.1) 3636 | } 3637 | 3638 | .progress-bar{ 3639 | float:left; 3640 | width:0; 3641 | height:100%; 3642 | font-size:12px; 3643 | color:#fff; 3644 | text-align:center; 3645 | background-color:#428bca; 3646 | -webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15); 3647 | box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15); 3648 | -webkit-transition:width .6s ease; 3649 | transition:width .6s ease 3650 | } 3651 | 3652 | .progress-striped .progress-bar{ 3653 | background-color:#428bca; 3654 | 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)); 3655 | 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); 3656 | 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); 3657 | 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); 3658 | background-size:40px 40px 3659 | } 3660 | 3661 | .progress.active .progress-bar{ 3662 | -webkit-animation:progress-bar-stripes 2s linear infinite; 3663 | -moz-animation:progress-bar-stripes 2s linear infinite; 3664 | -ms-animation:progress-bar-stripes 2s linear infinite; 3665 | -o-animation:progress-bar-stripes 2s linear infinite; 3666 | animation:progress-bar-stripes 2s linear infinite 3667 | } 3668 | 3669 | .progress-bar-danger{ 3670 | background-color:#d9534f 3671 | } 3672 | 3673 | .progress-striped .progress-bar-danger{ 3674 | background-color:#d9534f; 3675 | 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)); 3676 | 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); 3677 | 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); 3678 | 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) 3679 | } 3680 | 3681 | .progress-bar-success{ 3682 | background-color:#5cb85c 3683 | } 3684 | 3685 | .progress-striped .progress-bar-success{ 3686 | background-color:#5cb85c; 3687 | 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)); 3688 | 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); 3689 | 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); 3690 | 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) 3691 | } 3692 | 3693 | .progress-bar-warning{ 3694 | background-color:#f0ad4e 3695 | } 3696 | 3697 | .progress-striped .progress-bar-warning{ 3698 | background-color:#f0ad4e; 3699 | 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)); 3700 | 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); 3701 | 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); 3702 | 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) 3703 | } 3704 | 3705 | .progress-bar-info{ 3706 | background-color:#5bc0de 3707 | } 3708 | 3709 | .progress-striped .progress-bar-info{ 3710 | background-color:#5bc0de; 3711 | 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)); 3712 | 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); 3713 | 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); 3714 | 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) 3715 | } 3716 | 3717 | .accordion{ 3718 | margin-bottom:20px 3719 | } 3720 | 3721 | .accordion-group{ 3722 | margin-bottom:2px; 3723 | border:1px solid #e5e5e5; 3724 | border-radius:4px 3725 | } 3726 | 3727 | .accordion-heading{ 3728 | border-bottom:0 3729 | } 3730 | 3731 | .accordion-heading .accordion-toggle{ 3732 | display:block; 3733 | padding:8px 15px; 3734 | cursor:pointer 3735 | } 3736 | 3737 | .accordion-inner{ 3738 | padding:9px 15px; 3739 | border-top:1px solid #e5e5e5 3740 | } 3741 | 3742 | .carousel{ 3743 | position:relative 3744 | } 3745 | 3746 | .carousel-inner{ 3747 | position:relative; 3748 | width:100%; 3749 | overflow:hidden 3750 | } 3751 | 3752 | .carousel-inner>.item{ 3753 | position:relative; 3754 | display:none; 3755 | -webkit-transition:.6s ease-in-out left; 3756 | transition:.6s ease-in-out left 3757 | } 3758 | 3759 | .carousel-inner>.item>img,.carousel-inner>.item>a>img{ 3760 | display:inline-block; 3761 | height:auto; 3762 | max-width:100%; 3763 | line-height:1 3764 | } 3765 | 3766 | .carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{ 3767 | display:block 3768 | } 3769 | 3770 | .carousel-inner>.active{ 3771 | left:0 3772 | } 3773 | 3774 | .carousel-inner>.next,.carousel-inner>.prev{ 3775 | position:absolute; 3776 | top:0; 3777 | width:100% 3778 | } 3779 | 3780 | .carousel-inner>.next{ 3781 | left:100% 3782 | } 3783 | 3784 | .carousel-inner>.prev{ 3785 | left:-100% 3786 | } 3787 | 3788 | .carousel-inner>.next.left,.carousel-inner>.prev.right{ 3789 | left:0 3790 | } 3791 | 3792 | .carousel-inner>.active.left{ 3793 | left:-100% 3794 | } 3795 | 3796 | .carousel-inner>.active.right{ 3797 | left:100% 3798 | } 3799 | 3800 | .carousel-control{ 3801 | position:absolute; 3802 | top:0; 3803 | bottom:0; 3804 | left:0; 3805 | width:15%; 3806 | font-size:20px; 3807 | color:#fff; 3808 | text-align:center; 3809 | text-shadow:0 1px 2px rgba(0,0,0,0.6); 3810 | opacity:.5; 3811 | filter:alpha(opacity=50) 3812 | } 3813 | 3814 | .carousel-control.left{ 3815 | background-color:rgba(0,0,0,0.0001); 3816 | background-color:transparent; 3817 | background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001))); 3818 | background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%)); 3819 | background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%); 3820 | background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%); 3821 | background-repeat:repeat-x; 3822 | filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1) 3823 | } 3824 | 3825 | .carousel-control.right{ 3826 | right:0; 3827 | left:auto; 3828 | background-color:rgba(0,0,0,0.5); 3829 | background-color:transparent; 3830 | background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5))); 3831 | background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%)); 3832 | background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%); 3833 | background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%); 3834 | background-repeat:repeat-x; 3835 | filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1) 3836 | } 3837 | 3838 | .carousel-control:hover,.carousel-control:focus{ 3839 | color:#fff; 3840 | text-decoration:none; 3841 | opacity:.9; 3842 | filter:alpha(opacity=90) 3843 | } 3844 | 3845 | .carousel-control .glyphicon,.carousel-control .icon-prev,.carousel-control .icon-next{ 3846 | position:absolute; 3847 | top:50%; 3848 | left:50%; 3849 | z-index:5; 3850 | display:inline-block; 3851 | width:20px; 3852 | height:20px; 3853 | margin-top:-10px; 3854 | margin-left:-10px; 3855 | font-family:serif 3856 | } 3857 | 3858 | .carousel-control .icon-prev:before{ 3859 | content:'\2039' 3860 | } 3861 | 3862 | .carousel-control .icon-next:before{ 3863 | content:'\203a' 3864 | } 3865 | 3866 | .carousel-indicators{ 3867 | position:absolute; 3868 | bottom:10px; 3869 | left:50%; 3870 | z-index:15; 3871 | width:120px; 3872 | padding-left:0; 3873 | margin-left:-60px; 3874 | text-align:center; 3875 | list-style:none 3876 | } 3877 | 3878 | .carousel-indicators li{ 3879 | display:inline-block; 3880 | width:10px; 3881 | height:10px; 3882 | margin:1px; 3883 | text-indent:-999px; 3884 | cursor:pointer; 3885 | border:1px solid #fff; 3886 | border-radius:10px 3887 | } 3888 | 3889 | .carousel-indicators .active{ 3890 | width:12px; 3891 | height:12px; 3892 | margin:0; 3893 | background-color:#fff 3894 | } 3895 | 3896 | .carousel-caption{ 3897 | position:absolute; 3898 | right:15%; 3899 | bottom:20px; 3900 | left:15%; 3901 | z-index:10; 3902 | padding-top:20px; 3903 | padding-bottom:20px; 3904 | color:#fff; 3905 | text-align:center; 3906 | text-shadow:0 1px 2px rgba(0,0,0,0.6) 3907 | } 3908 | 3909 | .carousel-caption .btn{ 3910 | text-shadow:none 3911 | } 3912 | 3913 | @media screen and (min-width:768px){ 3914 | .carousel-control .glyphicon,.carousel-control .icon-prev,.carousel-control .icon-next{ 3915 | width:30px; 3916 | height:30px; 3917 | margin-top:-15px; 3918 | margin-left:-15px; 3919 | font-size:30px 3920 | } 3921 | 3922 | .carousel-caption{ 3923 | right:20%; 3924 | left:20%; 3925 | padding-bottom:30px 3926 | } 3927 | 3928 | .carousel-indicators{ 3929 | bottom:20px 3930 | } 3931 | 3932 | } 3933 | 3934 | .jumbotron{ 3935 | padding:30px; 3936 | margin-bottom:30px; 3937 | font-size:21px; 3938 | font-weight:200; 3939 | line-height:2.1428571435; 3940 | color:inherit; 3941 | background-color:#eee 3942 | } 3943 | 3944 | .jumbotron h1{ 3945 | line-height:1; 3946 | color:inherit 3947 | } 3948 | 3949 | .jumbotron p{ 3950 | line-height:1.4 3951 | } 3952 | 3953 | @media screen and (min-width:768px){ 3954 | .jumbotron{ 3955 | padding:50px 60px; 3956 | border-radius:6px 3957 | } 3958 | 3959 | .jumbotron h1{ 3960 | font-size:63px 3961 | } 3962 | 3963 | } 3964 | 3965 | .clearfix:before,.clearfix:after{ 3966 | display:table; 3967 | content:" " 3968 | } 3969 | 3970 | .clearfix:after{ 3971 | clear:both 3972 | } 3973 | 3974 | .pull-right{ 3975 | float:right 3976 | } 3977 | 3978 | .pull-left{ 3979 | float:left 3980 | } 3981 | 3982 | .hide{ 3983 | display:none!important 3984 | } 3985 | 3986 | .show{ 3987 | display:block!important 3988 | } 3989 | 3990 | .invisible{ 3991 | visibility:hidden 3992 | } 3993 | 3994 | .text-hide{ 3995 | font:0/0 a; 3996 | color:transparent; 3997 | text-shadow:none; 3998 | background-color:transparent; 3999 | border:0 4000 | } 4001 | 4002 | .affix{ 4003 | position:fixed 4004 | } 4005 | 4006 | @-ms-viewport{ 4007 | width:device-width 4008 | } 4009 | 4010 | @media screen and (max-width:400px){ 4011 | @-ms-viewport{ 4012 | width:320px 4013 | } 4014 | 4015 | } 4016 | 4017 | .hidden{ 4018 | display:none!important; 4019 | visibility:hidden!important 4020 | } 4021 | 4022 | .visible-sm{ 4023 | display:block!important 4024 | } 4025 | 4026 | tr.visible-sm{ 4027 | display:table-row!important 4028 | } 4029 | 4030 | th.visible-sm,td.visible-sm{ 4031 | display:table-cell!important 4032 | } 4033 | 4034 | .visible-md{ 4035 | display:none!important 4036 | } 4037 | 4038 | tr.visible-md{ 4039 | display:none!important 4040 | } 4041 | 4042 | th.visible-md,td.visible-md{ 4043 | display:none!important 4044 | } 4045 | 4046 | .visible-lg{ 4047 | display:none!important 4048 | } 4049 | 4050 | tr.visible-lg{ 4051 | display:none!important 4052 | } 4053 | 4054 | th.visible-lg,td.visible-lg{ 4055 | display:none!important 4056 | } 4057 | 4058 | .hidden-sm{ 4059 | display:none!important 4060 | } 4061 | 4062 | tr.hidden-sm{ 4063 | display:none!important 4064 | } 4065 | 4066 | th.hidden-sm,td.hidden-sm{ 4067 | display:none!important 4068 | } 4069 | 4070 | .hidden-md{ 4071 | display:block!important 4072 | } 4073 | 4074 | tr.hidden-md{ 4075 | display:table-row!important 4076 | } 4077 | 4078 | th.hidden-md,td.hidden-md{ 4079 | display:table-cell!important 4080 | } 4081 | 4082 | .hidden-lg{ 4083 | display:block!important 4084 | } 4085 | 4086 | tr.hidden-lg{ 4087 | display:table-row!important 4088 | } 4089 | 4090 | th.hidden-lg,td.hidden-lg{ 4091 | display:table-cell!important 4092 | } 4093 | 4094 | @media(min-width:768px) and (max-width:991px){ 4095 | .visible-sm{ 4096 | display:none!important 4097 | } 4098 | 4099 | tr.visible-sm{ 4100 | display:none!important 4101 | } 4102 | 4103 | th.visible-sm,td.visible-sm{ 4104 | display:none!important 4105 | } 4106 | 4107 | .visible-md{ 4108 | display:block!important 4109 | } 4110 | 4111 | tr.visible-md{ 4112 | display:table-row!important 4113 | } 4114 | 4115 | th.visible-md,td.visible-md{ 4116 | display:table-cell!important 4117 | } 4118 | 4119 | .visible-lg{ 4120 | display:none!important 4121 | } 4122 | 4123 | tr.visible-lg{ 4124 | display:none!important 4125 | } 4126 | 4127 | th.visible-lg,td.visible-lg{ 4128 | display:none!important 4129 | } 4130 | 4131 | .hidden-sm{ 4132 | display:block!important 4133 | } 4134 | 4135 | tr.hidden-sm{ 4136 | display:table-row!important 4137 | } 4138 | 4139 | th.hidden-sm,td.hidden-sm{ 4140 | display:table-cell!important 4141 | } 4142 | 4143 | .hidden-md{ 4144 | display:none!important 4145 | } 4146 | 4147 | tr.hidden-md{ 4148 | display:none!important 4149 | } 4150 | 4151 | th.hidden-md,td.hidden-md{ 4152 | display:none!important 4153 | } 4154 | 4155 | .hidden-lg{ 4156 | display:block!important 4157 | } 4158 | 4159 | tr.hidden-lg{ 4160 | display:table-row!important 4161 | } 4162 | 4163 | th.hidden-lg,td.hidden-lg{ 4164 | display:table-cell!important 4165 | } 4166 | 4167 | } 4168 | 4169 | @media(min-width:992px){ 4170 | .visible-sm{ 4171 | display:none!important 4172 | } 4173 | 4174 | tr.visible-sm{ 4175 | display:none!important 4176 | } 4177 | 4178 | th.visible-sm,td.visible-sm{ 4179 | display:none!important 4180 | } 4181 | 4182 | .visible-md{ 4183 | display:none!important 4184 | } 4185 | 4186 | tr.visible-md{ 4187 | display:none!important 4188 | } 4189 | 4190 | th.visible-md,td.visible-md{ 4191 | display:none!important 4192 | } 4193 | 4194 | .visible-lg{ 4195 | display:block!important 4196 | } 4197 | 4198 | tr.visible-lg{ 4199 | display:table-row!important 4200 | } 4201 | 4202 | th.visible-lg,td.visible-lg{ 4203 | display:table-cell!important 4204 | } 4205 | 4206 | .hidden-sm{ 4207 | display:block!important 4208 | } 4209 | 4210 | tr.hidden-sm{ 4211 | display:table-row!important 4212 | } 4213 | 4214 | th.hidden-sm,td.hidden-sm{ 4215 | display:table-cell!important 4216 | } 4217 | 4218 | .hidden-md{ 4219 | display:block!important 4220 | } 4221 | 4222 | tr.hidden-md{ 4223 | display:table-row!important 4224 | } 4225 | 4226 | th.hidden-md,td.hidden-md{ 4227 | display:table-cell!important 4228 | } 4229 | 4230 | .hidden-lg{ 4231 | display:none!important 4232 | } 4233 | 4234 | tr.hidden-lg{ 4235 | display:none!important 4236 | } 4237 | 4238 | th.hidden-lg,td.hidden-lg{ 4239 | display:none!important 4240 | } 4241 | 4242 | } 4243 | 4244 | .visible-print{ 4245 | display:none!important 4246 | } 4247 | 4248 | tr.visible-print{ 4249 | display:none!important 4250 | } 4251 | 4252 | th.visible-print,td.visible-print{ 4253 | display:none!important 4254 | } 4255 | 4256 | @media print{ 4257 | .visible-print{ 4258 | display:block!important 4259 | } 4260 | 4261 | tr.visible-print{ 4262 | display:table-row!important 4263 | } 4264 | 4265 | th.visible-print,td.visible-print{ 4266 | display:table-cell!important 4267 | } 4268 | 4269 | .hidden-print{ 4270 | display:none!important 4271 | } 4272 | 4273 | tr.hidden-print{ 4274 | display:none!important 4275 | } 4276 | 4277 | th.hidden-print,td.hidden-print{ 4278 | display:none!important 4279 | } 4280 | 4281 | } 4282 | -------------------------------------------------------------------------------- /public/vue-resource.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * vue-resource v1.0.3 3 | * https://github.com/vuejs/vue-resource 4 | * Released under the MIT License. 5 | */ 6 | 7 | (function (global, factory) { 8 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 9 | typeof define === 'function' && define.amd ? define(factory) : 10 | (global.VueResource = factory()); 11 | }(this, (function () { 'use strict'; 12 | 13 | /** 14 | * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis) 15 | */ 16 | 17 | var RESOLVED = 0; 18 | var REJECTED = 1; 19 | var PENDING = 2; 20 | 21 | function Promise$1(executor) { 22 | 23 | this.state = PENDING; 24 | this.value = undefined; 25 | this.deferred = []; 26 | 27 | var promise = this; 28 | 29 | try { 30 | executor(function (x) { 31 | promise.resolve(x); 32 | }, function (r) { 33 | promise.reject(r); 34 | }); 35 | } catch (e) { 36 | promise.reject(e); 37 | } 38 | } 39 | 40 | Promise$1.reject = function (r) { 41 | return new Promise$1(function (resolve, reject) { 42 | reject(r); 43 | }); 44 | }; 45 | 46 | Promise$1.resolve = function (x) { 47 | return new Promise$1(function (resolve, reject) { 48 | resolve(x); 49 | }); 50 | }; 51 | 52 | Promise$1.all = function all(iterable) { 53 | return new Promise$1(function (resolve, reject) { 54 | var count = 0, 55 | result = []; 56 | 57 | if (iterable.length === 0) { 58 | resolve(result); 59 | } 60 | 61 | function resolver(i) { 62 | return function (x) { 63 | result[i] = x; 64 | count += 1; 65 | 66 | if (count === iterable.length) { 67 | resolve(result); 68 | } 69 | }; 70 | } 71 | 72 | for (var i = 0; i < iterable.length; i += 1) { 73 | Promise$1.resolve(iterable[i]).then(resolver(i), reject); 74 | } 75 | }); 76 | }; 77 | 78 | Promise$1.race = function race(iterable) { 79 | return new Promise$1(function (resolve, reject) { 80 | for (var i = 0; i < iterable.length; i += 1) { 81 | Promise$1.resolve(iterable[i]).then(resolve, reject); 82 | } 83 | }); 84 | }; 85 | 86 | var p$1 = Promise$1.prototype; 87 | 88 | p$1.resolve = function resolve(x) { 89 | var promise = this; 90 | 91 | if (promise.state === PENDING) { 92 | if (x === promise) { 93 | throw new TypeError('Promise settled with itself.'); 94 | } 95 | 96 | var called = false; 97 | 98 | try { 99 | var then = x && x['then']; 100 | 101 | if (x !== null && typeof x === 'object' && typeof then === 'function') { 102 | then.call(x, function (x) { 103 | if (!called) { 104 | promise.resolve(x); 105 | } 106 | called = true; 107 | }, function (r) { 108 | if (!called) { 109 | promise.reject(r); 110 | } 111 | called = true; 112 | }); 113 | return; 114 | } 115 | } catch (e) { 116 | if (!called) { 117 | promise.reject(e); 118 | } 119 | return; 120 | } 121 | 122 | promise.state = RESOLVED; 123 | promise.value = x; 124 | promise.notify(); 125 | } 126 | }; 127 | 128 | p$1.reject = function reject(reason) { 129 | var promise = this; 130 | 131 | if (promise.state === PENDING) { 132 | if (reason === promise) { 133 | throw new TypeError('Promise settled with itself.'); 134 | } 135 | 136 | promise.state = REJECTED; 137 | promise.value = reason; 138 | promise.notify(); 139 | } 140 | }; 141 | 142 | p$1.notify = function notify() { 143 | var promise = this; 144 | 145 | nextTick(function () { 146 | if (promise.state !== PENDING) { 147 | while (promise.deferred.length) { 148 | var deferred = promise.deferred.shift(), 149 | onResolved = deferred[0], 150 | onRejected = deferred[1], 151 | resolve = deferred[2], 152 | reject = deferred[3]; 153 | 154 | try { 155 | if (promise.state === RESOLVED) { 156 | if (typeof onResolved === 'function') { 157 | resolve(onResolved.call(undefined, promise.value)); 158 | } else { 159 | resolve(promise.value); 160 | } 161 | } else if (promise.state === REJECTED) { 162 | if (typeof onRejected === 'function') { 163 | resolve(onRejected.call(undefined, promise.value)); 164 | } else { 165 | reject(promise.value); 166 | } 167 | } 168 | } catch (e) { 169 | reject(e); 170 | } 171 | } 172 | } 173 | }); 174 | }; 175 | 176 | p$1.then = function then(onResolved, onRejected) { 177 | var promise = this; 178 | 179 | return new Promise$1(function (resolve, reject) { 180 | promise.deferred.push([onResolved, onRejected, resolve, reject]); 181 | promise.notify(); 182 | }); 183 | }; 184 | 185 | p$1.catch = function (onRejected) { 186 | return this.then(undefined, onRejected); 187 | }; 188 | 189 | /** 190 | * Promise adapter. 191 | */ 192 | 193 | if (typeof Promise === 'undefined') { 194 | window.Promise = Promise$1; 195 | } 196 | 197 | function PromiseObj(executor, context) { 198 | 199 | if (executor instanceof Promise) { 200 | this.promise = executor; 201 | } else { 202 | this.promise = new Promise(executor.bind(context)); 203 | } 204 | 205 | this.context = context; 206 | } 207 | 208 | PromiseObj.all = function (iterable, context) { 209 | return new PromiseObj(Promise.all(iterable), context); 210 | }; 211 | 212 | PromiseObj.resolve = function (value, context) { 213 | return new PromiseObj(Promise.resolve(value), context); 214 | }; 215 | 216 | PromiseObj.reject = function (reason, context) { 217 | return new PromiseObj(Promise.reject(reason), context); 218 | }; 219 | 220 | PromiseObj.race = function (iterable, context) { 221 | return new PromiseObj(Promise.race(iterable), context); 222 | }; 223 | 224 | var p = PromiseObj.prototype; 225 | 226 | p.bind = function (context) { 227 | this.context = context; 228 | return this; 229 | }; 230 | 231 | p.then = function (fulfilled, rejected) { 232 | 233 | if (fulfilled && fulfilled.bind && this.context) { 234 | fulfilled = fulfilled.bind(this.context); 235 | } 236 | 237 | if (rejected && rejected.bind && this.context) { 238 | rejected = rejected.bind(this.context); 239 | } 240 | 241 | return new PromiseObj(this.promise.then(fulfilled, rejected), this.context); 242 | }; 243 | 244 | p.catch = function (rejected) { 245 | 246 | if (rejected && rejected.bind && this.context) { 247 | rejected = rejected.bind(this.context); 248 | } 249 | 250 | return new PromiseObj(this.promise.catch(rejected), this.context); 251 | }; 252 | 253 | p.finally = function (callback) { 254 | 255 | return this.then(function (value) { 256 | callback.call(this); 257 | return value; 258 | }, function (reason) { 259 | callback.call(this); 260 | return Promise.reject(reason); 261 | }); 262 | }; 263 | 264 | /** 265 | * Utility functions. 266 | */ 267 | 268 | var debug = false;var util = {};var slice = [].slice; 269 | 270 | 271 | function Util (Vue) { 272 | util = Vue.util; 273 | debug = Vue.config.debug || !Vue.config.silent; 274 | } 275 | 276 | function warn(msg) { 277 | if (typeof console !== 'undefined' && debug) { 278 | console.warn('[VueResource warn]: ' + msg); 279 | } 280 | } 281 | 282 | function error(msg) { 283 | if (typeof console !== 'undefined') { 284 | console.error(msg); 285 | } 286 | } 287 | 288 | function nextTick(cb, ctx) { 289 | return util.nextTick(cb, ctx); 290 | } 291 | 292 | function trim(str) { 293 | return str.replace(/^\s*|\s*$/g, ''); 294 | } 295 | 296 | function toLower(str) { 297 | return str ? str.toLowerCase() : ''; 298 | } 299 | 300 | function toUpper(str) { 301 | return str ? str.toUpperCase() : ''; 302 | } 303 | 304 | var isArray = Array.isArray; 305 | 306 | function isString(val) { 307 | return typeof val === 'string'; 308 | } 309 | 310 | function isBoolean(val) { 311 | return val === true || val === false; 312 | } 313 | 314 | function isFunction(val) { 315 | return typeof val === 'function'; 316 | } 317 | 318 | function isObject(obj) { 319 | return obj !== null && typeof obj === 'object'; 320 | } 321 | 322 | function isPlainObject(obj) { 323 | return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype; 324 | } 325 | 326 | function isBlob(obj) { 327 | return typeof Blob !== 'undefined' && obj instanceof Blob; 328 | } 329 | 330 | function isFormData(obj) { 331 | return typeof FormData !== 'undefined' && obj instanceof FormData; 332 | } 333 | 334 | function when(value, fulfilled, rejected) { 335 | 336 | var promise = PromiseObj.resolve(value); 337 | 338 | if (arguments.length < 2) { 339 | return promise; 340 | } 341 | 342 | return promise.then(fulfilled, rejected); 343 | } 344 | 345 | function options(fn, obj, opts) { 346 | 347 | opts = opts || {}; 348 | 349 | if (isFunction(opts)) { 350 | opts = opts.call(obj); 351 | } 352 | 353 | return merge(fn.bind({ $vm: obj, $options: opts }), fn, { $options: opts }); 354 | } 355 | 356 | function each(obj, iterator) { 357 | 358 | var i, key; 359 | 360 | if (obj && typeof obj.length == 'number') { 361 | for (i = 0; i < obj.length; i++) { 362 | iterator.call(obj[i], obj[i], i); 363 | } 364 | } else if (isObject(obj)) { 365 | for (key in obj) { 366 | if (obj.hasOwnProperty(key)) { 367 | iterator.call(obj[key], obj[key], key); 368 | } 369 | } 370 | } 371 | 372 | return obj; 373 | } 374 | 375 | var assign = Object.assign || _assign; 376 | 377 | function merge(target) { 378 | 379 | var args = slice.call(arguments, 1); 380 | 381 | args.forEach(function (source) { 382 | _merge(target, source, true); 383 | }); 384 | 385 | return target; 386 | } 387 | 388 | function defaults(target) { 389 | 390 | var args = slice.call(arguments, 1); 391 | 392 | args.forEach(function (source) { 393 | 394 | for (var key in source) { 395 | if (target[key] === undefined) { 396 | target[key] = source[key]; 397 | } 398 | } 399 | }); 400 | 401 | return target; 402 | } 403 | 404 | function _assign(target) { 405 | 406 | var args = slice.call(arguments, 1); 407 | 408 | args.forEach(function (source) { 409 | _merge(target, source); 410 | }); 411 | 412 | return target; 413 | } 414 | 415 | function _merge(target, source, deep) { 416 | for (var key in source) { 417 | if (deep && (isPlainObject(source[key]) || isArray(source[key]))) { 418 | if (isPlainObject(source[key]) && !isPlainObject(target[key])) { 419 | target[key] = {}; 420 | } 421 | if (isArray(source[key]) && !isArray(target[key])) { 422 | target[key] = []; 423 | } 424 | _merge(target[key], source[key], deep); 425 | } else if (source[key] !== undefined) { 426 | target[key] = source[key]; 427 | } 428 | } 429 | } 430 | 431 | /** 432 | * Root Prefix Transform. 433 | */ 434 | 435 | function root (options, next) { 436 | 437 | var url = next(options); 438 | 439 | if (isString(options.root) && !url.match(/^(https?:)?\//)) { 440 | url = options.root + '/' + url; 441 | } 442 | 443 | return url; 444 | } 445 | 446 | /** 447 | * Query Parameter Transform. 448 | */ 449 | 450 | function query (options, next) { 451 | 452 | var urlParams = Object.keys(Url.options.params), 453 | query = {}, 454 | url = next(options); 455 | 456 | each(options.params, function (value, key) { 457 | if (urlParams.indexOf(key) === -1) { 458 | query[key] = value; 459 | } 460 | }); 461 | 462 | query = Url.params(query); 463 | 464 | if (query) { 465 | url += (url.indexOf('?') == -1 ? '?' : '&') + query; 466 | } 467 | 468 | return url; 469 | } 470 | 471 | /** 472 | * URL Template v2.0.6 (https://github.com/bramstein/url-template) 473 | */ 474 | 475 | function expand(url, params, variables) { 476 | 477 | var tmpl = parse(url), 478 | expanded = tmpl.expand(params); 479 | 480 | if (variables) { 481 | variables.push.apply(variables, tmpl.vars); 482 | } 483 | 484 | return expanded; 485 | } 486 | 487 | function parse(template) { 488 | 489 | var operators = ['+', '#', '.', '/', ';', '?', '&'], 490 | variables = []; 491 | 492 | return { 493 | vars: variables, 494 | expand: function (context) { 495 | return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { 496 | if (expression) { 497 | 498 | var operator = null, 499 | values = []; 500 | 501 | if (operators.indexOf(expression.charAt(0)) !== -1) { 502 | operator = expression.charAt(0); 503 | expression = expression.substr(1); 504 | } 505 | 506 | expression.split(/,/g).forEach(function (variable) { 507 | var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); 508 | values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3])); 509 | variables.push(tmp[1]); 510 | }); 511 | 512 | if (operator && operator !== '+') { 513 | 514 | var separator = ','; 515 | 516 | if (operator === '?') { 517 | separator = '&'; 518 | } else if (operator !== '#') { 519 | separator = operator; 520 | } 521 | 522 | return (values.length !== 0 ? operator : '') + values.join(separator); 523 | } else { 524 | return values.join(','); 525 | } 526 | } else { 527 | return encodeReserved(literal); 528 | } 529 | }); 530 | } 531 | }; 532 | } 533 | 534 | function getValues(context, operator, key, modifier) { 535 | 536 | var value = context[key], 537 | result = []; 538 | 539 | if (isDefined(value) && value !== '') { 540 | if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { 541 | value = value.toString(); 542 | 543 | if (modifier && modifier !== '*') { 544 | value = value.substring(0, parseInt(modifier, 10)); 545 | } 546 | 547 | result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null)); 548 | } else { 549 | if (modifier === '*') { 550 | if (Array.isArray(value)) { 551 | value.filter(isDefined).forEach(function (value) { 552 | result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null)); 553 | }); 554 | } else { 555 | Object.keys(value).forEach(function (k) { 556 | if (isDefined(value[k])) { 557 | result.push(encodeValue(operator, value[k], k)); 558 | } 559 | }); 560 | } 561 | } else { 562 | var tmp = []; 563 | 564 | if (Array.isArray(value)) { 565 | value.filter(isDefined).forEach(function (value) { 566 | tmp.push(encodeValue(operator, value)); 567 | }); 568 | } else { 569 | Object.keys(value).forEach(function (k) { 570 | if (isDefined(value[k])) { 571 | tmp.push(encodeURIComponent(k)); 572 | tmp.push(encodeValue(operator, value[k].toString())); 573 | } 574 | }); 575 | } 576 | 577 | if (isKeyOperator(operator)) { 578 | result.push(encodeURIComponent(key) + '=' + tmp.join(',')); 579 | } else if (tmp.length !== 0) { 580 | result.push(tmp.join(',')); 581 | } 582 | } 583 | } 584 | } else { 585 | if (operator === ';') { 586 | result.push(encodeURIComponent(key)); 587 | } else if (value === '' && (operator === '&' || operator === '?')) { 588 | result.push(encodeURIComponent(key) + '='); 589 | } else if (value === '') { 590 | result.push(''); 591 | } 592 | } 593 | 594 | return result; 595 | } 596 | 597 | function isDefined(value) { 598 | return value !== undefined && value !== null; 599 | } 600 | 601 | function isKeyOperator(operator) { 602 | return operator === ';' || operator === '&' || operator === '?'; 603 | } 604 | 605 | function encodeValue(operator, value, key) { 606 | 607 | value = operator === '+' || operator === '#' ? encodeReserved(value) : encodeURIComponent(value); 608 | 609 | if (key) { 610 | return encodeURIComponent(key) + '=' + value; 611 | } else { 612 | return value; 613 | } 614 | } 615 | 616 | function encodeReserved(str) { 617 | return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { 618 | if (!/%[0-9A-Fa-f]/.test(part)) { 619 | part = encodeURI(part); 620 | } 621 | return part; 622 | }).join(''); 623 | } 624 | 625 | /** 626 | * URL Template (RFC 6570) Transform. 627 | */ 628 | 629 | function template (options) { 630 | 631 | var variables = [], 632 | url = expand(options.url, options.params, variables); 633 | 634 | variables.forEach(function (key) { 635 | delete options.params[key]; 636 | }); 637 | 638 | return url; 639 | } 640 | 641 | /** 642 | * Service for URL templating. 643 | */ 644 | 645 | var ie = document.documentMode; 646 | var el = document.createElement('a'); 647 | 648 | function Url(url, params) { 649 | 650 | var self = this || {}, 651 | options = url, 652 | transform; 653 | 654 | if (isString(url)) { 655 | options = { url: url, params: params }; 656 | } 657 | 658 | options = merge({}, Url.options, self.$options, options); 659 | 660 | Url.transforms.forEach(function (handler) { 661 | transform = factory(handler, transform, self.$vm); 662 | }); 663 | 664 | return transform(options); 665 | } 666 | 667 | /** 668 | * Url options. 669 | */ 670 | 671 | Url.options = { 672 | url: '', 673 | root: null, 674 | params: {} 675 | }; 676 | 677 | /** 678 | * Url transforms. 679 | */ 680 | 681 | Url.transforms = [template, query, root]; 682 | 683 | /** 684 | * Encodes a Url parameter string. 685 | * 686 | * @param {Object} obj 687 | */ 688 | 689 | Url.params = function (obj) { 690 | 691 | var params = [], 692 | escape = encodeURIComponent; 693 | 694 | params.add = function (key, value) { 695 | 696 | if (isFunction(value)) { 697 | value = value(); 698 | } 699 | 700 | if (value === null) { 701 | value = ''; 702 | } 703 | 704 | this.push(escape(key) + '=' + escape(value)); 705 | }; 706 | 707 | serialize(params, obj); 708 | 709 | return params.join('&').replace(/%20/g, '+'); 710 | }; 711 | 712 | /** 713 | * Parse a URL and return its components. 714 | * 715 | * @param {String} url 716 | */ 717 | 718 | Url.parse = function (url) { 719 | 720 | if (ie) { 721 | el.href = url; 722 | url = el.href; 723 | } 724 | 725 | el.href = url; 726 | 727 | return { 728 | href: el.href, 729 | protocol: el.protocol ? el.protocol.replace(/:$/, '') : '', 730 | port: el.port, 731 | host: el.host, 732 | hostname: el.hostname, 733 | pathname: el.pathname.charAt(0) === '/' ? el.pathname : '/' + el.pathname, 734 | search: el.search ? el.search.replace(/^\?/, '') : '', 735 | hash: el.hash ? el.hash.replace(/^#/, '') : '' 736 | }; 737 | }; 738 | 739 | function factory(handler, next, vm) { 740 | return function (options) { 741 | return handler.call(vm, options, next); 742 | }; 743 | } 744 | 745 | function serialize(params, obj, scope) { 746 | 747 | var array = isArray(obj), 748 | plain = isPlainObject(obj), 749 | hash; 750 | 751 | each(obj, function (value, key) { 752 | 753 | hash = isObject(value) || isArray(value); 754 | 755 | if (scope) { 756 | key = scope + '[' + (plain || hash ? key : '') + ']'; 757 | } 758 | 759 | if (!scope && array) { 760 | params.add(value.name, value.value); 761 | } else if (hash) { 762 | serialize(params, value, key); 763 | } else { 764 | params.add(key, value); 765 | } 766 | }); 767 | } 768 | 769 | /** 770 | * XDomain client (Internet Explorer). 771 | */ 772 | 773 | function xdrClient (request) { 774 | return new PromiseObj(function (resolve) { 775 | 776 | var xdr = new XDomainRequest(), 777 | handler = function (_ref) { 778 | var type = _ref.type; 779 | 780 | 781 | var status = 0; 782 | 783 | if (type === 'load') { 784 | status = 200; 785 | } else if (type === 'error') { 786 | status = 500; 787 | } 788 | 789 | resolve(request.respondWith(xdr.responseText, { status: status })); 790 | }; 791 | 792 | request.abort = function () { 793 | return xdr.abort(); 794 | }; 795 | 796 | xdr.open(request.method, request.getUrl()); 797 | xdr.timeout = 0; 798 | xdr.onload = handler; 799 | xdr.onerror = handler; 800 | xdr.ontimeout = handler; 801 | xdr.onprogress = function () {}; 802 | xdr.send(request.getBody()); 803 | }); 804 | } 805 | 806 | /** 807 | * CORS Interceptor. 808 | */ 809 | 810 | var ORIGIN_URL = Url.parse(location.href); 811 | var SUPPORTS_CORS = 'withCredentials' in new XMLHttpRequest(); 812 | 813 | function cors (request, next) { 814 | 815 | if (!isBoolean(request.crossOrigin) && crossOrigin(request)) { 816 | request.crossOrigin = true; 817 | } 818 | 819 | if (request.crossOrigin) { 820 | 821 | if (!SUPPORTS_CORS) { 822 | request.client = xdrClient; 823 | } 824 | 825 | delete request.emulateHTTP; 826 | } 827 | 828 | next(); 829 | } 830 | 831 | function crossOrigin(request) { 832 | 833 | var requestUrl = Url.parse(Url(request)); 834 | 835 | return requestUrl.protocol !== ORIGIN_URL.protocol || requestUrl.host !== ORIGIN_URL.host; 836 | } 837 | 838 | /** 839 | * Body Interceptor. 840 | */ 841 | 842 | function body (request, next) { 843 | 844 | if (isFormData(request.body)) { 845 | 846 | request.headers.delete('Content-Type'); 847 | } else if (isObject(request.body) || isArray(request.body)) { 848 | 849 | if (request.emulateJSON) { 850 | request.body = Url.params(request.body); 851 | request.headers.set('Content-Type', 'application/x-www-form-urlencoded'); 852 | } else { 853 | request.body = JSON.stringify(request.body); 854 | } 855 | } 856 | 857 | next(function (response) { 858 | 859 | Object.defineProperty(response, 'data', { 860 | get: function () { 861 | return this.body; 862 | }, 863 | set: function (body) { 864 | this.body = body; 865 | } 866 | }); 867 | 868 | return response.bodyText ? when(response.text(), function (text) { 869 | 870 | var type = response.headers.get('Content-Type'); 871 | 872 | if (isString(type) && type.indexOf('application/json') === 0) { 873 | 874 | try { 875 | response.body = JSON.parse(text); 876 | } catch (e) { 877 | response.body = null; 878 | } 879 | } else { 880 | response.body = text; 881 | } 882 | 883 | return response; 884 | }) : response; 885 | }); 886 | } 887 | 888 | /** 889 | * JSONP client. 890 | */ 891 | 892 | function jsonpClient (request) { 893 | return new PromiseObj(function (resolve) { 894 | 895 | var name = request.jsonp || 'callback', 896 | callback = '_jsonp' + Math.random().toString(36).substr(2), 897 | body = null, 898 | handler, 899 | script; 900 | 901 | handler = function (_ref) { 902 | var type = _ref.type; 903 | 904 | 905 | var status = 0; 906 | 907 | if (type === 'load' && body !== null) { 908 | status = 200; 909 | } else if (type === 'error') { 910 | status = 500; 911 | } 912 | 913 | resolve(request.respondWith(body, { status: status })); 914 | 915 | delete window[callback]; 916 | document.body.removeChild(script); 917 | }; 918 | 919 | request.params[name] = callback; 920 | 921 | window[callback] = function (result) { 922 | body = JSON.stringify(result); 923 | }; 924 | 925 | script = document.createElement('script'); 926 | script.src = request.getUrl(); 927 | script.type = 'text/javascript'; 928 | script.async = true; 929 | script.onload = handler; 930 | script.onerror = handler; 931 | 932 | document.body.appendChild(script); 933 | }); 934 | } 935 | 936 | /** 937 | * JSONP Interceptor. 938 | */ 939 | 940 | function jsonp (request, next) { 941 | 942 | if (request.method == 'JSONP') { 943 | request.client = jsonpClient; 944 | } 945 | 946 | next(function (response) { 947 | 948 | if (request.method == 'JSONP') { 949 | 950 | return when(response.json(), function (json) { 951 | 952 | response.body = json; 953 | 954 | return response; 955 | }); 956 | } 957 | }); 958 | } 959 | 960 | /** 961 | * Before Interceptor. 962 | */ 963 | 964 | function before (request, next) { 965 | 966 | if (isFunction(request.before)) { 967 | request.before.call(this, request); 968 | } 969 | 970 | next(); 971 | } 972 | 973 | /** 974 | * HTTP method override Interceptor. 975 | */ 976 | 977 | function method (request, next) { 978 | 979 | if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) { 980 | request.headers.set('X-HTTP-Method-Override', request.method); 981 | request.method = 'POST'; 982 | } 983 | 984 | next(); 985 | } 986 | 987 | /** 988 | * Header Interceptor. 989 | */ 990 | 991 | function header (request, next) { 992 | 993 | var headers = assign({}, Http.headers.common, !request.crossOrigin ? Http.headers.custom : {}, Http.headers[toLower(request.method)]); 994 | 995 | each(headers, function (value, name) { 996 | if (!request.headers.has(name)) { 997 | request.headers.set(name, value); 998 | } 999 | }); 1000 | 1001 | next(); 1002 | } 1003 | 1004 | /** 1005 | * Timeout Interceptor. 1006 | */ 1007 | 1008 | function timeout (request, next) { 1009 | 1010 | var timeout; 1011 | 1012 | if (request.timeout) { 1013 | timeout = setTimeout(function () { 1014 | request.abort(); 1015 | }, request.timeout); 1016 | } 1017 | 1018 | next(function (response) { 1019 | 1020 | clearTimeout(timeout); 1021 | }); 1022 | } 1023 | 1024 | /** 1025 | * XMLHttp client. 1026 | */ 1027 | 1028 | function xhrClient (request) { 1029 | return new PromiseObj(function (resolve) { 1030 | 1031 | var xhr = new XMLHttpRequest(), 1032 | handler = function (event) { 1033 | 1034 | var response = request.respondWith('response' in xhr ? xhr.response : xhr.responseText, { 1035 | status: xhr.status === 1223 ? 204 : xhr.status, // IE9 status bug 1036 | statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText) 1037 | }); 1038 | 1039 | each(trim(xhr.getAllResponseHeaders()).split('\n'), function (row) { 1040 | response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1)); 1041 | }); 1042 | 1043 | resolve(response); 1044 | }; 1045 | 1046 | request.abort = function () { 1047 | return xhr.abort(); 1048 | }; 1049 | 1050 | if (request.progress) { 1051 | if (request.method === 'GET') { 1052 | xhr.addEventListener('progress', request.progress); 1053 | } else if (/^(POST|PUT)$/i.test(request.method)) { 1054 | xhr.upload.addEventListener('progress', request.progress); 1055 | } 1056 | } 1057 | 1058 | xhr.open(request.method, request.getUrl(), true); 1059 | 1060 | if ('responseType' in xhr) { 1061 | xhr.responseType = 'blob'; 1062 | } 1063 | 1064 | if (request.credentials === true) { 1065 | xhr.withCredentials = true; 1066 | } 1067 | 1068 | request.headers.forEach(function (value, name) { 1069 | xhr.setRequestHeader(name, value); 1070 | }); 1071 | 1072 | xhr.timeout = 0; 1073 | xhr.onload = handler; 1074 | xhr.onerror = handler; 1075 | xhr.send(request.getBody()); 1076 | }); 1077 | } 1078 | 1079 | /** 1080 | * Base client. 1081 | */ 1082 | 1083 | function Client (context) { 1084 | 1085 | var reqHandlers = [sendRequest], 1086 | resHandlers = [], 1087 | handler; 1088 | 1089 | if (!isObject(context)) { 1090 | context = null; 1091 | } 1092 | 1093 | function Client(request) { 1094 | return new PromiseObj(function (resolve) { 1095 | 1096 | function exec() { 1097 | 1098 | handler = reqHandlers.pop(); 1099 | 1100 | if (isFunction(handler)) { 1101 | handler.call(context, request, next); 1102 | } else { 1103 | warn('Invalid interceptor of type ' + typeof handler + ', must be a function'); 1104 | next(); 1105 | } 1106 | } 1107 | 1108 | function next(response) { 1109 | 1110 | if (isFunction(response)) { 1111 | 1112 | resHandlers.unshift(response); 1113 | } else if (isObject(response)) { 1114 | 1115 | resHandlers.forEach(function (handler) { 1116 | response = when(response, function (response) { 1117 | return handler.call(context, response) || response; 1118 | }); 1119 | }); 1120 | 1121 | when(response, resolve); 1122 | 1123 | return; 1124 | } 1125 | 1126 | exec(); 1127 | } 1128 | 1129 | exec(); 1130 | }, context); 1131 | } 1132 | 1133 | Client.use = function (handler) { 1134 | reqHandlers.push(handler); 1135 | }; 1136 | 1137 | return Client; 1138 | } 1139 | 1140 | function sendRequest(request, resolve) { 1141 | 1142 | var client = request.client || xhrClient; 1143 | 1144 | resolve(client(request)); 1145 | } 1146 | 1147 | var classCallCheck = function (instance, Constructor) { 1148 | if (!(instance instanceof Constructor)) { 1149 | throw new TypeError("Cannot call a class as a function"); 1150 | } 1151 | }; 1152 | 1153 | /** 1154 | * HTTP Headers. 1155 | */ 1156 | 1157 | var Headers = function () { 1158 | function Headers(headers) { 1159 | var _this = this; 1160 | 1161 | classCallCheck(this, Headers); 1162 | 1163 | 1164 | this.map = {}; 1165 | 1166 | each(headers, function (value, name) { 1167 | return _this.append(name, value); 1168 | }); 1169 | } 1170 | 1171 | Headers.prototype.has = function has(name) { 1172 | return getName(this.map, name) !== null; 1173 | }; 1174 | 1175 | Headers.prototype.get = function get(name) { 1176 | 1177 | var list = this.map[getName(this.map, name)]; 1178 | 1179 | return list ? list[0] : null; 1180 | }; 1181 | 1182 | Headers.prototype.getAll = function getAll(name) { 1183 | return this.map[getName(this.map, name)] || []; 1184 | }; 1185 | 1186 | Headers.prototype.set = function set(name, value) { 1187 | this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)]; 1188 | }; 1189 | 1190 | Headers.prototype.append = function append(name, value) { 1191 | 1192 | var list = this.getAll(name); 1193 | 1194 | if (list.length) { 1195 | list.push(trim(value)); 1196 | } else { 1197 | this.set(name, value); 1198 | } 1199 | }; 1200 | 1201 | Headers.prototype.delete = function _delete(name) { 1202 | delete this.map[getName(this.map, name)]; 1203 | }; 1204 | 1205 | Headers.prototype.forEach = function forEach(callback, thisArg) { 1206 | var _this2 = this; 1207 | 1208 | each(this.map, function (list, name) { 1209 | each(list, function (value) { 1210 | return callback.call(thisArg, value, name, _this2); 1211 | }); 1212 | }); 1213 | }; 1214 | 1215 | return Headers; 1216 | }(); 1217 | 1218 | function getName(map, name) { 1219 | return Object.keys(map).reduce(function (prev, curr) { 1220 | return toLower(name) === toLower(curr) ? curr : prev; 1221 | }, null); 1222 | } 1223 | 1224 | function normalizeName(name) { 1225 | 1226 | if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) { 1227 | throw new TypeError('Invalid character in header field name'); 1228 | } 1229 | 1230 | return trim(name); 1231 | } 1232 | 1233 | /** 1234 | * HTTP Response. 1235 | */ 1236 | 1237 | var Response = function () { 1238 | function Response(body, _ref) { 1239 | var url = _ref.url; 1240 | var headers = _ref.headers; 1241 | var status = _ref.status; 1242 | var statusText = _ref.statusText; 1243 | classCallCheck(this, Response); 1244 | 1245 | 1246 | this.url = url; 1247 | this.ok = status >= 200 && status < 300; 1248 | this.status = status || 0; 1249 | this.statusText = statusText || ''; 1250 | this.headers = new Headers(headers); 1251 | this.body = body; 1252 | 1253 | if (isString(body)) { 1254 | 1255 | this.bodyText = body; 1256 | } else if (isBlob(body)) { 1257 | 1258 | this.bodyBlob = body; 1259 | 1260 | if (isBlobText(body)) { 1261 | this.bodyText = blobText(body); 1262 | } 1263 | } 1264 | } 1265 | 1266 | Response.prototype.blob = function blob() { 1267 | return when(this.bodyBlob); 1268 | }; 1269 | 1270 | Response.prototype.text = function text() { 1271 | return when(this.bodyText); 1272 | }; 1273 | 1274 | Response.prototype.json = function json() { 1275 | return when(this.text(), function (text) { 1276 | return JSON.parse(text); 1277 | }); 1278 | }; 1279 | 1280 | return Response; 1281 | }(); 1282 | 1283 | function blobText(body) { 1284 | return new PromiseObj(function (resolve) { 1285 | 1286 | var reader = new FileReader(); 1287 | 1288 | reader.readAsText(body); 1289 | reader.onload = function () { 1290 | resolve(reader.result); 1291 | }; 1292 | }); 1293 | } 1294 | 1295 | function isBlobText(body) { 1296 | return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1; 1297 | } 1298 | 1299 | /** 1300 | * HTTP Request. 1301 | */ 1302 | 1303 | var Request = function () { 1304 | function Request(options) { 1305 | classCallCheck(this, Request); 1306 | 1307 | 1308 | this.body = null; 1309 | this.params = {}; 1310 | 1311 | assign(this, options, { 1312 | method: toUpper(options.method || 'GET') 1313 | }); 1314 | 1315 | if (!(this.headers instanceof Headers)) { 1316 | this.headers = new Headers(this.headers); 1317 | } 1318 | } 1319 | 1320 | Request.prototype.getUrl = function getUrl() { 1321 | return Url(this); 1322 | }; 1323 | 1324 | Request.prototype.getBody = function getBody() { 1325 | return this.body; 1326 | }; 1327 | 1328 | Request.prototype.respondWith = function respondWith(body, options) { 1329 | return new Response(body, assign(options || {}, { url: this.getUrl() })); 1330 | }; 1331 | 1332 | return Request; 1333 | }(); 1334 | 1335 | /** 1336 | * Service for sending network requests. 1337 | */ 1338 | 1339 | var CUSTOM_HEADERS = { 'X-Requested-With': 'XMLHttpRequest' }; 1340 | var COMMON_HEADERS = { 'Accept': 'application/json, text/plain, */*' }; 1341 | var JSON_CONTENT_TYPE = { 'Content-Type': 'application/json;charset=utf-8' }; 1342 | 1343 | function Http(options) { 1344 | 1345 | var self = this || {}, 1346 | client = Client(self.$vm); 1347 | 1348 | defaults(options || {}, self.$options, Http.options); 1349 | 1350 | Http.interceptors.forEach(function (handler) { 1351 | client.use(handler); 1352 | }); 1353 | 1354 | return client(new Request(options)).then(function (response) { 1355 | 1356 | return response.ok ? response : PromiseObj.reject(response); 1357 | }, function (response) { 1358 | 1359 | if (response instanceof Error) { 1360 | error(response); 1361 | } 1362 | 1363 | return PromiseObj.reject(response); 1364 | }); 1365 | } 1366 | 1367 | Http.options = {}; 1368 | 1369 | Http.headers = { 1370 | put: JSON_CONTENT_TYPE, 1371 | post: JSON_CONTENT_TYPE, 1372 | patch: JSON_CONTENT_TYPE, 1373 | delete: JSON_CONTENT_TYPE, 1374 | custom: CUSTOM_HEADERS, 1375 | common: COMMON_HEADERS 1376 | }; 1377 | 1378 | Http.interceptors = [before, timeout, method, body, jsonp, header, cors]; 1379 | 1380 | ['get', 'delete', 'head', 'jsonp'].forEach(function (method) { 1381 | 1382 | Http[method] = function (url, options) { 1383 | return this(assign(options || {}, { url: url, method: method })); 1384 | }; 1385 | }); 1386 | 1387 | ['post', 'put', 'patch'].forEach(function (method) { 1388 | 1389 | Http[method] = function (url, body, options) { 1390 | return this(assign(options || {}, { url: url, method: method, body: body })); 1391 | }; 1392 | }); 1393 | 1394 | /** 1395 | * Service for interacting with RESTful services. 1396 | */ 1397 | 1398 | function Resource(url, params, actions, options) { 1399 | 1400 | var self = this || {}, 1401 | resource = {}; 1402 | 1403 | actions = assign({}, Resource.actions, actions); 1404 | 1405 | each(actions, function (action, name) { 1406 | 1407 | action = merge({ url: url, params: assign({}, params) }, options, action); 1408 | 1409 | resource[name] = function () { 1410 | return (self.$http || Http)(opts(action, arguments)); 1411 | }; 1412 | }); 1413 | 1414 | return resource; 1415 | } 1416 | 1417 | function opts(action, args) { 1418 | 1419 | var options = assign({}, action), 1420 | params = {}, 1421 | body; 1422 | 1423 | switch (args.length) { 1424 | 1425 | case 2: 1426 | 1427 | params = args[0]; 1428 | body = args[1]; 1429 | 1430 | break; 1431 | 1432 | case 1: 1433 | 1434 | if (/^(POST|PUT|PATCH)$/i.test(options.method)) { 1435 | body = args[0]; 1436 | } else { 1437 | params = args[0]; 1438 | } 1439 | 1440 | break; 1441 | 1442 | case 0: 1443 | 1444 | break; 1445 | 1446 | default: 1447 | 1448 | throw 'Expected up to 4 arguments [params, body], got ' + args.length + ' arguments'; 1449 | } 1450 | 1451 | options.body = body; 1452 | options.params = assign({}, options.params, params); 1453 | 1454 | return options; 1455 | } 1456 | 1457 | Resource.actions = { 1458 | 1459 | get: { method: 'GET' }, 1460 | save: { method: 'POST' }, 1461 | query: { method: 'GET' }, 1462 | update: { method: 'PUT' }, 1463 | remove: { method: 'DELETE' }, 1464 | delete: { method: 'DELETE' } 1465 | 1466 | }; 1467 | 1468 | /** 1469 | * Install plugin. 1470 | */ 1471 | 1472 | function plugin(Vue) { 1473 | 1474 | if (plugin.installed) { 1475 | return; 1476 | } 1477 | 1478 | Util(Vue); 1479 | 1480 | Vue.url = Url; 1481 | Vue.http = Http; 1482 | Vue.resource = Resource; 1483 | Vue.Promise = PromiseObj; 1484 | 1485 | Object.defineProperties(Vue.prototype, { 1486 | 1487 | $url: { 1488 | get: function () { 1489 | return options(Vue.url, this, this.$options.url); 1490 | } 1491 | }, 1492 | 1493 | $http: { 1494 | get: function () { 1495 | return options(Vue.http, this, this.$options.http); 1496 | } 1497 | }, 1498 | 1499 | $resource: { 1500 | get: function () { 1501 | return Vue.resource.bind(this); 1502 | } 1503 | }, 1504 | 1505 | $promise: { 1506 | get: function () { 1507 | var _this = this; 1508 | 1509 | return function (executor) { 1510 | return new Vue.Promise(executor, _this); 1511 | }; 1512 | } 1513 | } 1514 | 1515 | }); 1516 | } 1517 | 1518 | if (typeof window !== 'undefined' && window.Vue) { 1519 | window.Vue.use(plugin); 1520 | } 1521 | 1522 | return plugin; 1523 | 1524 | }))); -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## Vue Events Bulletin Board 2 | 3 | This is the Go backend code for the Vue.js [tutorial on Scotch.io](https://scotch.io/tutorials/build-a-single-page-time-tracking-app-with-vue-js-introduction). In the tutorial we build a events bulletin board application and cover the basics of [Vue](http://vuejs.org/). 4 | 5 | Please read the `server.go` file for elaborate comments. 6 | 7 | If you are new to Go, read [my book](http://github.com/thewhitetulip/web-dev-golang-anti-textbook) or read the working code of the project which is taught in the book [here](http://github.com/thewhitetulip/Tasks). 8 | 9 | ## Building the app 10 | 11 | 1. install Go 12 | 2. `go get github.com/thewhitetulip/go-vue-events` 13 | 3. go run server.go 14 | 4. Open localhost:8080 in your browser 15 | 16 | ## Build in Docker 17 | 1. [Install Docker](https://docs.docker.com/get-docker/) 18 | 2.``` 19 | docker build --tag go-vue-events:1.0 . 20 | ``` 21 | 3.``` 22 | docker run --publish 8000:8080 --detach --name gve go-vue-events:1.0 23 | ``` 24 | ### Remove docker image 25 | ``` 26 | docker rm --force gve 27 | ``` -------------------------------------------------------------------------------- /server.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | /* 4 | 5 | This is a hard fork of https://github.com/chenkie/vue-events-bulletin 6 | 7 | While using a Go backend for Vue, we just need to execute the home/index template. 8 | We send the AJAX requests from Vue and update the Vue based front end accordingly. 9 | 10 | There is one catch, Go templates use {{ }} and Vue also uses the same, thus, we need to 11 | change the definition of our Vue instance and make Vue use ${ } rather than {{ }} otherwise this code won't work. 12 | 13 | We can give anything instead of ${ }, but this is short and simple to understand. 14 | 15 | new Vue({ 16 | el: '#events', 17 | 18 | data: { 19 | event: { title: '', detail: '', date: '' }, 20 | events: [] 21 | }, 22 | delimiters: ['${', '}'] // by default it is ['{{','}}'] 23 | //other code 24 | } 25 | 26 | */ 27 | import ( 28 | "encoding/json" 29 | "fmt" 30 | "net/http" 31 | "os" 32 | "text/template" 33 | 34 | "github.com/gorilla/mux" 35 | ) 36 | 37 | // This will be the index.html 38 | var homeTemplate *template.Template 39 | 40 | // This will store all the templates 41 | var templates *template.Template 42 | 43 | // Events is the struct which defines our events 44 | // **it is very important to have the fields capitalized** 45 | type Events struct { 46 | Id int `json:"id"` 47 | Title string `json:"title"` 48 | Detail string `json:"detail"` 49 | Date string `json:"date"` 50 | } 51 | 52 | // this is the JSON we will send to the front end 53 | // this can be added to a database too. 54 | var events = []Events{{Id: 1, Title: "Do a Skype", Detail: "Skype with guys from NASA", Date: "2015-12-12"}, 55 | {Id: 2, Title: "Martian releases", Detail: "Relocate to Mars", Date: "2016-1-1"}, 56 | {Id: 3, Title: "What is Vue?"}, 57 | } 58 | 59 | func main() { 60 | // Look for all .html files in the current directory and parse them 61 | templates, err := template.ParseGlob("*.html") 62 | if err != nil { 63 | fmt.Println(err) 64 | os.Exit(1) 65 | } 66 | // find the template with the name index.html 67 | homeTemplate = templates.Lookup("index.html") 68 | 69 | r := mux.NewRouter() 70 | r.HandleFunc("/api/events/", EventsHandler).Methods("GET") 71 | r.HandleFunc("/api/events/", AddHandler).Methods("POST") 72 | r.HandleFunc("/api/events/{id}", DeleteHandler).Methods("DELETE") 73 | 74 | r.PathPrefix("/public/").Handler(http.StripPrefix("/public/", http.FileServer(http.Dir("public")))) 75 | 76 | r.HandleFunc("/", HomeHandler).Methods("GET") 77 | 78 | http.Handle("/", r) 79 | fmt.Println("running server on 8080") 80 | 81 | http.ListenAndServe(":8080", r) 82 | } 83 | 84 | //EventsHandler is the http end point which will supply the list of events 85 | //to our vue front end; handles the GET http request for /api/events/ 86 | func EventsHandler(w http.ResponseWriter, r *http.Request) { 87 | w.Header().Set("Content-Type", "application/json; charset=UTF-8") 88 | 89 | json.NewEncoder(w).Encode(events) 90 | } 91 | 92 | // HomeHandler will be rendering the index.html template, it is written in Vue 93 | func HomeHandler(w http.ResponseWriter, r *http.Request) { 94 | homeTemplate.Execute(w, nil) 95 | } 96 | 97 | // DeleteHandler will handle the DELETE http req for /api/events/ 98 | func DeleteHandler(w http.ResponseWriter, r *http.Request) { 99 | fmt.Println("in the delete handler") 100 | // Fetch the ID from the request and delete the value from the database. 101 | } 102 | 103 | // AddHandler handles the http POST request for /api/events/ 104 | func AddHandler(w http.ResponseWriter, r *http.Request) { 105 | r.ParseForm() 106 | fmt.Println(r.FormValue("title")) 107 | // Do something else with the data, put it in database or do some magic 108 | } 109 | --------------------------------------------------------------------------------