├── README.md ├── css ├── bootstrap-theme.css ├── bootstrap-theme.min.css ├── bootstrap.css ├── bootstrap.min.css └── style.css ├── fonts ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.svg ├── glyphicons-halflings-regular.ttf └── glyphicons-halflings-regular.woff ├── index.html └── js ├── bootstrap.js ├── bootstrap.min.js ├── jquery.cookie.js └── main.js /README.md: -------------------------------------------------------------------------------- 1 | spark-helper 2 | ============ 3 | 4 | A web-based helper for the Spark Core. 5 | 6 | 1. Add your device ID and API to the settings section 7 | 8 | 2. Enter a method name (no / beforehand) and data (if desired) and hit the button to call it 9 | 10 | 3. To check a variable, enter its name and hit the button to return the value 11 | 3a. To track a variable's state, enter its name and check the auto-refresh button. The default refresh time is 5 seconds or enter a different time. 12 | 13 | Submit any PRs if there is functionality you need. 14 | -------------------------------------------------------------------------------- /css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.0.3 (http://getbootstrap.com) 3 | * Copyright 2013 Twitter, Inc. 4 | * Licensed under http://www.apache.org/licenses/LICENSE-2.0 5 | */ 6 | 7 | .btn-default, 8 | .btn-primary, 9 | .btn-success, 10 | .btn-info, 11 | .btn-warning, 12 | .btn-danger { 13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); 14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); 15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); 16 | } 17 | 18 | .btn-default:active, 19 | .btn-primary:active, 20 | .btn-success:active, 21 | .btn-info:active, 22 | .btn-warning:active, 23 | .btn-danger:active, 24 | .btn-default.active, 25 | .btn-primary.active, 26 | .btn-success.active, 27 | .btn-info.active, 28 | .btn-warning.active, 29 | .btn-danger.active { 30 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 31 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 32 | } 33 | 34 | .btn:active, 35 | .btn.active { 36 | background-image: none; 37 | } 38 | 39 | .btn-default { 40 | text-shadow: 0 1px 0 #fff; 41 | background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); 42 | background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); 43 | background-repeat: repeat-x; 44 | border-color: #dbdbdb; 45 | border-color: #ccc; 46 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 47 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 48 | } 49 | 50 | .btn-default:hover, 51 | .btn-default:focus { 52 | background-color: #e0e0e0; 53 | background-position: 0 -15px; 54 | } 55 | 56 | .btn-default:active, 57 | .btn-default.active { 58 | background-color: #e0e0e0; 59 | border-color: #dbdbdb; 60 | } 61 | 62 | .btn-primary { 63 | background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); 64 | background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); 65 | background-repeat: repeat-x; 66 | border-color: #2b669a; 67 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); 68 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 69 | } 70 | 71 | .btn-primary:hover, 72 | .btn-primary:focus { 73 | background-color: #2d6ca2; 74 | background-position: 0 -15px; 75 | } 76 | 77 | .btn-primary:active, 78 | .btn-primary.active { 79 | background-color: #2d6ca2; 80 | border-color: #2b669a; 81 | } 82 | 83 | .btn-success { 84 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 85 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 86 | background-repeat: repeat-x; 87 | border-color: #3e8f3e; 88 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 89 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 90 | } 91 | 92 | .btn-success:hover, 93 | .btn-success:focus { 94 | background-color: #419641; 95 | background-position: 0 -15px; 96 | } 97 | 98 | .btn-success:active, 99 | .btn-success.active { 100 | background-color: #419641; 101 | border-color: #3e8f3e; 102 | } 103 | 104 | .btn-warning { 105 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 106 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 107 | background-repeat: repeat-x; 108 | border-color: #e38d13; 109 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 110 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 111 | } 112 | 113 | .btn-warning:hover, 114 | .btn-warning:focus { 115 | background-color: #eb9316; 116 | background-position: 0 -15px; 117 | } 118 | 119 | .btn-warning:active, 120 | .btn-warning.active { 121 | background-color: #eb9316; 122 | border-color: #e38d13; 123 | } 124 | 125 | .btn-danger { 126 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 127 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 128 | background-repeat: repeat-x; 129 | border-color: #b92c28; 130 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 131 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 132 | } 133 | 134 | .btn-danger:hover, 135 | .btn-danger:focus { 136 | background-color: #c12e2a; 137 | background-position: 0 -15px; 138 | } 139 | 140 | .btn-danger:active, 141 | .btn-danger.active { 142 | background-color: #c12e2a; 143 | border-color: #b92c28; 144 | } 145 | 146 | .btn-info { 147 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 148 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 149 | background-repeat: repeat-x; 150 | border-color: #28a4c9; 151 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 152 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 153 | } 154 | 155 | .btn-info:hover, 156 | .btn-info:focus { 157 | background-color: #2aabd2; 158 | background-position: 0 -15px; 159 | } 160 | 161 | .btn-info:active, 162 | .btn-info.active { 163 | background-color: #2aabd2; 164 | border-color: #28a4c9; 165 | } 166 | 167 | .thumbnail, 168 | .img-thumbnail { 169 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 170 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 171 | } 172 | 173 | .dropdown-menu > li > a:hover, 174 | .dropdown-menu > li > a:focus { 175 | background-color: #e8e8e8; 176 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 177 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 178 | background-repeat: repeat-x; 179 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 180 | } 181 | 182 | .dropdown-menu > .active > a, 183 | .dropdown-menu > .active > a:hover, 184 | .dropdown-menu > .active > a:focus { 185 | background-color: #357ebd; 186 | background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); 187 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 188 | background-repeat: repeat-x; 189 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 190 | } 191 | 192 | .navbar-default { 193 | background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); 194 | background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); 195 | background-repeat: repeat-x; 196 | border-radius: 4px; 197 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 198 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 199 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); 200 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); 201 | } 202 | 203 | .navbar-default .navbar-nav > .active > a { 204 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); 205 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); 206 | background-repeat: repeat-x; 207 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); 208 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); 209 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); 210 | } 211 | 212 | .navbar-brand, 213 | .navbar-nav > li > a { 214 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); 215 | } 216 | 217 | .navbar-inverse { 218 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); 219 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); 220 | background-repeat: repeat-x; 221 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 222 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 223 | } 224 | 225 | .navbar-inverse .navbar-nav > .active > a { 226 | background-image: -webkit-linear-gradient(top, #222222 0%, #282828 100%); 227 | background-image: linear-gradient(to bottom, #222222 0%, #282828 100%); 228 | background-repeat: repeat-x; 229 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); 230 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); 231 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); 232 | } 233 | 234 | .navbar-inverse .navbar-brand, 235 | .navbar-inverse .navbar-nav > li > a { 236 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 237 | } 238 | 239 | .navbar-static-top, 240 | .navbar-fixed-top, 241 | .navbar-fixed-bottom { 242 | border-radius: 0; 243 | } 244 | 245 | .alert { 246 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); 247 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); 248 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); 249 | } 250 | 251 | .alert-success { 252 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 253 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 254 | background-repeat: repeat-x; 255 | border-color: #b2dba1; 256 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 257 | } 258 | 259 | .alert-info { 260 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 261 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 262 | background-repeat: repeat-x; 263 | border-color: #9acfea; 264 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 265 | } 266 | 267 | .alert-warning { 268 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 269 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 270 | background-repeat: repeat-x; 271 | border-color: #f5e79e; 272 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 273 | } 274 | 275 | .alert-danger { 276 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 277 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 278 | background-repeat: repeat-x; 279 | border-color: #dca7a7; 280 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 281 | } 282 | 283 | .progress { 284 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 285 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 286 | background-repeat: repeat-x; 287 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 288 | } 289 | 290 | .progress-bar { 291 | background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); 292 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); 293 | background-repeat: repeat-x; 294 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); 295 | } 296 | 297 | .progress-bar-success { 298 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 299 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 300 | background-repeat: repeat-x; 301 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 302 | } 303 | 304 | .progress-bar-info { 305 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 306 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 307 | background-repeat: repeat-x; 308 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 309 | } 310 | 311 | .progress-bar-warning { 312 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 313 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 314 | background-repeat: repeat-x; 315 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 316 | } 317 | 318 | .progress-bar-danger { 319 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 320 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 321 | background-repeat: repeat-x; 322 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 323 | } 324 | 325 | .list-group { 326 | border-radius: 4px; 327 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 328 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 329 | } 330 | 331 | .list-group-item.active, 332 | .list-group-item.active:hover, 333 | .list-group-item.active:focus { 334 | text-shadow: 0 -1px 0 #3071a9; 335 | background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); 336 | background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); 337 | background-repeat: repeat-x; 338 | border-color: #3278b3; 339 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); 340 | } 341 | 342 | .panel { 343 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 344 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 345 | } 346 | 347 | .panel-default > .panel-heading { 348 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 349 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 350 | background-repeat: repeat-x; 351 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 352 | } 353 | 354 | .panel-primary > .panel-heading { 355 | background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); 356 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 357 | background-repeat: repeat-x; 358 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 359 | } 360 | 361 | .panel-success > .panel-heading { 362 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 363 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 364 | background-repeat: repeat-x; 365 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 366 | } 367 | 368 | .panel-info > .panel-heading { 369 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 370 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 371 | background-repeat: repeat-x; 372 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 373 | } 374 | 375 | .panel-warning > .panel-heading { 376 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 377 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 378 | background-repeat: repeat-x; 379 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 380 | } 381 | 382 | .panel-danger > .panel-heading { 383 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 384 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 385 | background-repeat: repeat-x; 386 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 387 | } 388 | 389 | .well { 390 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 391 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 392 | background-repeat: repeat-x; 393 | border-color: #dcdcdc; 394 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 395 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); 396 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); 397 | } -------------------------------------------------------------------------------- /css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.0.3 (http://getbootstrap.com) 3 | * Copyright 2013 Twitter, Inc. 4 | * Licensed under http://www.apache.org/licenses/LICENSE-2.0 5 | */ 6 | 7 | .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe0e0e0',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);background-repeat:repeat-x;border-color:#2b669a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff2d6ca2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);background-repeat:repeat-x;border-color:#3e8f3e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff419641',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);background-repeat:repeat-x;border-color:#e38d13;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffeb9316',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);background-repeat:repeat-x;border-color:#b92c28;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc12e2a',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);background-repeat:repeat-x;border-color:#28a4c9;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2aabd2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff3f3f3',GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff282828',GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | .container { 2 | margin-top: 20px; 3 | } 4 | 5 | .input-group { 6 | margin-top:15px; 7 | } 8 | 9 | .alert { 10 | z-index: 1000; 11 | } 12 | 13 | .affix { 14 | width: 100%; 15 | } 16 | 17 | @media (min-width: 768px) { 18 | .affix { 19 | width: 720px; 20 | } 21 | } 22 | 23 | @media (min-width: 992px) { 24 | .affix { 25 | width: 940px; 26 | } 27 | } 28 | 29 | @media (min-width: 1200px) { 30 | .affix { 31 | width: 1140px; 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jflasher/spark-helper/894150faec384816448913a3a439b06fbe341d1b/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jflasher/spark-helper/894150faec384816448913a3a439b06fbe341d1b/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jflasher/spark-helper/894150faec384816448913a3a439b06fbe341d1b/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spark Simple Web Interface 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 |
19 | 20 |
21 | 28 |
29 |
30 |

31 | Visit https://www.spark.io/build to get the ID of the core to access and your unique API token. 32 |

33 |
34 | Core ID 35 | 36 |
37 |
38 | API Token 39 | 40 |
41 |
42 |
43 |
44 |
45 |
46 |

47 | 48 | Functions 49 | 50 |

51 |
52 |
53 |
54 |

55 | Input the function name to call along with the data to pass and hit the post button to attempt to send it to the core. 56 |

57 |
58 |
59 |
60 | 61 | Function Name 62 | 63 | 64 |
65 |
66 |
67 |
68 | 69 | Data 70 | 71 | 72 |
73 |
74 |
75 |
76 | 77 |
78 |
79 |

80 |
81 |
82 |
83 |
84 |
85 |
86 |

87 | 88 | Variables 89 | 90 |

91 |
92 |
93 |
94 |

95 | Enter the variable name to query and press the Get button, the value will appear in the field if successful. If you wish to auto-query, check the box. Enter a custom time in ms or leave it blank for the default refresh time of 5 seconds. 96 |

97 |
98 |
99 |
100 | 101 | Variable Name 102 | 103 | 104 |
105 |
106 |
107 |
108 | 109 | Value 110 | 111 | 112 |
113 |
114 |
115 |
116 | 117 | 118 | 119 | 120 |
121 |
122 |
123 |
124 | 125 |
126 |
127 |

128 |
129 |
130 |
131 |
132 |
133 | 134 | 135 | 136 | 137 | 138 | 139 | 148 | 149 | 150 | -------------------------------------------------------------------------------- /js/bootstrap.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.0.3 (http://getbootstrap.com) 3 | * Copyright 2013 Twitter, Inc. 4 | * Licensed under http://www.apache.org/licenses/LICENSE-2.0 5 | */ 6 | 7 | if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") } 8 | 9 | /* ======================================================================== 10 | * Bootstrap: transition.js v3.0.3 11 | * http://getbootstrap.com/javascript/#transitions 12 | * ======================================================================== 13 | * Copyright 2013 Twitter, Inc. 14 | * 15 | * Licensed under the Apache License, Version 2.0 (the "License"); 16 | * you may not use this file except in compliance with the License. 17 | * You may obtain a copy of the License at 18 | * 19 | * http://www.apache.org/licenses/LICENSE-2.0 20 | * 21 | * Unless required by applicable law or agreed to in writing, software 22 | * distributed under the License is distributed on an "AS IS" BASIS, 23 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 24 | * See the License for the specific language governing permissions and 25 | * limitations under the License. 26 | * ======================================================================== */ 27 | 28 | 29 | +function ($) { "use strict"; 30 | 31 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) 32 | // ============================================================ 33 | 34 | function transitionEnd() { 35 | var el = document.createElement('bootstrap') 36 | 37 | var transEndEventNames = { 38 | 'WebkitTransition' : 'webkitTransitionEnd' 39 | , 'MozTransition' : 'transitionend' 40 | , 'OTransition' : 'oTransitionEnd otransitionend' 41 | , 'transition' : 'transitionend' 42 | } 43 | 44 | for (var name in transEndEventNames) { 45 | if (el.style[name] !== undefined) { 46 | return { end: transEndEventNames[name] } 47 | } 48 | } 49 | } 50 | 51 | // http://blog.alexmaccaw.com/css-transitions 52 | $.fn.emulateTransitionEnd = function (duration) { 53 | var called = false, $el = this 54 | $(this).one($.support.transition.end, function () { called = true }) 55 | var callback = function () { if (!called) $($el).trigger($.support.transition.end) } 56 | setTimeout(callback, duration) 57 | return this 58 | } 59 | 60 | $(function () { 61 | $.support.transition = transitionEnd() 62 | }) 63 | 64 | }(jQuery); 65 | 66 | /* ======================================================================== 67 | * Bootstrap: alert.js v3.0.3 68 | * http://getbootstrap.com/javascript/#alerts 69 | * ======================================================================== 70 | * Copyright 2013 Twitter, Inc. 71 | * 72 | * Licensed under the Apache License, Version 2.0 (the "License"); 73 | * you may not use this file except in compliance with the License. 74 | * You may obtain a copy of the License at 75 | * 76 | * http://www.apache.org/licenses/LICENSE-2.0 77 | * 78 | * Unless required by applicable law or agreed to in writing, software 79 | * distributed under the License is distributed on an "AS IS" BASIS, 80 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 81 | * See the License for the specific language governing permissions and 82 | * limitations under the License. 83 | * ======================================================================== */ 84 | 85 | 86 | +function ($) { "use strict"; 87 | 88 | // ALERT CLASS DEFINITION 89 | // ====================== 90 | 91 | var dismiss = '[data-dismiss="alert"]' 92 | var Alert = function (el) { 93 | $(el).on('click', dismiss, this.close) 94 | } 95 | 96 | Alert.prototype.close = function (e) { 97 | var $this = $(this) 98 | var selector = $this.attr('data-target') 99 | 100 | if (!selector) { 101 | selector = $this.attr('href') 102 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 103 | } 104 | 105 | var $parent = $(selector) 106 | 107 | if (e) e.preventDefault() 108 | 109 | if (!$parent.length) { 110 | $parent = $this.hasClass('alert') ? $this : $this.parent() 111 | } 112 | 113 | $parent.trigger(e = $.Event('close.bs.alert')) 114 | 115 | if (e.isDefaultPrevented()) return 116 | 117 | $parent.removeClass('in') 118 | 119 | function removeElement() { 120 | $parent.trigger('closed.bs.alert').remove() 121 | } 122 | 123 | $.support.transition && $parent.hasClass('fade') ? 124 | $parent 125 | .one($.support.transition.end, removeElement) 126 | .emulateTransitionEnd(150) : 127 | removeElement() 128 | } 129 | 130 | 131 | // ALERT PLUGIN DEFINITION 132 | // ======================= 133 | 134 | var old = $.fn.alert 135 | 136 | $.fn.alert = function (option) { 137 | return this.each(function () { 138 | var $this = $(this) 139 | var data = $this.data('bs.alert') 140 | 141 | if (!data) $this.data('bs.alert', (data = new Alert(this))) 142 | if (typeof option == 'string') data[option].call($this) 143 | }) 144 | } 145 | 146 | $.fn.alert.Constructor = Alert 147 | 148 | 149 | // ALERT NO CONFLICT 150 | // ================= 151 | 152 | $.fn.alert.noConflict = function () { 153 | $.fn.alert = old 154 | return this 155 | } 156 | 157 | 158 | // ALERT DATA-API 159 | // ============== 160 | 161 | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) 162 | 163 | }(jQuery); 164 | 165 | /* ======================================================================== 166 | * Bootstrap: button.js v3.0.3 167 | * http://getbootstrap.com/javascript/#buttons 168 | * ======================================================================== 169 | * Copyright 2013 Twitter, Inc. 170 | * 171 | * Licensed under the Apache License, Version 2.0 (the "License"); 172 | * you may not use this file except in compliance with the License. 173 | * You may obtain a copy of the License at 174 | * 175 | * http://www.apache.org/licenses/LICENSE-2.0 176 | * 177 | * Unless required by applicable law or agreed to in writing, software 178 | * distributed under the License is distributed on an "AS IS" BASIS, 179 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 180 | * See the License for the specific language governing permissions and 181 | * limitations under the License. 182 | * ======================================================================== */ 183 | 184 | 185 | +function ($) { "use strict"; 186 | 187 | // BUTTON PUBLIC CLASS DEFINITION 188 | // ============================== 189 | 190 | var Button = function (element, options) { 191 | this.$element = $(element) 192 | this.options = $.extend({}, Button.DEFAULTS, options) 193 | } 194 | 195 | Button.DEFAULTS = { 196 | loadingText: 'loading...' 197 | } 198 | 199 | Button.prototype.setState = function (state) { 200 | var d = 'disabled' 201 | var $el = this.$element 202 | var val = $el.is('input') ? 'val' : 'html' 203 | var data = $el.data() 204 | 205 | state = state + 'Text' 206 | 207 | if (!data.resetText) $el.data('resetText', $el[val]()) 208 | 209 | $el[val](data[state] || this.options[state]) 210 | 211 | // push to event loop to allow forms to submit 212 | setTimeout(function () { 213 | state == 'loadingText' ? 214 | $el.addClass(d).attr(d, d) : 215 | $el.removeClass(d).removeAttr(d); 216 | }, 0) 217 | } 218 | 219 | Button.prototype.toggle = function () { 220 | var $parent = this.$element.closest('[data-toggle="buttons"]') 221 | var changed = true 222 | 223 | if ($parent.length) { 224 | var $input = this.$element.find('input') 225 | if ($input.prop('type') === 'radio') { 226 | // see if clicking on current one 227 | if ($input.prop('checked') && this.$element.hasClass('active')) 228 | changed = false 229 | else 230 | $parent.find('.active').removeClass('active') 231 | } 232 | if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') 233 | } 234 | 235 | if (changed) this.$element.toggleClass('active') 236 | } 237 | 238 | 239 | // BUTTON PLUGIN DEFINITION 240 | // ======================== 241 | 242 | var old = $.fn.button 243 | 244 | $.fn.button = function (option) { 245 | return this.each(function () { 246 | var $this = $(this) 247 | var data = $this.data('bs.button') 248 | var options = typeof option == 'object' && option 249 | 250 | if (!data) $this.data('bs.button', (data = new Button(this, options))) 251 | 252 | if (option == 'toggle') data.toggle() 253 | else if (option) data.setState(option) 254 | }) 255 | } 256 | 257 | $.fn.button.Constructor = Button 258 | 259 | 260 | // BUTTON NO CONFLICT 261 | // ================== 262 | 263 | $.fn.button.noConflict = function () { 264 | $.fn.button = old 265 | return this 266 | } 267 | 268 | 269 | // BUTTON DATA-API 270 | // =============== 271 | 272 | $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { 273 | var $btn = $(e.target) 274 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') 275 | $btn.button('toggle') 276 | e.preventDefault() 277 | }) 278 | 279 | }(jQuery); 280 | 281 | /* ======================================================================== 282 | * Bootstrap: carousel.js v3.0.3 283 | * http://getbootstrap.com/javascript/#carousel 284 | * ======================================================================== 285 | * Copyright 2013 Twitter, Inc. 286 | * 287 | * Licensed under the Apache License, Version 2.0 (the "License"); 288 | * you may not use this file except in compliance with the License. 289 | * You may obtain a copy of the License at 290 | * 291 | * http://www.apache.org/licenses/LICENSE-2.0 292 | * 293 | * Unless required by applicable law or agreed to in writing, software 294 | * distributed under the License is distributed on an "AS IS" BASIS, 295 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 296 | * See the License for the specific language governing permissions and 297 | * limitations under the License. 298 | * ======================================================================== */ 299 | 300 | 301 | +function ($) { "use strict"; 302 | 303 | // CAROUSEL CLASS DEFINITION 304 | // ========================= 305 | 306 | var Carousel = function (element, options) { 307 | this.$element = $(element) 308 | this.$indicators = this.$element.find('.carousel-indicators') 309 | this.options = options 310 | this.paused = 311 | this.sliding = 312 | this.interval = 313 | this.$active = 314 | this.$items = null 315 | 316 | this.options.pause == 'hover' && this.$element 317 | .on('mouseenter', $.proxy(this.pause, this)) 318 | .on('mouseleave', $.proxy(this.cycle, this)) 319 | } 320 | 321 | Carousel.DEFAULTS = { 322 | interval: 5000 323 | , pause: 'hover' 324 | , wrap: true 325 | } 326 | 327 | Carousel.prototype.cycle = function (e) { 328 | e || (this.paused = false) 329 | 330 | this.interval && clearInterval(this.interval) 331 | 332 | this.options.interval 333 | && !this.paused 334 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) 335 | 336 | return this 337 | } 338 | 339 | Carousel.prototype.getActiveIndex = function () { 340 | this.$active = this.$element.find('.item.active') 341 | this.$items = this.$active.parent().children() 342 | 343 | return this.$items.index(this.$active) 344 | } 345 | 346 | Carousel.prototype.to = function (pos) { 347 | var that = this 348 | var activeIndex = this.getActiveIndex() 349 | 350 | if (pos > (this.$items.length - 1) || pos < 0) return 351 | 352 | if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) 353 | if (activeIndex == pos) return this.pause().cycle() 354 | 355 | return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) 356 | } 357 | 358 | Carousel.prototype.pause = function (e) { 359 | e || (this.paused = true) 360 | 361 | if (this.$element.find('.next, .prev').length && $.support.transition.end) { 362 | this.$element.trigger($.support.transition.end) 363 | this.cycle(true) 364 | } 365 | 366 | this.interval = clearInterval(this.interval) 367 | 368 | return this 369 | } 370 | 371 | Carousel.prototype.next = function () { 372 | if (this.sliding) return 373 | return this.slide('next') 374 | } 375 | 376 | Carousel.prototype.prev = function () { 377 | if (this.sliding) return 378 | return this.slide('prev') 379 | } 380 | 381 | Carousel.prototype.slide = function (type, next) { 382 | var $active = this.$element.find('.item.active') 383 | var $next = next || $active[type]() 384 | var isCycling = this.interval 385 | var direction = type == 'next' ? 'left' : 'right' 386 | var fallback = type == 'next' ? 'first' : 'last' 387 | var that = this 388 | 389 | if (!$next.length) { 390 | if (!this.options.wrap) return 391 | $next = this.$element.find('.item')[fallback]() 392 | } 393 | 394 | this.sliding = true 395 | 396 | isCycling && this.pause() 397 | 398 | var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) 399 | 400 | if ($next.hasClass('active')) return 401 | 402 | if (this.$indicators.length) { 403 | this.$indicators.find('.active').removeClass('active') 404 | this.$element.one('slid.bs.carousel', function () { 405 | var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) 406 | $nextIndicator && $nextIndicator.addClass('active') 407 | }) 408 | } 409 | 410 | if ($.support.transition && this.$element.hasClass('slide')) { 411 | this.$element.trigger(e) 412 | if (e.isDefaultPrevented()) return 413 | $next.addClass(type) 414 | $next[0].offsetWidth // force reflow 415 | $active.addClass(direction) 416 | $next.addClass(direction) 417 | $active 418 | .one($.support.transition.end, function () { 419 | $next.removeClass([type, direction].join(' ')).addClass('active') 420 | $active.removeClass(['active', direction].join(' ')) 421 | that.sliding = false 422 | setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) 423 | }) 424 | .emulateTransitionEnd(600) 425 | } else { 426 | this.$element.trigger(e) 427 | if (e.isDefaultPrevented()) return 428 | $active.removeClass('active') 429 | $next.addClass('active') 430 | this.sliding = false 431 | this.$element.trigger('slid.bs.carousel') 432 | } 433 | 434 | isCycling && this.cycle() 435 | 436 | return this 437 | } 438 | 439 | 440 | // CAROUSEL PLUGIN DEFINITION 441 | // ========================== 442 | 443 | var old = $.fn.carousel 444 | 445 | $.fn.carousel = function (option) { 446 | return this.each(function () { 447 | var $this = $(this) 448 | var data = $this.data('bs.carousel') 449 | var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) 450 | var action = typeof option == 'string' ? option : options.slide 451 | 452 | if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) 453 | if (typeof option == 'number') data.to(option) 454 | else if (action) data[action]() 455 | else if (options.interval) data.pause().cycle() 456 | }) 457 | } 458 | 459 | $.fn.carousel.Constructor = Carousel 460 | 461 | 462 | // CAROUSEL NO CONFLICT 463 | // ==================== 464 | 465 | $.fn.carousel.noConflict = function () { 466 | $.fn.carousel = old 467 | return this 468 | } 469 | 470 | 471 | // CAROUSEL DATA-API 472 | // ================= 473 | 474 | $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { 475 | var $this = $(this), href 476 | var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 477 | var options = $.extend({}, $target.data(), $this.data()) 478 | var slideIndex = $this.attr('data-slide-to') 479 | if (slideIndex) options.interval = false 480 | 481 | $target.carousel(options) 482 | 483 | if (slideIndex = $this.attr('data-slide-to')) { 484 | $target.data('bs.carousel').to(slideIndex) 485 | } 486 | 487 | e.preventDefault() 488 | }) 489 | 490 | $(window).on('load', function () { 491 | $('[data-ride="carousel"]').each(function () { 492 | var $carousel = $(this) 493 | $carousel.carousel($carousel.data()) 494 | }) 495 | }) 496 | 497 | }(jQuery); 498 | 499 | /* ======================================================================== 500 | * Bootstrap: collapse.js v3.0.3 501 | * http://getbootstrap.com/javascript/#collapse 502 | * ======================================================================== 503 | * Copyright 2013 Twitter, Inc. 504 | * 505 | * Licensed under the Apache License, Version 2.0 (the "License"); 506 | * you may not use this file except in compliance with the License. 507 | * You may obtain a copy of the License at 508 | * 509 | * http://www.apache.org/licenses/LICENSE-2.0 510 | * 511 | * Unless required by applicable law or agreed to in writing, software 512 | * distributed under the License is distributed on an "AS IS" BASIS, 513 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 514 | * See the License for the specific language governing permissions and 515 | * limitations under the License. 516 | * ======================================================================== */ 517 | 518 | 519 | +function ($) { "use strict"; 520 | 521 | // COLLAPSE PUBLIC CLASS DEFINITION 522 | // ================================ 523 | 524 | var Collapse = function (element, options) { 525 | this.$element = $(element) 526 | this.options = $.extend({}, Collapse.DEFAULTS, options) 527 | this.transitioning = null 528 | 529 | if (this.options.parent) this.$parent = $(this.options.parent) 530 | if (this.options.toggle) this.toggle() 531 | } 532 | 533 | Collapse.DEFAULTS = { 534 | toggle: true 535 | } 536 | 537 | Collapse.prototype.dimension = function () { 538 | var hasWidth = this.$element.hasClass('width') 539 | return hasWidth ? 'width' : 'height' 540 | } 541 | 542 | Collapse.prototype.show = function () { 543 | if (this.transitioning || this.$element.hasClass('in')) return 544 | 545 | var startEvent = $.Event('show.bs.collapse') 546 | this.$element.trigger(startEvent) 547 | if (startEvent.isDefaultPrevented()) return 548 | 549 | var actives = this.$parent && this.$parent.find('> .panel > .in') 550 | 551 | if (actives && actives.length) { 552 | var hasData = actives.data('bs.collapse') 553 | if (hasData && hasData.transitioning) return 554 | actives.collapse('hide') 555 | hasData || actives.data('bs.collapse', null) 556 | } 557 | 558 | var dimension = this.dimension() 559 | 560 | this.$element 561 | .removeClass('collapse') 562 | .addClass('collapsing') 563 | [dimension](0) 564 | 565 | this.transitioning = 1 566 | 567 | var complete = function () { 568 | this.$element 569 | .removeClass('collapsing') 570 | .addClass('in') 571 | [dimension]('auto') 572 | this.transitioning = 0 573 | this.$element.trigger('shown.bs.collapse') 574 | } 575 | 576 | if (!$.support.transition) return complete.call(this) 577 | 578 | var scrollSize = $.camelCase(['scroll', dimension].join('-')) 579 | 580 | this.$element 581 | .one($.support.transition.end, $.proxy(complete, this)) 582 | .emulateTransitionEnd(350) 583 | [dimension](this.$element[0][scrollSize]) 584 | } 585 | 586 | Collapse.prototype.hide = function () { 587 | if (this.transitioning || !this.$element.hasClass('in')) return 588 | 589 | var startEvent = $.Event('hide.bs.collapse') 590 | this.$element.trigger(startEvent) 591 | if (startEvent.isDefaultPrevented()) return 592 | 593 | var dimension = this.dimension() 594 | 595 | this.$element 596 | [dimension](this.$element[dimension]()) 597 | [0].offsetHeight 598 | 599 | this.$element 600 | .addClass('collapsing') 601 | .removeClass('collapse') 602 | .removeClass('in') 603 | 604 | this.transitioning = 1 605 | 606 | var complete = function () { 607 | this.transitioning = 0 608 | this.$element 609 | .trigger('hidden.bs.collapse') 610 | .removeClass('collapsing') 611 | .addClass('collapse') 612 | } 613 | 614 | if (!$.support.transition) return complete.call(this) 615 | 616 | this.$element 617 | [dimension](0) 618 | .one($.support.transition.end, $.proxy(complete, this)) 619 | .emulateTransitionEnd(350) 620 | } 621 | 622 | Collapse.prototype.toggle = function () { 623 | this[this.$element.hasClass('in') ? 'hide' : 'show']() 624 | } 625 | 626 | 627 | // COLLAPSE PLUGIN DEFINITION 628 | // ========================== 629 | 630 | var old = $.fn.collapse 631 | 632 | $.fn.collapse = function (option) { 633 | return this.each(function () { 634 | var $this = $(this) 635 | var data = $this.data('bs.collapse') 636 | var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) 637 | 638 | if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) 639 | if (typeof option == 'string') data[option]() 640 | }) 641 | } 642 | 643 | $.fn.collapse.Constructor = Collapse 644 | 645 | 646 | // COLLAPSE NO CONFLICT 647 | // ==================== 648 | 649 | $.fn.collapse.noConflict = function () { 650 | $.fn.collapse = old 651 | return this 652 | } 653 | 654 | 655 | // COLLAPSE DATA-API 656 | // ================= 657 | 658 | $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { 659 | var $this = $(this), href 660 | var target = $this.attr('data-target') 661 | || e.preventDefault() 662 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 663 | var $target = $(target) 664 | var data = $target.data('bs.collapse') 665 | var option = data ? 'toggle' : $this.data() 666 | var parent = $this.attr('data-parent') 667 | var $parent = parent && $(parent) 668 | 669 | if (!data || !data.transitioning) { 670 | if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') 671 | $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') 672 | } 673 | 674 | $target.collapse(option) 675 | }) 676 | 677 | }(jQuery); 678 | 679 | /* ======================================================================== 680 | * Bootstrap: dropdown.js v3.0.3 681 | * http://getbootstrap.com/javascript/#dropdowns 682 | * ======================================================================== 683 | * Copyright 2013 Twitter, Inc. 684 | * 685 | * Licensed under the Apache License, Version 2.0 (the "License"); 686 | * you may not use this file except in compliance with the License. 687 | * You may obtain a copy of the License at 688 | * 689 | * http://www.apache.org/licenses/LICENSE-2.0 690 | * 691 | * Unless required by applicable law or agreed to in writing, software 692 | * distributed under the License is distributed on an "AS IS" BASIS, 693 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 694 | * See the License for the specific language governing permissions and 695 | * limitations under the License. 696 | * ======================================================================== */ 697 | 698 | 699 | +function ($) { "use strict"; 700 | 701 | // DROPDOWN CLASS DEFINITION 702 | // ========================= 703 | 704 | var backdrop = '.dropdown-backdrop' 705 | var toggle = '[data-toggle=dropdown]' 706 | var Dropdown = function (element) { 707 | $(element).on('click.bs.dropdown', this.toggle) 708 | } 709 | 710 | Dropdown.prototype.toggle = function (e) { 711 | var $this = $(this) 712 | 713 | if ($this.is('.disabled, :disabled')) return 714 | 715 | var $parent = getParent($this) 716 | var isActive = $parent.hasClass('open') 717 | 718 | clearMenus() 719 | 720 | if (!isActive) { 721 | if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { 722 | // if mobile we use a backdrop because click events don't delegate 723 | $('