├── README.md ├── css ├── PoseEditor.css ├── clean.css ├── gamepad.css └── web-bluetooth.css ├── images ├── child-back-gray.png ├── child-face-gray.png ├── child-left-gray.png ├── child-profile-gray.png ├── child-right-gray.png ├── clear.cache.gif ├── corner.png ├── crosshair_ball.png ├── crosshair_ball2.png ├── crosshair_ball3.png ├── crosshair_mine.png ├── crosshair_mine2.png ├── crosshair_star.png ├── crosshair_thick.png ├── crosshair_thin.png ├── dpad.png ├── green-circle.png ├── grid.png ├── hand-gray-left.png ├── hand-gray-right.png ├── hand-green-left.png ├── hand-green-right.png ├── hand-left-button.png ├── hand-left-yellow-button.png ├── hand-right-button.png ├── hand-right-yellow-button.png ├── hand-rotate-button.png ├── hand-yellow-left.png ├── hand-yellow-right.png ├── hborder.png ├── icon.png ├── left-arrow-dark.png ├── left-arrow.png ├── pause_button.png ├── pause_button_gray.png ├── record_button.png ├── record_button_gray.png ├── right-arrow-dark.png ├── right-arrow.png ├── trigger_meter.png ├── trigger_meter_fill.png ├── vborder.png └── yellow-circle.png ├── index.html └── js ├── bootstrap.min.js ├── main.js ├── smoothie.js ├── synaptic.js ├── threejs ├── Detector.js ├── build │ └── three.min.js ├── controls │ └── OrbitControls.js ├── libs │ ├── dat.gui.min.js │ └── stats.min.js └── loaders │ └── OBJLoader.js └── util.js /README.md: -------------------------------------------------------------------------------- 1 | # web-bluetooth-neural-network 2 | Train LSTM MLP neural networks for gesture recognition using sensor data streamed into a website with Web Bluetooth 3 | 4 | # LIVE SITE URL: https://curtpw.github.io/web-bluetooth-neural-network/ 5 | -------------------------------------------------------------------------------- /css/PoseEditor.css: -------------------------------------------------------------------------------- 1 | /** Add css rules here for your application. */ 2 | 3 | 4 | /** Example rules used by the template application (remove for your app) */ 5 | h1 { 6 | font-size: 2em; 7 | font-weight: bold; 8 | color: #777777; 9 | margin: 40px 0px 70px; 10 | text-align: center; 11 | } 12 | 13 | .sendButton { 14 | display: block; 15 | font-size: 16pt; 16 | } 17 | 18 | /** Most GWT widgets already have a style name defined */ 19 | .gwt-DialogBox { 20 | width: 400px; 21 | } 22 | 23 | .dialogVPanel { 24 | margin: 5px; 25 | } 26 | 27 | .serverResponseLabelError { 28 | color: red; 29 | } 30 | 31 | /** Set ids using widget.getElement().setId("idOfElement") */ 32 | #closeButton { 33 | margin: 15px 6px 6px; 34 | } 35 | 36 | .text{ 37 | font-size:12px; 38 | color:#ccc; 39 | } 40 | .debug{ 41 | background-color: #ccc; 42 | } -------------------------------------------------------------------------------- /css/clean.css: -------------------------------------------------------------------------------- 1 | /** 2 | * The file contains styles for GWT widgets in the Clean theme. 3 | * 4 | * In order to maintain cross-browser compatibility, the following syntax is 5 | * used to create IE6 specific style rules: 6 | * .gwt-Widget { 7 | * property: rule applies to all browsers 8 | * -property: rule applies only to IE6 (overrides previous rule) 9 | * } 10 | * * html .gwt-Widget { 11 | * property: rule applies to all versions of IE 12 | * } 13 | */ 14 | 15 | body, table td, select, button { 16 | font-family: Arial Unicode MS, Arial, sans-serif; 17 | font-size: small; 18 | } 19 | pre { 20 | font-family: "courier new", courier; 21 | font-size: small; 22 | } 23 | body { 24 | color: black; 25 | margin: 10px; 26 | border: 0px; 27 | padding: 0px; 28 | background: #fff; 29 | direction: ltr; 30 | } 31 | a, a:visited { 32 | color: #0066cc; 33 | text-decoration:none; 34 | } 35 | 36 | a:hover { 37 | color: #0066cc; 38 | text-decoration:underline; 39 | } 40 | 41 | select { 42 | background: white; 43 | } 44 | 45 | /** 46 | * The reference theme can be used to determine when this style sheet has 47 | * loaded. Create a hidden div element with absolute position, assign the style 48 | * name below, and attach it to the DOM. Use a timer to detect when the 49 | * element's height and width are set to 5px. 50 | */ 51 | .gwt-Reference-clean { 52 | height: 5px; 53 | width: 5px; 54 | zoom: 1; 55 | } 56 | 57 | .gwt-Button { 58 | margin: 0; 59 | padding: 2px 5px; 60 | text-decoration: none; 61 | cursor: pointer; 62 | cursor: hand; 63 | font-size:small; 64 | background: url("images/hborder.png") repeat-x 0px -2077px; 65 | border:1px solid #bbb; 66 | border-bottom: 1px solid #a0a0a0; 67 | border-radius: 3px; 68 | -moz-border-radius: 3px; 69 | } 70 | .gwt-Button:active { 71 | border: 1px inset #ccc; 72 | } 73 | .gwt-Button:hover { 74 | border-color: #939393; 75 | } 76 | .gwt-Button[disabled] { 77 | cursor: default; 78 | color: #888; 79 | } 80 | .gwt-Button[disabled]:hover { 81 | border: 1px outset #ccc; 82 | } 83 | 84 | .gwt-CheckBox { 85 | } 86 | .gwt-CheckBox-disabled { 87 | color: #888; 88 | } 89 | 90 | .gwt-DecoratorPanel { 91 | } 92 | .gwt-DecoratorPanel .topCenter { 93 | border-top: 1px solid #bbb; 94 | line-height: 0px; 95 | } 96 | .gwt-DecoratorPanel .bottomCenter { 97 | border-bottom: 1px solid #bbb; 98 | line-height: 0px; 99 | } 100 | .gwt-DecoratorPanel .topCenterInner, 101 | .gwt-DecoratorPanel .bottomCenterInner { 102 | height: 1px; 103 | line-height: 0px; 104 | font-size: 1px; 105 | } 106 | .gwt-DecoratorPanel .middleLeft { 107 | border-left: 1px solid #bbb; 108 | } 109 | .gwt-DecoratorPanel .middleRight { 110 | border-right: 1px solid #bbb; 111 | } 112 | .gwt-DecoratorPanel .middleLeftInner, 113 | .gwt-DecoratorPanel .middleRightInner { 114 | width: 1px; 115 | line-height: 1px; 116 | } 117 | .gwt-DecoratorPanel .topLeftInner, 118 | .gwt-DecoratorPanel .topRightInner, 119 | .gwt-DecoratorPanel .bottomLeftInner, 120 | .gwt-DecoratorPanel .bottomRightInner { 121 | width: 5px; 122 | height: 5px; 123 | zoom: 1; 124 | font-size: 1px; 125 | overflow: hidden; 126 | } 127 | .gwt-DecoratorPanel .topLeft { 128 | line-height: 0px; 129 | background: url(images/circles.png) no-repeat 0px -6px; 130 | -background: url(images/circles_ie6.png) no-repeat 0px -6px; 131 | } 132 | .gwt-DecoratorPanel .topRight { 133 | line-height: 0px; 134 | background: url(images/circles.png) no-repeat -5px -6px; 135 | -background: url(images/circles_ie6.png) no-repeat -5px -6px; 136 | } 137 | .gwt-DecoratorPanel .bottomLeft { 138 | line-height: 0px; 139 | background: url(images/circles.png) no-repeat 0px -11px; 140 | -background: url(images/circles_ie6.png) no-repeat 0px -11px; 141 | } 142 | .gwt-DecoratorPanel .bottomRight { 143 | line-height: 0px; 144 | background: url(images/circles.png) no-repeat -5px -11px; 145 | -background: url(images/circles_ie6.png) no-repeat -5px -11px; 146 | } 147 | * html .gwt-DecoratorPanel .topLeftInner, 148 | * html .gwt-DecoratorPanel .topRightInner, 149 | * html .gwt-DecoratorPanel .bottomLeftInner, 150 | * html .gwt-DecoratorPanel .bottomRightInner { 151 | width: 5px; 152 | height: 5px; 153 | overflow: hidden; 154 | } 155 | 156 | .gwt-DialogBox .Caption { 157 | background: #F1F1F1; 158 | padding: 4px 8px 4px 4px; 159 | cursor: default; 160 | font-family: Arial Unicode MS, Arial, sans-serif; 161 | font-weight: bold; 162 | border-bottom: 1px solid #bbbbbb; 163 | border-top: 1px solid #D2D2D2; 164 | } 165 | .gwt-DialogBox .dialogContent { 166 | } 167 | .gwt-DialogBox .dialogMiddleCenter { 168 | padding: 3px; 169 | background: white; 170 | } 171 | .gwt-DialogBox .dialogBottomCenter { 172 | background: url(images/hborder.png) repeat-x 0px -2945px; 173 | -background: url(images/hborder_ie6.png) repeat-x 0px -2144px; 174 | } 175 | .gwt-DialogBox .dialogMiddleLeft { 176 | background: url(images/vborder.png) repeat-y -31px 0px; 177 | } 178 | .gwt-DialogBox .dialogMiddleRight { 179 | background: url(images/vborder.png) repeat-y -32px 0px; 180 | -background: url(images/vborder_ie6.png) repeat-y -32px 0px; 181 | } 182 | .gwt-DialogBox .dialogTopLeftInner { 183 | width: 10px; 184 | height: 8px; 185 | zoom: 1; 186 | } 187 | .gwt-DialogBox .dialogTopRightInner { 188 | width: 12px; 189 | zoom: 1; 190 | } 191 | .gwt-DialogBox .dialogBottomLeftInner { 192 | width: 10px; 193 | height: 12px; 194 | zoom: 1; 195 | } 196 | .gwt-DialogBox .dialogBottomRightInner { 197 | width: 12px; 198 | height: 12px; 199 | zoom: 1; 200 | } 201 | .gwt-DialogBox .dialogTopLeft { 202 | background: url(images/circles.png) no-repeat -20px 0px; 203 | -background: url(images/circles_ie6.png) no-repeat -20px 0px; 204 | } 205 | .gwt-DialogBox .dialogTopRight { 206 | background: url(images/circles.png) no-repeat -28px 0px; 207 | -background: url(images/circles_ie6.png) no-repeat -28px 0px; 208 | } 209 | .gwt-DialogBox .dialogBottomLeft { 210 | background: url(images/circles.png) no-repeat 0px -36px; 211 | -background: url(images/circles_ie6.png) no-repeat 0px -36px; 212 | } 213 | .gwt-DialogBox .dialogBottomRight { 214 | background: url(images/circles.png) no-repeat -8px -36px; 215 | -background: url(images/circles_ie6.png) no-repeat -8px -36px; 216 | } 217 | * html .gwt-DialogBox .dialogTopLeftInner { 218 | width: 10px; 219 | overflow: hidden; 220 | } 221 | * html .gwt-DialogBox .dialogTopRightInner { 222 | width: 12px; 223 | overflow: hidden; 224 | } 225 | * html .gwt-DialogBox .dialogBottomLeftInner { 226 | width: 10px; 227 | height: 12px; 228 | overflow: hidden; 229 | } 230 | * html .gwt-DialogBox .dialogBottomRightInner { 231 | width: 12px; 232 | height: 12px; 233 | overflow: hidden; 234 | } 235 | 236 | .gwt-DisclosurePanel { 237 | } 238 | .gwt-DisclosurePanel-open { 239 | } 240 | .gwt-DisclosurePanel-closed { 241 | } 242 | .gwt-DisclosurePanel .header, 243 | .gwt-DisclosurePanel .header a, 244 | .gwt-DisclosurePanel .header td { 245 | text-decoration: none; /* Remove underline from header */ 246 | color: black; 247 | cursor: pointer; 248 | cursor: hand; 249 | } 250 | .gwt-DisclosurePanel .content { 251 | border-left: 3px solid #e7e7e7; 252 | padding: 4px 0px 4px 8px; 253 | margin-left: 6px; 254 | } 255 | 256 | .gwt-FileUpload { 257 | } 258 | 259 | .gwt-Frame { 260 | border-top: 2px solid #666; 261 | border-left: 2px solid #666; 262 | border-right: 2px solid #bbb; 263 | border-bottom: 2px solid #bbb; 264 | } 265 | 266 | .gwt-HorizontalSplitPanel { 267 | } 268 | .gwt-HorizontalSplitPanel .hsplitter { 269 | cursor: move; 270 | border: 0px; 271 | background: #e7e7e7; 272 | line-height: 0px; 273 | } 274 | .gwt-VerticalSplitPanel { 275 | } 276 | .gwt-VerticalSplitPanel .vsplitter { 277 | cursor: move; 278 | border: 0px; 279 | background: #e7e7e7; 280 | line-height: 0px; 281 | } 282 | 283 | .gwt-HTML { 284 | padding: 0 0px; 285 | } 286 | 287 | .gwt-Hyperlink { 288 | cursor: pointer; 289 | } 290 | 291 | .gwt-Image { 292 | } 293 | 294 | .gwt-Label { 295 | } 296 | 297 | .gwt-ListBox { 298 | } 299 | 300 | .gwt-MenuBar { 301 | cursor: default; 302 | } 303 | .gwt-MenuBar .gwt-MenuItem { 304 | cursor: default; 305 | font-family: Arial Unicode MS, Arial, sans-serif; 306 | } 307 | .gwt-MenuBar .gwt-MenuItem-selected { 308 | background: #E3E8F3; 309 | } 310 | .gwt-MenuBar-horizontal { 311 | background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px; 312 | border: 1px solid #e0e0e0; 313 | } 314 | .gwt-MenuBar-horizontal .gwt-MenuItem { 315 | padding: 5px 10px; 316 | vertical-align: bottom; 317 | color: #000; 318 | font-weight: bold; 319 | } 320 | .gwt-MenuBar-horizontal .gwt-MenuItemSeparator { 321 | width: 1px; 322 | padding: 0px; 323 | margin: 0px; 324 | border: 0px; 325 | border-left: 1px solid #ccc; 326 | background: white; 327 | } 328 | .gwt-MenuBar-horizontal .gwt-MenuItemSeparator .menuSeparatorInner { 329 | width: 1px; 330 | height: 1px; 331 | background: white; 332 | } 333 | .gwt-MenuBar-vertical { 334 | margin-top: 0px; 335 | margin-left: 0px; 336 | background: white; 337 | } 338 | .gwt-MenuBar-vertical table { 339 | border-collapse: collapse; 340 | } 341 | .gwt-MenuBar-vertical .gwt-MenuItem { 342 | padding: 2px 40px 2px 1px; 343 | } 344 | .gwt-MenuBar-vertical .gwt-MenuItemSeparator { 345 | padding: 2px 0px; 346 | } 347 | .gwt-MenuBar-vertical .gwt-MenuItemSeparator .menuSeparatorInner { 348 | height: 1px; 349 | padding: 0px; 350 | border: 0px; 351 | border-top: 1px solid #ccc; 352 | overflow: hidden; 353 | } 354 | .gwt-MenuBar-vertical .subMenuIcon { 355 | padding-right: 4px; 356 | } 357 | .gwt-MenuBar-vertical .subMenuIcon-selected { 358 | background: #E3E8F3; 359 | } 360 | .gwt-MenuBarPopup { 361 | margin: 0px 0px 0px 3px; 362 | } 363 | .gwt-MenuBarPopup .menuPopupTopCenter { 364 | background: url(images/hborder.png) 0px -12px repeat-x; 365 | } 366 | .gwt-MenuBarPopup .menuPopupBottomCenter { 367 | background: url(images/hborder.png) 0px -13px repeat-x; 368 | -background: url(images/hborder_ie6.png) 0px -13px repeat-x; 369 | } 370 | .gwt-MenuBarPopup .menuPopupMiddleLeft { 371 | background: url(images/vborder.png) -12px 0px repeat-y; 372 | -background: url(images/vborder_ie6.png) -12px 0px repeat-y; 373 | } 374 | .gwt-MenuBarPopup .menuPopupMiddleRight { 375 | background: url(images/vborder.png) -13px 0px repeat-y; 376 | -background: url(images/vborder_ie6.png) -13px 0px repeat-y; 377 | } 378 | .gwt-MenuBarPopup .menuPopupTopLeftInner { 379 | width: 5px; 380 | height: 5px; 381 | zoom: 1; 382 | } 383 | .gwt-MenuBarPopup .menuPopupTopRightInner { 384 | width: 8px; 385 | height: 5px; 386 | zoom: 1; 387 | } 388 | .gwt-MenuBarPopup .menuPopupBottomLeftInner { 389 | width: 5px; 390 | height: 8px; 391 | zoom: 1; 392 | } 393 | .gwt-MenuBarPopup .menuPopupBottomRightInner { 394 | width: 8px; 395 | height: 8px; 396 | zoom: 1; 397 | } 398 | .gwt-MenuBarPopup .menuPopupTopLeft { 399 | background: url(images/corner.png) no-repeat 0px -36px; 400 | -background: url(images/corner_ie6.png) no-repeat 0px -36px; 401 | } 402 | .gwt-MenuBarPopup .menuPopupTopRight { 403 | background: url(images/corner.png) no-repeat -5px -36px; 404 | -background: url(images/corner_ie6.png) no-repeat -5px -36px; 405 | } 406 | .gwt-MenuBarPopup .menuPopupBottomLeft { 407 | background: url(images/corner.png) no-repeat 0px -41px; 408 | -background: url(images/corner_ie6.png) no-repeat 0px -41px; 409 | } 410 | .gwt-MenuBarPopup .menuPopupBottomRight { 411 | background: url(images/corner.png) no-repeat -5px -41px; 412 | -background: url(images/corner_ie6.png) no-repeat -5px -41px; 413 | } 414 | * html .gwt-MenuBarPopup .menuPopupTopLeftInner { 415 | width: 5px; 416 | height: 5px; 417 | overflow: hidden; 418 | } 419 | * html .gwt-MenuBarPopup .menuPopupTopRightInner { 420 | width: 8px; 421 | height: 5px; 422 | overflow: hidden; 423 | } 424 | * html .gwt-MenuBarPopup .menuPopupBottomLeftInner { 425 | width: 5px; 426 | height: 8px; 427 | overflow: hidden; 428 | } 429 | * html .gwt-MenuBarPopup .menuPopupBottomRightInner { 430 | width: 8px; 431 | height: 8px; 432 | overflow: hidden; 433 | } 434 | 435 | .gwt-PasswordTextBox { 436 | padding: 5px 4px; 437 | border: 1px solid #ccc; 438 | border-top: 1px solid #999; 439 | font-size: 100%; 440 | } 441 | .gwt-PasswordTextBox-readonly { 442 | color: #888; 443 | } 444 | 445 | .gwt-PopupPanel { 446 | border: 3px solid #e7e7e7; 447 | padding: 3px; 448 | background: white; 449 | } 450 | 451 | .gwt-DecoratedPopupPanel .popupContent { 452 | } 453 | .gwt-DecoratedPopupPanel .popupMiddleCenter { 454 | padding: 3px; 455 | background: #f1f1f1; 456 | } 457 | .gwt-DecoratedPopupPanel .popupTopCenter { 458 | background: url(images/hborder.png) 0px -2937px repeat-x; 459 | } 460 | .gwt-DecoratedPopupPanel .popupBottomCenter { 461 | background: url(images/hborder.png) repeat-x 0px -2938px; 462 | -background: url(images/hborder_ie6.png) repeat-x 0px -2138px; 463 | } 464 | .gwt-DecoratedPopupPanel .popupMiddleLeft { 465 | background: url(images/vborder.png) -21px 0px repeat-y; 466 | } 467 | .gwt-DecoratedPopupPanel .popupMiddleRight { 468 | background: url(images/vborder.png) repeat-y -24px 0px; 469 | -background: url(images/vborder_ie6.png) repeat-y -24px 0px; 470 | } 471 | .gwt-DecoratedPopupPanel .popupTopLeftInner { 472 | width: 6px; 473 | height: 5px; 474 | zoom: 1; 475 | } 476 | .gwt-DecoratedPopupPanel .popupTopRightInner { 477 | width: 6px; 478 | height: 5px; 479 | zoom: 1; 480 | } 481 | .gwt-DecoratedPopupPanel .popupBottomLeftInner { 482 | width: 6px; 483 | height: 6px; 484 | zoom: 1; 485 | } 486 | .gwt-DecoratedPopupPanel .popupBottomRightInner { 487 | width: 6px; 488 | height: 6px; 489 | zoom: 1; 490 | } 491 | .gwt-DecoratedPopupPanel .popupTopLeft { 492 | background: url(images/circles.png) no-repeat 0px -16px; 493 | -background: url(images/circles_ie6.png) no-repeat 0px -16px; 494 | } 495 | .gwt-DecoratedPopupPanel .popupTopRight { 496 | background: url(images/circles.png) no-repeat -6px -16px; 497 | -background: url(images/circles_ie6.png) no-repeat -6px -16px; 498 | } 499 | .gwt-DecoratedPopupPanel .popupBottomLeft { 500 | background: url(images/circles.png) no-repeat 0px -21px; 501 | -background: url(images/circles_ie6.png) no-repeat 0px -21px; 502 | } 503 | .gwt-DecoratedPopupPanel .popupBottomRight { 504 | background: url(images/circles.png) no-repeat -6px -21px; 505 | -background: url(images/circles_ie6.png) no-repeat -6px -21px; 506 | } 507 | * html .gwt-DecoratedPopupPanel .popupTopLeftInner { 508 | width: 6px; 509 | height: 5px; 510 | overflow: hidden; 511 | } 512 | * html .gwt-DecoratedPopupPanel .popupTopRightInner { 513 | width: 6px; 514 | height: 5px; 515 | overflow: hidden; 516 | } 517 | * html .gwt-DecoratedPopupPanel .popupBottomLeftInner { 518 | width: 6px; 519 | height: 6px; 520 | overflow: hidden; 521 | } 522 | * html .gwt-DecoratedPopupPanel .popupBottomRightInner { 523 | width: 6px; 524 | height: 6px; 525 | overflow: hidden; 526 | } 527 | 528 | .gwt-PopupPanelGlass { 529 | background-color: #000; 530 | opacity: 0.3; 531 | filter: alpha(opacity=30); 532 | } 533 | 534 | .gwt-PushButton-up, 535 | .gwt-PushButton-up-hovering, 536 | .gwt-PushButton-up-disabled, 537 | .gwt-PushButton-down, 538 | .gwt-PushButton-down-hovering, 539 | .gwt-PushButton-down-disabled { 540 | margin: 0; 541 | text-decoration: none; 542 | background: url("images/hborder.png") repeat-x 0px -27px; 543 | border-radius: 2px; 544 | -moz-border-radius: 2px; 545 | } 546 | .gwt-PushButton-up, 547 | .gwt-PushButton-up-hovering, 548 | .gwt-PushButton-up-disabled { 549 | padding: 3px 5px 3px 5px; 550 | } 551 | .gwt-PushButton-up { 552 | border:1px solid #bbb; 553 | border-bottom: 1px solid #a0a0a0; 554 | cursor: pointer; 555 | cursor: hand; 556 | } 557 | .gwt-PushButton-up-hovering { 558 | border: 1px solid; 559 | border-color: #939393; 560 | cursor: pointer; 561 | cursor: hand; 562 | } 563 | .gwt-PushButton-up-disabled { 564 | border: 1px solid #bbb; 565 | cursor: default; 566 | opacity: .5; 567 | filter: alpha(opacity=45); 568 | zoom: 1; 569 | } 570 | .gwt-PushButton-down, 571 | .gwt-PushButton-down-hovering, 572 | .gwt-PushButton-down-disabled { 573 | padding: 4px 4px 2px 6px; 574 | outline:none; 575 | } 576 | .gwt-PushButton-down { 577 | border: 1px inset #666; 578 | cursor: pointer; 579 | cursor: hand; 580 | } 581 | .gwt-PushButton-down-hovering { 582 | border: 1px solid #939393; 583 | border-top: 1px solid #333333; 584 | cursor: pointer; 585 | cursor: hand; 586 | } 587 | .gwt-PushButton-down-disabled { 588 | border: 1px outset #ccc; 589 | cursor: default; 590 | opacity: 0.5; 591 | filter: alpha(opacity=45); 592 | zoom: 1; 593 | } 594 | 595 | .gwt-RadioButton { 596 | } 597 | .gwt-RadioButton-disabled { 598 | color: #888; 599 | } 600 | 601 | .gwt-RichTextArea { 602 | } 603 | .hasRichTextToolbar { 604 | border: 0px; 605 | } 606 | .gwt-RichTextToolbar { 607 | background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px; 608 | border-bottom: 1px solid #BBBBBB; 609 | padding: 3px; 610 | margin: 0px; 611 | } 612 | .gwt-RichTextToolbar .gwt-PushButton-up { 613 | padding: 0px 1px 0px 0px; 614 | margin-right: 4px; 615 | margin-bottom: 4px; 616 | border-width: 1px; 617 | } 618 | .gwt-RichTextToolbar .gwt-PushButton-up-hovering { 619 | margin-right: 4px; 620 | margin-bottom: 4px; 621 | padding: 0px 1px 0px 0px; 622 | border-width: 1px; 623 | } 624 | .gwt-RichTextToolbar .gwt-PushButton-down { 625 | margin-right: 4px; 626 | margin-bottom: 4px; 627 | padding: 0px 0px 0px 1px; 628 | border-width: 1px; 629 | } 630 | .gwt-RichTextToolbar .gwt-PushButton-down-hovering { 631 | margin-right: 4px; 632 | margin-bottom: 4px; 633 | padding: 0px 0px 0px 1px; 634 | border-width: 1px; 635 | } 636 | .gwt-RichTextToolbar .gwt-ToggleButton-up { 637 | margin-right: 4px; 638 | margin-bottom: 4px; 639 | padding: 0px 1px 0px 0px; 640 | border:1px solid #bbb; 641 | border-bottom: 1px solid #a0a0a0; 642 | } 643 | .gwt-RichTextToolbar .gwt-ToggleButton-up-hovering { 644 | margin-right: 4px; 645 | margin-bottom: 4px; 646 | padding: 0px 1px 0px 0px; 647 | border-width: 1px; 648 | } 649 | .gwt-RichTextToolbar .gwt-ToggleButton-down { 650 | margin-right: 4px; 651 | margin-bottom: 4px; 652 | padding: 0px 0px 0px 1px; 653 | border-width: 1px; 654 | } 655 | .gwt-RichTextToolbar .gwt-ToggleButton-down-hovering { 656 | margin-right: 4px; 657 | margin-bottom: 4px; 658 | padding: 0px 0px 0px 1px; 659 | border-width: 1px; 660 | } 661 | 662 | .gwt-StackPanel { 663 | border-bottom: 1px solid #bbbbbb; 664 | } 665 | .gwt-StackPanel .gwt-StackPanelItem { 666 | cursor: pointer; 667 | cursor: hand; 668 | font-weight: bold; 669 | font-size: 1.3em; 670 | padding: 3px; 671 | border: 1px solid #bbbbbb; 672 | border-bottom: 0px; 673 | background: #d3def6 url(images/hborder.png) repeat-x 0px -989px; 674 | } 675 | .gwt-StackPanel .gwt-StackPanelContent { 676 | border: 1px solid #bbbbbb; 677 | border-bottom: 0px; 678 | background: white; 679 | padding: 2px 2px 10px 5px; 680 | } 681 | 682 | .gwt-DecoratedStackPanel { 683 | border-bottom: 1px solid #bbbbbb; 684 | } 685 | .gwt-DecoratedStackPanel .gwt-StackPanelContent { 686 | border: 1px solid #bbbbbb; 687 | border-bottom: 0px; 688 | background: white; 689 | padding: 2px 2px 10px 5px; 690 | } 691 | .gwt-DecoratedStackPanel .gwt-StackPanelItem { 692 | cursor: pointer; 693 | cursor: hand; 694 | } 695 | .gwt-DecoratedStackPanel .stackItemTopLeft, 696 | .gwt-DecoratedStackPanel .stackItemTopRight { 697 | height: 6px; 698 | width: 6px; 699 | zoom: 1; 700 | } 701 | .gwt-DecoratedStackPanel .stackItemTopLeft { 702 | border-left: 1px solid #bbbbbb; 703 | background: #d3def6 url(images/corner.png) no-repeat 0px -49px; 704 | -background: #d3def6 url(images/corner_ie6.png) no-repeat 0px -49px; 705 | } 706 | .gwt-DecoratedStackPanel .stackItemTopRight { 707 | border-right: 1px solid #bbbbbb; 708 | background: #d3def6 url(images/corner.png) no-repeat -6px -49px; 709 | -background: #d3def6 url(images/corner_ie6.png) no-repeat -6px -49px; 710 | } 711 | .gwt-DecoratedStackPanel .stackItemTopLeftInner, 712 | .gwt-DecoratedStackPanel .stackItemTopRightInner { 713 | width: 1px; 714 | height: 1px; 715 | } 716 | * html .gwt-DecoratedStackPanel .stackItemTopLeftInner, 717 | * html .gwt-DecoratedStackPanel .stackItemTopRightInner { 718 | width: 6px; 719 | height: 6px; 720 | overflow: hidden; 721 | } 722 | .gwt-DecoratedStackPanel .stackItemTopCenter { 723 | background: url(images/hborder.png) 0px -21px repeat-x; 724 | } 725 | .gwt-DecoratedStackPanel .stackItemMiddleLeft { 726 | background: #d3def6 url(images/hborder.png) repeat-x 0px -989px; 727 | border-left: 1px solid #bbbbbb; 728 | } 729 | .gwt-DecoratedStackPanel .stackItemMiddleLeftInner, 730 | .gwt-DecoratedStackPanel .stackItemMiddleRightInner { 731 | width: 1px; 732 | height: 1px; 733 | } 734 | .gwt-DecoratedStackPanel .stackItemMiddleRight { 735 | background: #d3def6 url(images/hborder.png) repeat-x 0px -989px; 736 | border-right: 1px solid #bbbbbb; 737 | } 738 | .gwt-DecoratedStackPanel .stackItemMiddleCenter { 739 | font-weight: bold; 740 | font-size: 1.3em; 741 | background: #d3def6 url(images/hborder.png) repeat-x 0px -989px; 742 | } 743 | .gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopRight, 744 | .gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopLeft { 745 | border: 0px; 746 | background-color: white; 747 | } 748 | .gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopLeft, 749 | .gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopRight { 750 | background-color: white; 751 | } 752 | 753 | .gwt-SuggestBox { 754 | padding: 5px 4px; 755 | border: 1px solid #ccc; 756 | border-top: 1px solid #999; 757 | font-size: 100%; 758 | font-family: Arial Unicode MS, Arial, sans-serif; 759 | } 760 | 761 | .gwt-SuggestBoxPopup { 762 | } 763 | 764 | .gwt-SuggestBoxPopup .item { 765 | padding: 2px 6px; 766 | color: #000; 767 | cursor: default; 768 | font-size: 110%; 769 | } 770 | .gwt-SuggestBoxPopup .item-selected { 771 | background: #D5E2FF; 772 | } 773 | .gwt-SuggestBoxPopup .suggestPopupContent { 774 | background: white; 775 | } 776 | .gwt-SuggestBoxPopup .suggestPopupTopCenter { 777 | border-top: 1px solid #bbb; 778 | } 779 | .gwt-SuggestBoxPopup .suggestPopupBottomCenter { 780 | border-bottom: 1px solid #bbb; 781 | } 782 | .gwt-SuggestBoxPopup .suggestPopupTopCenterInner, 783 | .gwt-SuggestBoxPopup .suggestPopupBottomCenterInner { 784 | height: 1px; 785 | line-height: 1px; 786 | } 787 | .gwt-SuggestBoxPopup .suggestPopupMiddleLeft { 788 | border-left: 1px solid #bbb; 789 | } 790 | .gwt-SuggestBoxPopup .suggestPopupMiddleRight { 791 | border-right: 1px solid #bbb; 792 | } 793 | .gwt-SuggestBoxPopup .suggestPopupMiddleLeftInner, 794 | .gwt-SuggestBoxPopup .suggestPopupMiddleRightInner { 795 | width: 1px; 796 | line-height: 1px; 797 | } 798 | .gwt-SuggestBoxPopup .suggestPopupTopLeftInner { 799 | width: 0px; 800 | height: 0px; 801 | zoom: 1; 802 | } 803 | .gwt-SuggestBoxPopup .suggestPopupTopRightInner { 804 | width: 0px; 805 | height: 0px; 806 | zoom: 1; 807 | } 808 | .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner { 809 | width: 0px; 810 | height: 0px; 811 | zoom: 1; 812 | } 813 | .gwt-SuggestBoxPopup .suggestPopupBottomRightInner { 814 | width: 0px; 815 | height: 0px; 816 | zoom: 1; 817 | } 818 | .gwt-SuggestBoxPopup .suggestPopupTopLeft { 819 | background: url(images/circles.png) no-repeat 0px -6px; 820 | -background: url(images/circles_ie6.png) no-repeat 0px -6px; 821 | width:5px; 822 | height:5px; 823 | } 824 | .gwt-SuggestBoxPopup .suggestPopupTopRight { 825 | background: url(images/circles.png) no-repeat -5px -6px; 826 | -background: url(images/circles_ie6.png) no-repeat -5px -6px; 827 | width:5px; 828 | height:5px; 829 | } 830 | .gwt-SuggestBoxPopup .suggestPopupBottomLeft { 831 | background: url(images/circles.png) no-repeat 0px -11px; 832 | -background: url(images/circles_ie6.png) no-repeat 0px -11px; 833 | width:5px; 834 | height:5px; 835 | } 836 | .gwt-SuggestBoxPopup .suggestPopupBottomRight { 837 | background: url(images/circles.png) no-repeat -5px -11px; 838 | -background: url(images/circles_ie6.png) no-repeat -5px -11px; 839 | width:5px; 840 | height:5px; 841 | } 842 | * html .gwt-SuggestBoxPopup .suggestPopupTopLeftInner { 843 | width: 0px; 844 | height: 0px; 845 | overflow: hidden; 846 | } 847 | * html .gwt-SuggestBoxPopup .suggestPopupTopRightInner { 848 | width: 0px; 849 | height: 0px; 850 | overflow: hidden; 851 | } 852 | * html .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner { 853 | width: 0px; 854 | height: 0px; 855 | overflow: hidden; 856 | } 857 | * html .gwt-SuggestBoxPopup .suggestPopupBottomRightInner { 858 | width: 0px; 859 | height: 0px; 860 | overflow: hidden; 861 | } 862 | 863 | .gwt-TabBar { 864 | background: #ccc; 865 | padding-top: 6px; 866 | } 867 | .gwt-TabBar .gwt-TabBarFirst { 868 | width: 5px; /* first tab distance from the left */ 869 | } 870 | .gwt-TabBar .gwt-TabBarRest { 871 | } 872 | .gwt-TabBar .gwt-TabBarItem { 873 | margin-left: 4px; 874 | padding: 4px 8px 4px 8px; 875 | cursor: pointer; 876 | cursor: hand; 877 | color: white; 878 | font-weight: normal; 879 | text-align: center; 880 | background: #8E8E8E; 881 | -moz-border-radius: 3px 3px 0px 0px; 882 | border-radius: 3px 3px 0px 0px; 883 | } 884 | .gwt-TabBar .gwt-TabBarItem-selected { 885 | cursor: default; 886 | background: white; 887 | color: #333; 888 | font-weight: bold; 889 | } 890 | .gwt-TabBar .gwt-TabBarItem-disabled { 891 | cursor: default; 892 | color: #999999; 893 | } 894 | .gwt-TabPanel { 895 | } 896 | .gwt-TabPanelBottom { 897 | border-color: #ccc; 898 | border-style: solid; 899 | border-width: 0px 1px 1px; 900 | overflow: hidden; 901 | padding: 6px; 902 | } 903 | .gwt-DecoratedTabBar { 904 | background: #ccc; 905 | padding-top: 6px; 906 | } 907 | .gwt-DecoratedTabBar .gwt-TabBarFirst { 908 | width: 5px; /* first tab distance from the left */ 909 | } 910 | .gwt-DecoratedTabBar .gwt-TabBarRest { 911 | } 912 | .gwt-DecoratedTabBar .gwt-TabBarItem { 913 | border-collapse: collapse; 914 | margin-left: 4px; 915 | } 916 | .gwt-DecoratedTabBar .tabTopCenter { 917 | padding: 0px; 918 | background: #8E8E8E; 919 | } 920 | .gwt-DecoratedTabBar .tabTopLeft, 921 | .gwt-DecoratedTabBar .tabTopRight { 922 | padding: 0px; 923 | zoom: 1; 924 | } 925 | .gwt-DecoratedTabBar .tabTopLeftInner, 926 | .gwt-DecoratedTabBar .tabTopRightInner { 927 | width: 3px; 928 | height: 3px; 929 | } 930 | .gwt-DecoratedTabBar .tabTopLeft { 931 | background: url(images/circles.png) no-repeat 0px 0px; 932 | -background: url(images/circles_ie6.png) no-repeat 0px 0px; 933 | } 934 | .gwt-DecoratedTabBar .tabTopRight { 935 | background: url(images/circles.png) no-repeat -3px 0px; 936 | -background: url(images/circles_ie6.png) no-repeat -3px 0px; 937 | } 938 | * html .gwt-DecoratedTabBar .tabTopLeftInner, 939 | * html .gwt-DecoratedTabBar .tabTopRightInner { 940 | width: 3px; 941 | height: 3px; 942 | overflow: hidden; 943 | } 944 | .gwt-DecoratedTabBar .tabMiddleLeft, 945 | .gwt-DecoratedTabBar .tabMiddleRight { 946 | width: 3px; 947 | padding: 0px; 948 | background: #8E8E8E; 949 | } 950 | .gwt-DecoratedTabBar .tabMiddleLeftInner, 951 | .gwt-DecoratedTabBar .tabMiddleRightInner { 952 | width: 1px; 953 | height: 1px; 954 | } 955 | .gwt-DecoratedTabBar .tabMiddleCenter { 956 | padding: 0px 5px 4px 5px; 957 | cursor: pointer; 958 | cursor: hand; 959 | color: #fff; 960 | font-weight: normal; 961 | text-align: center; 962 | background: #8E8E8E; 963 | } 964 | .gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopCenter { 965 | background:#fff; 966 | } 967 | .gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopLeft { 968 | background: url(images/circles.png) no-repeat -6px 0px; 969 | -background: url(images/circles_ie6.png) no-repeat -6px 0px; 970 | } 971 | .gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopRight { 972 | background: url(images/circles.png) no-repeat -9px 0px; 973 | -background: url(images/circles_ie6.png) no-repeat -9px 0px; 974 | } 975 | .gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleLeft, 976 | .gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleRight { 977 | background: #fff; 978 | } 979 | .gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleCenter { 980 | cursor: default; 981 | background: #fff; 982 | color:#333; 983 | font-weight:bold; 984 | } 985 | .gwt-DecoratedTabBar .gwt-TabBarItem-disabled .tabMiddleCenter { 986 | cursor: default; 987 | color: #999999; 988 | } 989 | 990 | .gwt-TextArea { 991 | padding: 4px; 992 | border: 1px solid #ccc; 993 | border-top: 1px solid #666; 994 | font-size: 100%; 995 | font-family: Arial Unicode MS, Arial, sans-serif; 996 | } 997 | .gwt-TextArea-readonly { 998 | color: #888; 999 | } 1000 | 1001 | .gwt-TextBox { 1002 | padding: 5px 4px; 1003 | border: 1px solid #ccc; 1004 | border-top: 1px solid #999; 1005 | font-size: small; 1006 | font-family: Arial Unicode MS, Arial, sans-serif; 1007 | } 1008 | .gwt-TextBox-readonly { 1009 | color: #888; 1010 | } 1011 | .gwt-ToggleButton-up, 1012 | .gwt-ToggleButton-up-hovering, 1013 | .gwt-ToggleButton-up-disabled, 1014 | .gwt-ToggleButton-down, 1015 | .gwt-ToggleButton-down-hovering, 1016 | .gwt-ToggleButton-down-disabled { 1017 | margin: 0; 1018 | text-decoration: none; 1019 | background: url("images/hborder.png") repeat-x 0px -27px; 1020 | -moz-border-radius: 2px; 1021 | border-radius: 2px; 1022 | } 1023 | .gwt-ToggleButton-up, 1024 | .gwt-ToggleButton-up-hovering, 1025 | .gwt-ToggleButton-up-disabled { 1026 | padding: 3px 5px 3px 5px; 1027 | } 1028 | .gwt-ToggleButton-up { 1029 | border:1px solid #bbb; 1030 | border-bottom: 1px solid #a0a0a0; 1031 | cursor: pointer; 1032 | cursor: hand; 1033 | } 1034 | .gwt-ToggleButton-up-hovering { 1035 | border: 1px solid; 1036 | border-color: #939393; 1037 | cursor: pointer; 1038 | cursor: hand; 1039 | } 1040 | .gwt-ToggleButton-up-disabled { 1041 | border: 1px solid #bbb; 1042 | cursor: default; 1043 | opacity: .5; 1044 | zoom: 1; 1045 | filter: alpha(opacity=45); 1046 | } 1047 | .gwt-ToggleButton-down, 1048 | .gwt-ToggleButton-down-hovering, 1049 | .gwt-ToggleButton-down-disabled { 1050 | padding: 4px 4px 2px 6px; 1051 | } 1052 | .gwt-ToggleButton-down { 1053 | background-position: 0 -513px; 1054 | border: 1px inset #666; 1055 | cursor: pointer; 1056 | cursor: hand; 1057 | } 1058 | .gwt-ToggleButton-down-hovering { 1059 | background-position: 0 -513px; 1060 | border: 1px inset; 1061 | border-color: #9cf #69e #69e #7af; 1062 | cursor: pointer; 1063 | cursor: hand; 1064 | } 1065 | .gwt-ToggleButton-down-disabled { 1066 | background-position: 0 -513px; 1067 | border: 1px inset #ccc; 1068 | cursor: default; 1069 | opacity: .5; 1070 | zoom: 1; 1071 | filter: alpha(opacity=45); 1072 | } 1073 | 1074 | .gwt-Tree .gwt-TreeItem { 1075 | padding: 1px 0px; 1076 | margin: 0px; 1077 | white-space: nowrap; 1078 | cursor: hand; 1079 | cursor: pointer; 1080 | } 1081 | .gwt-Tree .gwt-TreeItem-selected { 1082 | background: #ebeff9; 1083 | } 1084 | .gwt-TreeItem .gwt-RadioButton input, 1085 | .gwt-TreeItem .gwt-CheckBox input { 1086 | margin-left: 0px; 1087 | } 1088 | * html .gwt-TreeItem .gwt-RadioButton input, 1089 | * html .gwt-TreeItem .gwt-CheckBox input { 1090 | margin-left: -4px; 1091 | } 1092 | 1093 | .gwt-DateBox { 1094 | padding: 5px 4px; 1095 | border: 1px solid #ccc; 1096 | border-top: 1px solid #999; 1097 | font-size: 100%; 1098 | } 1099 | .gwt-DateBox input { 1100 | width: 8em; 1101 | } 1102 | .dateBoxFormatError { 1103 | background: #ffcccc; 1104 | } 1105 | .dateBoxPopup { 1106 | } 1107 | 1108 | .gwt-DatePicker { 1109 | border: 1px solid #ccc; 1110 | border-top:1px solid #999; 1111 | cursor: default; 1112 | } 1113 | .gwt-DatePicker td, 1114 | .datePickerMonthSelector td:focus { 1115 | outline: none; 1116 | } 1117 | .datePickerDays { 1118 | width: 100%; 1119 | background: white; 1120 | } 1121 | .datePickerDay, 1122 | .datePickerWeekdayLabel, 1123 | .datePickerWeekendLabel { 1124 | font-size: 85%; 1125 | text-align: center; 1126 | padding: 4px; 1127 | outline: none; 1128 | font-weight:bold; 1129 | color:#333; 1130 | border-right: 1px solid #EDEDED; 1131 | border-bottom: 1px solid #EDEDED; 1132 | } 1133 | .datePickerWeekdayLabel, 1134 | .datePickerWeekendLabel { 1135 | background: #fff; 1136 | padding: 0px 4px 2px; 1137 | cursor: default; 1138 | color:#666; 1139 | font-size:70%; 1140 | font-weight:normal; 1141 | } 1142 | .datePickerDay { 1143 | padding: 4px 7px; 1144 | cursor: hand; 1145 | cursor: pointer; 1146 | } 1147 | .datePickerDayIsWeekend { 1148 | background: #f7f7f7; 1149 | } 1150 | .datePickerDayIsFiller { 1151 | color: #999; 1152 | font-weight:normal; 1153 | } 1154 | .datePickerDayIsValue { 1155 | background: #d7dfe8; 1156 | } 1157 | .datePickerDayIsDisabled { 1158 | color: #AAAAAA; 1159 | font-style: italic; 1160 | } 1161 | .datePickerDayIsHighlighted { 1162 | background: #F0E68C; 1163 | } 1164 | .datePickerDayIsValueAndHighlighted { 1165 | background: #d7dfe8; 1166 | } 1167 | .datePickerDayIsToday { 1168 | padding: 3px; 1169 | color: #fff; 1170 | background: url(images/hborder.png) repeat-x 0px -2607px; 1171 | } 1172 | 1173 | .datePickerMonthSelector { 1174 | width: 100%; 1175 | padding: 1px 0 5px 0; 1176 | background: #fff; 1177 | } 1178 | td.datePickerMonth { 1179 | text-align: center; 1180 | vertical-align: middle; 1181 | white-space: nowrap; 1182 | font-size: 100%; 1183 | font-weight: bold; 1184 | color: #333; 1185 | } 1186 | .datePickerPreviousButton, 1187 | .datePickerNextButton { 1188 | font-size: 120%; 1189 | line-height: 1em; 1190 | color: #3a6aad; 1191 | cursor: hand; 1192 | cursor: pointer; 1193 | font-weight: bold; 1194 | padding: 0px 4px; 1195 | outline: none; 1196 | } 1197 | 1198 | .gwt-StackLayoutPanel { 1199 | border-bottom: 1px solid #bbbbbb; 1200 | } 1201 | .gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader { 1202 | cursor: pointer; 1203 | cursor: hand; 1204 | font-weight: bold; 1205 | font-size: 1.3em; 1206 | padding: 3px; 1207 | border: 1px solid #bbbbbb; 1208 | border-bottom: 0px; 1209 | background: #d3def6 url(images/hborder.png) repeat-x 0px -989px; 1210 | } 1211 | .gwt-StackLayoutPanel .gwt-StackLayoutPanelHeader-hovering { 1212 | background: #d3def6; 1213 | } 1214 | .gwt-StackLayoutPanel .gwt-StackLayoutPanelContent { 1215 | border: 1px solid #bbbbbb; 1216 | border-bottom: 0px; 1217 | background: white; 1218 | padding: 2px 2px 10px 5px; 1219 | } 1220 | 1221 | .gwt-TabLayoutPanel { 1222 | } 1223 | .gwt-TabLayoutPanel .gwt-TabLayoutPanelTabs { 1224 | background: #ccc; 1225 | padding-top: 6px; 1226 | padding-left: 5px; 1227 | } 1228 | .gwt-TabLayoutPanel .gwt-TabLayoutPanelContentContainer { 1229 | border-color: #ccc; 1230 | border-style: solid; 1231 | border-width: 0px 1px 1px; 1232 | } 1233 | .gwt-TabLayoutPanel .gwt-TabLayoutPanelContent { 1234 | overflow: hidden; 1235 | padding: 6px; 1236 | } 1237 | .gwt-TabLayoutPanel .gwt-TabLayoutPanelTab { 1238 | margin-left: 4px; 1239 | padding: 4px 8px 4px 8px; 1240 | cursor: pointer; 1241 | cursor: hand; 1242 | color: white; 1243 | font-weight: normal; 1244 | text-align: center; 1245 | background: #8E8E8E; 1246 | -moz-border-radius: 3px 3px 0px 0px; 1247 | border-radius: 3px 3px 0px 0px; 1248 | } 1249 | .gwt-TabLayoutPanel .gwt-TabLayoutPanelTab-selected { 1250 | cursor: default; 1251 | background: white; 1252 | color: #333; 1253 | font-weight: bold; 1254 | } 1255 | 1256 | .gwt-SplitLayoutPanel-HDragger { 1257 | background: #e7e7e7 url(images/thumb_vertical.png) center center no-repeat; 1258 | cursor: col-resize; 1259 | } 1260 | 1261 | .gwt-SplitLayoutPanel-VDragger { 1262 | background: #e7e7e7 url(images/thumb_horz.png) center center no-repeat; 1263 | cursor: row-resize; 1264 | } -------------------------------------------------------------------------------- /css/gamepad.css: -------------------------------------------------------------------------------- 1 | .gpTableCell { 2 | border: solid 2px gray; 3 | border-radius: 6px; 4 | } 5 | 6 | .gpTableCellUnConnected { 7 | border-color: lightgray; 8 | color: gray; 9 | } 10 | 11 | .gpNotConnectedText { 12 | font-size: 26pt; 13 | text-align: center; 14 | } 15 | 16 | #gamepadStateTable, #gamepadStateTable th { 17 | border-collapse: collapse; 18 | } 19 | 20 | #gamepadStateTable th { 21 | font-weight: bold; 22 | text-align:left; 23 | } 24 | 25 | #gamepadStateTable td, #gamepadStateTable th { 26 | border: solid 1px #0094FF; 27 | padding: 1px 5px 1px 5px; 28 | color: white; 29 | } 30 | 31 | .AxisVisualizer { 32 | width: 108px; 33 | height: 108px; 34 | background-image: url(../images/crosshair_ball3.png), url(../images/grid.png); 35 | background-position: 10px 10px, 4px 4px; 36 | background-repeat: no-repeat; 37 | } 38 | 39 | .AnalogButtonVisualizer { 40 | width: 30px; 41 | height: 100px; 42 | background-image: url(../images/trigger_meter_fill.png), url(../images/trigger_meter.png); 43 | background-repeat: no-repeat; 44 | font-weight: bold; 45 | text-align: center; 46 | } 47 | 48 | .VisualizerGeneric { 49 | float: left; 50 | margin: 5px; 51 | } 52 | 53 | .AnalogButtonVisualizer #val { 54 | font-size: 9pt; 55 | font-weight: normal; 56 | } 57 | 58 | .oval { 59 | border: solid 1px #0094FF; 60 | border-radius: 3px 3px; 61 | background-clip: border-box; 62 | font-weight: bold; 63 | text-align: center; 64 | } 65 | 66 | .circle { 67 | width: 20px; 68 | height: 20px; 69 | border: solid 1px #0094FF; 70 | border-radius: 100%; 71 | background-clip: border-box; 72 | font-weight: bold; 73 | text-align: center; 74 | line-height: 20px; 75 | } 76 | 77 | .DPad { 78 | position: relative; 79 | left: 10px; 80 | width: 65px; 81 | height: 64px; 82 | background-image: url(../images/dpad.png); 83 | } 84 | 85 | .btnDU, .btnDL, .btnDR, .btnDD { 86 | width: 20px; 87 | height: 20px; 88 | position: absolute; 89 | } 90 | 91 | .btnDU { 92 | left: 23px; 93 | top: 1px; 94 | border-radius: 3px 3px 0px 0px; 95 | } 96 | 97 | .btnDL { 98 | left: 1px; 99 | top: 22px; 100 | border-radius: 3px 0px 0px 3px; 101 | } 102 | 103 | .btnDR { 104 | left: 44px; 105 | top: 23px; 106 | border-radius: 0px 3px 3px 0px; 107 | } 108 | 109 | .btnDD { 110 | left: 23px; 111 | top: 43px; 112 | border-radius: 0px 0px 3px 3px; 113 | } 114 | 115 | .selOrStart { 116 | width: 45px; 117 | } 118 | 119 | .bumper { 120 | width: 80px; 121 | } 122 | 123 | #gamepadDisplayDiv{ 124 | margin-top: 4px; 125 | } 126 | 127 | #gamepadSupportedDiv { 128 | font-size: 4em; 129 | color: white; 130 | 131 | } 132 | 133 | #buttonNeverPressedDiv { 134 | font-size: 3em; 135 | } 136 | 137 | #gamepadSupportedDiv .gpTable tr, .gpTableCell { 138 | background: gray; 139 | } 140 | 141 | td.gpTableCellUnConnected{ 142 | display:none; 143 | } 144 | 145 | #gamepadStateTable{ 146 | font-size: 0.75rem; 147 | } 148 | 149 | #gamepadDisplayDiv table #gp1Axis4{ 150 | display:none; 151 | } 152 | 153 | -------------------------------------------------------------------------------- /css/web-bluetooth.css: -------------------------------------------------------------------------------- 1 | body{ 2 | font-family: 'Open Sans', sans-serif; 3 | } 4 | 5 | .intro{ 6 | display: block; 7 | width: 90%; 8 | margin: 0 auto 1rem auto; 9 | } 10 | 11 | h1{ 12 | font-weight: 400; 13 | } 14 | 15 | .intro a{ 16 | margin-top: 1rem; 17 | display: block; 18 | } 19 | 20 | #connect{ 21 | box-shadow: none; 22 | background: white; 23 | border: 1px solid black; 24 | cursor: pointer; 25 | } 26 | 27 | .main-container{ 28 | position: relative; 29 | width: 90%; 30 | display: block; 31 | margin: 0 auto; 32 | padding-top: 2rem; 33 | } 34 | 35 | .container{ 36 | width: 25%; 37 | min-height: 15rem; 38 | right: 0; 39 | display: inline-block; 40 | vertical-align: top; 41 | border: 1px solid grey; 42 | } 43 | 44 | .pose-image{ 45 | display: block; 46 | margin: 0 auto; 47 | width: 60%; 48 | } 49 | 50 | canvas{ 51 | width: 100% !important; 52 | height: 100% !important; 53 | } 54 | 55 | .myo-data{ 56 | display: inline-block; 57 | width: 45%; 58 | border: 1px solid black; 59 | height: 60%; 60 | margin-right: 2rem; 61 | } 62 | 63 | .myo-data ul li{ 64 | font-size: 14px; 65 | list-style: none; 66 | left: 0; 67 | margin-left: 0; 68 | margin-bottom: 0.5rem; 69 | } 70 | 71 | .myo-data ul{ 72 | padding-left: 1rem; 73 | } 74 | -------------------------------------------------------------------------------- /images/child-back-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/child-back-gray.png -------------------------------------------------------------------------------- /images/child-face-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/child-face-gray.png -------------------------------------------------------------------------------- /images/child-left-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/child-left-gray.png -------------------------------------------------------------------------------- /images/child-profile-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/child-profile-gray.png -------------------------------------------------------------------------------- /images/child-right-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/child-right-gray.png -------------------------------------------------------------------------------- /images/clear.cache.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/clear.cache.gif -------------------------------------------------------------------------------- /images/corner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/corner.png -------------------------------------------------------------------------------- /images/crosshair_ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/crosshair_ball.png -------------------------------------------------------------------------------- /images/crosshair_ball2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/crosshair_ball2.png -------------------------------------------------------------------------------- /images/crosshair_ball3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/crosshair_ball3.png -------------------------------------------------------------------------------- /images/crosshair_mine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/crosshair_mine.png -------------------------------------------------------------------------------- /images/crosshair_mine2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/crosshair_mine2.png -------------------------------------------------------------------------------- /images/crosshair_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/crosshair_star.png -------------------------------------------------------------------------------- /images/crosshair_thick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/crosshair_thick.png -------------------------------------------------------------------------------- /images/crosshair_thin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/crosshair_thin.png -------------------------------------------------------------------------------- /images/dpad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/dpad.png -------------------------------------------------------------------------------- /images/green-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/green-circle.png -------------------------------------------------------------------------------- /images/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/grid.png -------------------------------------------------------------------------------- /images/hand-gray-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-gray-left.png -------------------------------------------------------------------------------- /images/hand-gray-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-gray-right.png -------------------------------------------------------------------------------- /images/hand-green-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-green-left.png -------------------------------------------------------------------------------- /images/hand-green-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-green-right.png -------------------------------------------------------------------------------- /images/hand-left-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-left-button.png -------------------------------------------------------------------------------- /images/hand-left-yellow-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-left-yellow-button.png -------------------------------------------------------------------------------- /images/hand-right-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-right-button.png -------------------------------------------------------------------------------- /images/hand-right-yellow-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-right-yellow-button.png -------------------------------------------------------------------------------- /images/hand-rotate-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-rotate-button.png -------------------------------------------------------------------------------- /images/hand-yellow-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-yellow-left.png -------------------------------------------------------------------------------- /images/hand-yellow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hand-yellow-right.png -------------------------------------------------------------------------------- /images/hborder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/hborder.png -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/icon.png -------------------------------------------------------------------------------- /images/left-arrow-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/left-arrow-dark.png -------------------------------------------------------------------------------- /images/left-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/left-arrow.png -------------------------------------------------------------------------------- /images/pause_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/pause_button.png -------------------------------------------------------------------------------- /images/pause_button_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/pause_button_gray.png -------------------------------------------------------------------------------- /images/record_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/record_button.png -------------------------------------------------------------------------------- /images/record_button_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/record_button_gray.png -------------------------------------------------------------------------------- /images/right-arrow-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/right-arrow-dark.png -------------------------------------------------------------------------------- /images/right-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/right-arrow.png -------------------------------------------------------------------------------- /images/trigger_meter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/trigger_meter.png -------------------------------------------------------------------------------- /images/trigger_meter_fill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/trigger_meter_fill.png -------------------------------------------------------------------------------- /images/vborder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/vborder.png -------------------------------------------------------------------------------- /images/yellow-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/curtpw/web-bluetooth-neural-network/5a3b68bc347a7c8d5505724e55afd6d50024edef/images/yellow-circle.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Activity Tracker Neural Network Gesture Recognition Tutorial 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 29 | 30 | 31 | 32 | 33 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 |
503 | 504 |
505 |
   HR Photosensor:
506 |
   Pitch:
507 |
   Roll:
508 |
   Accelerometer X:
509 |
   Accelerometer Y:
510 |
   Accelerometer Z:
511 |
512 | 513 | 514 |
515 | 516 | 517 |
518 | 519 |
520 | 521 |
522 |
NN1 TRUE: 0
523 |
NN1 FALSE: 0
524 |
NN2 TRUE: 0
525 |
NN2 FALSE: 0
526 |
Neural Network 1 SCOREna
527 |
Neural Network 2 SCOREna
528 |
529 | 530 |
531 |
532 | 535 | 536 | 537 | 538 |
539 |

# Samples

540 | 541 | 0 542 |
543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 |
551 | 552 |
553 | 554 | 555 | 556 | 557 | 558 | 559 |
560 | 561 |
562 | 563 | 564 |
565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 |
576 |

Select Neural Network Architecture (LSTM Multilayer Perceptron)

577 | 578 | 3:3:3:1 579 |
580 |
581 | 582 |
583 | 584 | 585 | 586 | 587 | 588 | 661 | 662 | -------------------------------------------------------------------------------- /js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.2.0 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('